logo

Karar Ağacı Sınıflandırma Algoritması

  • Karar Ağacı bir Denetimli öğrenme tekniği Hem sınıflandırma hem de Regresyon problemlerinde kullanılabilen ancak çoğunlukla Sınıflandırma problemlerinin çözümünde tercih edilen bir yöntemdir. Ağaç yapılı bir sınıflandırıcıdır. iç düğümler bir veri kümesinin özelliklerini temsil eder, dallar ise karar kurallarını temsil eder Ve her yaprak düğümü sonucu temsil eder.
  • Karar ağacında iki düğüm vardır; bunlar Karar Düğümü Ve Yaprak düğümü. Karar düğümleri herhangi bir karar vermek için kullanılır ve birden fazla dala sahiptir; oysa Yaprak düğümler bu kararların çıktısıdır ve başka dallar içermez.
  • Kararlar veya test, verilen veri setinin özelliklerine göre gerçekleştirilir.
  • Verilen koşullara bağlı olarak bir problemin/kararın olası tüm çözümlerini elde etmek için kullanılan grafiksel bir gösterimdir.
  • Karar ağacı olarak adlandırılmasının nedeni, ağaca benzer şekilde kök düğümle başlaması ve daha sonraki dallara doğru genişleyerek ağaca benzer bir yapı oluşturmasıdır.
  • Bir ağaç oluşturmak için şunları kullanırız: CART algoritması, hangisi anlamına geliyor Sınıflandırma ve Regresyon Ağacı algoritması.
  • Karar ağacı basitçe bir soru sorar ve cevaba (Evet/Hayır) göre ağacı alt ağaçlara ayırır.
  • Aşağıdaki şemada bir karar ağacının genel yapısı açıklanmaktadır:

Not: Bir karar ağacı sayısal verilerin yanı sıra kategorik verileri de (EVET/HAYIR) içerebilir.

Karar Ağacı Sınıflandırma Algoritması

Karar Ağaçlarını neden kullanmalı?

Makine öğreniminde çeşitli algoritmalar vardır, bu nedenle verilen veri kümesi ve problem için en iyi algoritmayı seçmek, bir makine öğrenimi modeli oluştururken hatırlanması gereken ana noktadır. Karar ağacını kullanmanın iki nedeni aşağıdadır:

  • Karar Ağaçları genellikle karar verirken insanın düşünme yeteneğini taklit eder, dolayısıyla anlaşılması kolaydır.
  • Karar ağacının mantığı ağaca benzer bir yapı gösterdiği için kolaylıkla anlaşılabilmektedir.

Karar Ağacı Terminolojileri

Kök Düğüm:Kök düğüm karar ağacının başladığı yerdir. Ayrıca iki veya daha fazla homojen kümeye bölünen veri kümesinin tamamını temsil eder.Yaprak düğümü:Yaprak düğümler son çıktı düğümüdür ve ağaç, bir yaprak düğümü aldıktan sonra daha fazla ayrıştırılamaz.Bölme:Bölme, karar düğümünün/kök düğümün verilen koşullara göre alt düğümlere bölünmesi işlemidir.Dal/Alt Ağaç:Ağacın bölünmesiyle oluşan ağaç.Budama:Budama, ağaçta istenmeyen dalların uzaklaştırılması işlemidir.Ebeveyn/Alt düğüm:Ağacın kök düğümüne ana düğüm, diğer düğümlere ise alt düğümler adı verilir.

Karar Ağacı algoritması nasıl çalışır?

Java dizeyi int'ye dönüştürür

Bir karar ağacında, verilen veri kümesinin sınıfını tahmin etmek için algoritma ağacın kök düğümünden başlar. Bu algoritma, kök özniteliğin değerlerini kayıt (gerçek veri kümesi) özniteliğiyle karşılaştırır ve karşılaştırmaya göre dalları takip ederek bir sonraki düğüme atlar.

Bir sonraki düğüm için algoritma, nitelik değerini tekrar diğer alt düğümlerle karşılaştırır ve daha ileri gider. Ağacın yaprak düğümüne ulaşıncaya kadar işleme devam eder. Aşağıdaki algoritma kullanılarak sürecin tamamı daha iyi anlaşılabilir:

    Aşama 1:Ağaca, tüm veri kümesini içeren kök düğümle başlayın diyor S.Adım 2:Kullanarak veri kümesindeki en iyi özelliği bulun Nitelik Seçim Ölçüsü (ASM). Aşama 3:S'yi en iyi nitelikler için olası değerleri içeren alt kümelere bölün.Adım-4:En iyi özelliği içeren karar ağacı düğümünü oluşturun.Adım 5:-3. adımda oluşturulan veri kümesinin alt kümelerini kullanarak yinelemeli olarak yeni karar ağaçları oluşturun. Düğümleri daha fazla sınıflandıramayacağınız ve son düğümü yaprak düğüm olarak adlandıramayacağınız bir aşamaya ulaşana kadar bu işleme devam edin.

Örnek: Diyelim ki bir iş teklifi alan ve teklifi kabul edip etmemeye karar vermek isteyen bir aday var. Dolayısıyla bu sorunu çözmek için karar ağacı kök düğümle (ASM'nin Maaş özelliği) başlar. Kök düğüm, karşılık gelen etiketlere göre bir sonraki karar düğümüne (ofise uzaklık) ve bir yaprak düğüme bölünür. Bir sonraki karar düğümü ayrıca bir karar düğümüne (Cab tesisi) ve bir yaprak düğüme bölünür. Son olarak karar düğümü iki yaprak düğüme ayrılır (Kabul edilen teklifler ve Reddedilen teklif). Aşağıdaki diyagramı göz önünde bulundurun:

Karar Ağacı Sınıflandırma Algoritması

Nitelik Seçimi Ölçüleri

Karar ağacını uygularken asıl sorun, kök düğüm ve alt düğümler için en iyi özelliğin nasıl seçileceğidir. Dolayısıyla bu tür sorunları çözmek için adı verilen bir teknik var. Öznitelik seçim ölçüsü veya ASM. Bu ölçümle ağacın düğümleri için en iyi özelliği kolaylıkla seçebiliriz. ASM için iki popüler teknik vardır:

    Bilgi Kazanımı Gini Endeksi

1. Bilgi Kazanımı:

  • Bilgi kazancı, bir veri kümesinin bir özelliğe göre bölümlenmesinden sonra entropideki değişikliklerin ölçümüdür.
  • Bir özelliğin bize bir sınıf hakkında ne kadar bilgi sağladığını hesaplar.
  • Bilgi kazancının değerine göre düğümü bölüyoruz ve karar ağacını oluşturuyoruz.
  • Bir karar ağacı algoritması her zaman bilgi kazancının değerini maksimuma çıkarmaya çalışır ve en yüksek bilgi kazancına sahip olan düğüm/öznitelik önce bölünür. Aşağıdaki formül kullanılarak hesaplanabilir:
 Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature) 

Entropi: Entropi, belirli bir özellikteki safsızlığı ölçen bir ölçümdür. Verilerdeki rastgeleliği belirtir. Entropi şu şekilde hesaplanabilir:

Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)

Nerede,

tarihten dizeye dönüştürme
    S= Toplam numune sayısı P(evet)= evet olasılığı P(hayır)= hayır olasılığı

2. Gini Endeksi:

  • Gini indeksi, CART (Sınıflandırma ve Regresyon Ağacı) algoritmasında bir karar ağacı oluştururken kullanılan safsızlık veya saflığın bir ölçüsüdür.
  • Yüksek Gini indeksine kıyasla düşük Gini indeksine sahip bir özellik tercih edilmelidir.
  • Yalnızca ikili bölünmeler oluşturur ve CART algoritması ikili bölünmeler oluşturmak için Gini dizinini kullanır.
  • Gini endeksi aşağıdaki formül kullanılarak hesaplanabilir:
 Gini Index= 1- &#x2211;<sub>j</sub>P<sub>j</sub><sup>2</sup> 

Budama: Optimal Karar Ağacını Elde Etmek

Budama, en uygun karar ağacını elde etmek için gereksiz düğümlerin ağaçtan silinmesi işlemidir.

Çok büyük bir ağaç, aşırı uyum riskini artırır ve küçük bir ağaç, veri kümesinin tüm önemli özelliklerini yakalayamayabilir. Bu nedenle doğruluğu azaltmadan öğrenme ağacının boyutunu azaltan bir teknik Budama olarak bilinir. Esas olarak iki tür ağaç vardır budama kullanılan teknoloji:

    Maliyet Karmaşıklığı Budama Hatalı Budama Azaltıldı.

Karar Ağacının Avantajları

  • Bir insanın gerçek hayatta herhangi bir karar alırken izlediği sürecin aynısını takip ettiği için anlaşılması kolaydır.
  • Kararla ilgili sorunların çözümünde çok yararlı olabilir.
  • Bir problemin olası tüm sonuçlarını düşünmek yardımcı olur.
  • Diğer algoritmalara göre daha az veri temizleme gereksinimi vardır.

Karar Ağacının Dezavantajları

  • Karar ağacı çok sayıda katman içerir ve bu da onu karmaşık hale getirir.
  • kullanılarak çözülebilecek aşırı uyum sorunu olabilir. Rastgele Orman algoritması.
  • Daha fazla sınıf etiketi için karar ağacının hesaplama karmaşıklığı artabilir.

Karar Ağacının Python Uygulaması

Şimdi Karar ağacını Python kullanarak uygulayacağız. Bunun için 'veri kümesini kullanacağız' user_data.csv Daha önceki sınıflandırma modellerinde kullanmıştık. Aynı veri setini kullanarak Karar ağacı sınıflandırıcısını aşağıdaki gibi diğer sınıflandırma modelleriyle karşılaştırabiliriz. KNN SVM, Lojistik Regresyon vb.

Aşağıda verilen adımlar da aynı kalacaktır:

    Veri Ön İşleme adımı Karar Ağacı algoritmasının Eğitim setine yerleştirilmesi Test sonucunu tahmin etmek Sonucun doğruluğunu test edin (Karışıklık matrisinin oluşturulması) Test seti sonucunun görselleştirilmesi.

1. Veri Ön İşleme Adımı:

Ön işleme adımının kodu aşağıdadır:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

Yukarıdaki kodda verileri ön işleme tabi tuttuk. Şu şekilde verilen veri kümesini yüklediğimiz yer:

Karar Ağacı Sınıflandırma Algoritması

2. Karar Ağacı algoritmasını Eğitim setine uydurma

Şimdi modeli eğitim setine sığdıracağız. Bunun için ithal edeceğiz Karar Ağacı Sınıflandırıcısı gelen sınıf sklearn.tree kütüphane. Aşağıda bunun kodu verilmiştir:

ikili arama algoritması
 #Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion=&apos;entropy&apos;, random_state=0) classifier.fit(x_train, y_train) 

Yukarıdaki kodda iki ana parametreyi geçtiğimiz bir sınıflandırıcı nesnesi oluşturduk;

    'ölçüt='entropi':Kriter, entropi tarafından verilen bilgi kazancıyla hesaplanan bölünmenin kalitesini ölçmek için kullanılır.rastgele_durum=0':Rastgele durumları oluşturmak için.

Bunun çıktısı aşağıdadır:

 Out[8]: DecisionTreeClassifier(class_weight=None, criterion=&apos;entropy&apos;, max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter=&apos;best&apos;) 

3. Test sonucunun tahmin edilmesi

Şimdi test seti sonucunu tahmin edeceğiz. Yeni bir tahmin vektörü oluşturacağız y_pred. Aşağıda bunun kodu verilmiştir:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

Çıktı:

Aşağıdaki çıktı görüntüsünde tahmin edilen çıktı ve gerçek test çıktısı verilmiştir. Tahmin vektöründe gerçek vektör değerlerinden farklı bazı değerlerin olduğunu açıkça görebiliriz. Bunlar tahmin hatalarıdır.

Karar Ağacı Sınıflandırma Algoritması

4. Sonucun doğruluğunu test edin (Karışıklık Matrisinin Oluşturulması)

Yukarıdaki çıktıda bazı yanlış tahminlerin olduğunu gördük, dolayısıyla doğru ve yanlış tahminlerin sayısını bilmek istiyorsak karışıklık matrisini kullanmamız gerekiyor. Aşağıda bunun kodu verilmiştir:

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Çıktı:

java'da bir listeyi yinelemek
Karar Ağacı Sınıflandırma Algoritması

Yukarıdaki çıktı görüntüsünde karışıklık matrisini görebiliriz. 6+3= 9 hatalı tahmin Ve 62+29=91 doğru tahmin. Dolayısıyla Karar Ağacı sınıflandırıcısının diğer sınıflandırma modellerine göre iyi bir tahmin yaptığını söyleyebiliriz.

5. Eğitim seti sonucunun görselleştirilmesi:

Burada eğitim seti sonucunu görselleştireceğiz. Eğitim seti sonucunu görselleştirmek için karar ağacı sınıflandırıcısına yönelik bir grafik çizeceğiz. Sınıflandırıcı, Lojistik Regresyonda yaptığımız gibi SUV arabasını Satın almış veya Satın Almamış kullanıcılar için evet veya Hayır tahmininde bulunacaktır. Aşağıda bunun kodu verilmiştir:

 #Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Çıktı:

ikili ağaç posta siparişi geçişi
Karar Ağacı Sınıflandırma Algoritması

Yukarıdaki çıktı geri kalan sınıflandırma modellerinden tamamen farklıdır. Veri setini yaş ve tahmini maaş değişkenine göre bölen hem dikey hem de yatay çizgilere sahiptir.

Gördüğümüz gibi ağaç, aşırı uyum durumu olan her veri kümesini yakalamaya çalışıyor.

6. Test seti sonucunun görselleştirilmesi:

Test seti sonucunun görselleştirilmesi, eğitim setinin test seti ile değiştirilmesi dışında eğitim setinin görselleştirilmesine benzer olacaktır.

 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm(Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Çıktı:

Karar Ağacı Sınıflandırma Algoritması

Yukarıdaki resimde görebileceğimiz gibi, mor bölge içinde bazı yeşil veri noktaları vardır ve bunun tersi de geçerlidir. Yani bunlar, kafa karışıklığı matrisinde tartıştığımız yanlış tahminlerdir.