Makine Öğrenmesi — Karar Ağaçları (Decision Tree)Algoritması Nedir?

Evren Arslan
5 min readMay 26, 2020

--

Photo by Jet Kim on Unsplash

Kavramsal olarak Karar Ağaçları (Decision Tree) Algoritması

Makine öğrenmesindeki temel algoritmalardan bir diğeri Karar Ağaçları (Decision Tree)Algoritmasıdır. En basit tanım ile, olası sonuç için oluşturulabilecek karar yollarının oluşturulmasıdır. Elimizdeki veri setindeki bir feature (kolon) seçip onun diğer alanlar üzerindeki dallanmalarını ilişkilendirip bir karar ağacı çıkartırız.

Örnek olması açısından aşağıdaki gibi veri setimiz olduğunu varsayalım. Hastaların kişisel özellikleri ve kullandıkları ilacın ne olduğunun gösteren bu veri üzerinden yorum yaparak H15 olarak kodlanmış hastaya hangi ilacı vermemiz gerektiğini bulabilirmiyiz. Bu problem klasik bir karar ağacı problemi olarak ele alınabilir.

Örnek Hasta Veri Seti.

Bir karar ağacı yaparken önce herhangi bir özelliği alıp onun alabildiği seçenekler ile diğer özelliğin seçeneklerinden bir yol oluştururuz. Burada önemli olan, sonucu farklılaştıran kırılımları yola dahil etmektir. Aşağıdaki örnekte görebileceğiniz gibi, Genç olan hastanın A yada B ilacını almasına karar vermek için sadece cinsiyet verisi kullanılabilir. “ Ki bu veriye göre vereceğimiz kararlardan biri doğrunun bu olacağı anlamına gelmiyor.” Fakat hasta yaşlı olduğu zaman ağacımızın dalları daha uzamaya ve farklılaşmaya başlıyor. Hasta Yaşlı ve Kadın ise sadece Kolestrol verisi bize hangi ilacı seçeceğimiz konusunda yardımcı oluyor. Eğer hastamız Yaşlı ve Erkek ise o zaman Tansiyon verisini de kullanmamız gerekiyor.

Karar Ağaçları (Decision Tree) Algoritması

Yukarıdaki resimde gördüğünüz karar ağacı Yaş özelliği ile başlıyor. Bu özellik kök olarak seçmek için en uygun olanı mı? Daha kısa yollar ile sonuca ulaşmamızı sağlayacak bir kök olabilir mi? Bu soruların yanıtı için seçilen özelliğin tüm veri seti içerisindeki öneminin bilinmesi gerekmektedir.

Özelliğin önemine nasıl karar vereceğiz? Bunun için her bir özellik için hedef verinin dağılımına bakmamız gerekiyor. Hangisinde dağılım daha homojen ise onun ayırt ediciliği dolayısı ile önemi daha fazladır.

Mesela aşağıdaki tablolara göre hangi özeliğin altındaki seçeneklerde ilaç dağılımının nasıl olacağını görebiliyoruz. Yaş Özelliğine göre sınıflandırmak yerine cinsiyete göre sınıflandırmaya başlamak bu tabloya göre daha doğru görünüyor. Çünkü Erkek(E) yada Kadın(K) oluşuna göre olasılıkların yarısını eleyebildiğimiz gibi eğer hasta erkek ise 6/7 oranında B ilacını alacağını söyleyebiliriz.

Karar Ağaçları (Decision Tree) Algoritması — Doğru feature seçimi

Karar Ağaçları (Decision Tree) Algoritmasının asıl meselesi işte kademeli olarak doğru özelliğin seçilerek en kısa yol ile doğru seçenek için %100'e yakın olasılığı bulmaktır.

Bunu bulmak için her düğümde o düğüm için entropi hesaplanır. Entropi, bir verideki rastgeleliğin ölçülmesidir. Örnek olması için yukarıdaki tablolara bakacak olursak. Cinsiyet düğümünün entropisi 1'dir. Çünkü E ve K değerlerindeki örnek dağılımı 7'ye 7'dir. Fakat Yaş->Orta Yaşlı seçeneğinin entropisi 0'dır. Çünkü Orta yaşın altındaki değerlerin tamamı B’dir. Entropi ne kadar düşük olursa o veri seti o kadar homojen demektir.

Karar Ağaçları (Decision Tree) Algoritması bu entropi değerini nasıl kullanır? Direkt bu değeri kullanmak yerine Information Gain (Edinilen Bilgi) değerini kullanılır. Information gain, adından anlaşılacağı üzerine her adımda doğru bilgiye ulaşma oranı olarak tanımlamanabilir. Entropi küçüldükçe Information Gain artar.

Entropi her seçenek için ayrı ayrı hesaplanırken Information gain node için hesaplanır. Hesaplarken bir önceli düğümün entropisiden altındaki seçeneklerin entropisinden hesaplanan ağırlıklı entropi değeri çıkartılır. Sonuç olarak hangi düğümün Information Gain değeri daha yüksek ise öncelikli olarak o özelliklik kök düğüm olarak seçilir.

Python ile Karar Ağaçları (Decision Tree) Algoritması Örneği

Şu ana kadar anlatmış olduğumuz Karar Ağaçları (Decision Tree) Algoritmasının Python ve Scikit-Learn ile bir uygulamasını yapalım. Örneğimiz yukarıda bahsettiğimiz ilaç seçme uygulaması olacak.

Analiz için veri seti

Veri Hazırlığı

Öncelikli olarak elimizdeki verinin analize hazır hale getirilmesi gerekiyor. Scikit-Learn ile modelimizi eğitmeden önce tahmin edeceğimiz özellik “ilaç” ve diğer özellikleri iki ayrı değişkene atayacağız. X tahmin için kullanacağımız özelliklerden oluşan matris olacak. y ise tahmmin edeceğimiz veriden oluşan bir vektör olacak.

Sklearn Decision Tree Algoritması kategorik verileri analiz edemiyor. Bu sebeple Cinsiyet, Tansiyon,Kolestrol verilerini sayısal kategorik verilere çevirmemiz gerekiyor. Bunu sağlamak için label encoding metodunu kullanırız.

Modelin Oluşturulması

Öncelikli olarak verimizi train ve test olarak iki kısma ayıracağız. Yani elimizide X_train, X_test, y_train y_test olmak üzere 4 veri seti olacak.

Oluşturduğumuz veri setlerinin boyutlarının analiz için birbiri ile uyumlu olması gerekiyor.

İlk olarak ilacTree isminde bir DecisionTreeClassifier instance oluşturacağız. Bu instance içinde, her bir düğümün information gain değerini görebilmemiz için criterion=”entropy” olarak tanımlayacağız.

Artık modeli eğitebiliriz.

Tahmin & Değerlendirme

Yukarıda oluşturmuş olduğumuz modeli kullanarak tahmin yapalım ve sonucları bir değişkende toplayalım.

İlk beş değer için mükemmel çalıştı :) Şimdi tüm veri seti üzerinden modelin başarımına bakalım.

Tüm test verisi üzerinden modelimizin başarımı %98 gibi gayet iyi bir değer verdi.

Karar ağacı modelinin görselleştirilmesi

Modelin oluşturdurğu karar ağacı modeline incelemek istersek onu bir resim olarak görüntüleyebiliriz. Oluşturulan modelin çıktısı aşağıdaki gibi olacaktır.

Decision Tree — Karar Ağacı

Gayet başarılı çalışan bir ilaç öneri modeli ürettik. Yukarıda görmüş olduğunuz kodlara aşağıdaki linkten erişebilirsiniz.

--

--