- 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.
- 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ğ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
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:
Ö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:
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:
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
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- ∑<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:
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:
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('user_data.csv') #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:
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='entropy', 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;
Bunun çıktısı aşağıdadır:
Out[8]: DecisionTreeClassifier(class_weight=None, criterion='entropy', 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='best')
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.
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
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(('purple','green' ))) 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(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Çıktı:
ikili ağaç posta siparişi geçişi
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(('purple','green' ))) 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(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Çıktı:
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.