Karar Ağaçları (Decision Trees) Algoritması-Makine Öğrenmesi-

M. Fatih Türkoğlu
3 min readJul 7, 2021

--

Bu yazımda Karar Ağaçları algoritmasından bahsedeceğim. Classification algoritmalarından biri olan Karar Ağaçları karmaşık veri setlerinde kullanılabilen ağaç tabanlı algoritmalardan biridir. Bu algoritmanın öncelikle mantığını nasıl çalıştığını ve daha sonra bir örnek kod üzerinde görelim.

Photo by Jens Lelie on Unsplash

Karar Ağacı algoritmasının ana mantığı elimizde bulunan veri kümesini kullanarak bir karar ağacı oluşturmaktır. Örneğin veri kümemiz çeşit çeşit farklı insanların nelere göre bilgisayar alıp almadıklarını gösteren bir küme olsun.

Figure 1

Bu kümemiz üstteki görseldeki gibi olsun. Görüldüğü üzere veri kümesinde insanların yaşlarına, gelir düzeylerine ve kredi puanlamalarına göre bilgisayar alıp almadıkları gözükmekte. Bu veriler ile örnek bir ağaç oluşturalım.

Figure 2

Görüldüğü üzere ağacımız öncelikle yaşı sorgular ve daha sonra verilerimize göre kimlerin bilgisayar alabileceğine yada alamayacağına karar verir. Bu ağacı oluşturduğumuzda elimizdeki veri kümesi ile öğretmiş oluruz ve tahmin etmesini istediğimiz yeni veriler için bu ağacı kullanırız. Bu örnekte yaşın en başta sorgulandığını gördük bunun ana sebebi yaşın sorgulanması en ayırt edici olmasındandır. Ayırt edici olanların ağacın en tepesine konulmasının nedeni ağacı daha optimum düzeyde tutmasındandır (kısa tutmakta denebilir). Ağacımız ne kadar dengeli ve gereksiz dallanmaz ise o kadar iyi bir ağaç elde ederiz.

En ayırt edici olanları bulabilmenin birkaç yolu (algoritması) vardır. Karar ağaçlarında en sık kullanılan algoritmalar; kategorik değişkenler için Entropi, Gini, Sınıflandırma Hatası; sürekli değişkenler için ise En Küçük Karalere yöntemi şeklindedir.

Kısaca entropi kavramından bahsedecek olursak, entropi veri kümemizin belirsiziliğini gösterir. Buradaki belirsizlik o veri etiketinin ne kadar dallanıp dallanmadığını gösterir. Yani üstteki görselde (2) 31 le 40 yaşları arasındaki insanların hepsinin başka bir sorgulamaya bakılmaksızın bilgisayar alacağı durum belrisizliğin az olduğu yani düşük bir entropiye sahip olduğu görülür. Burada da ana amacımız belrisizliği en aşşağıya indirmek ve optimum bir ağaç elde etmektir. Entropinin formülü:

Figure 3

Şimdi ise bu konuştuğumuz algoritmanın Python üzerinde kodlamasını görelim.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
from sklearn.metrics import confusion_matrix
from matplotlib.colors import ListedColormap

data = pd.read_csv('knn.csv')
print(data.head())

feature_cols = ['Age','EstimatedSalary' ]
X = data.iloc[:,[2,3]].values
y = data.iloc[:,4].values

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.25, random_state= 0)

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

classifier = DecisionTreeClassifier()
classifier = classifier.fit(X_train,y_train)

y_pred = classifier.predict(X_test)#Accuracy

print('Accuracy Score:', metrics.accuracy_score(y_test,y_pred))

cm = confusion_matrix(y_test, y_pred)
print(cm)

X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:,0].min()-1, stop= X_set[:,0].max()+1, step = 0.01),np.arange(start = X_set[:,1].min()-1, stop= X_set[:,1].max()+1, step = 0.01))
plt.contourf(X1,X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha=0.75, cmap = ListedColormap(("black","blue")))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i,j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1], c = ListedColormap(("black","blue"))(i),label = j)
plt.title("Decision Tree(Test set)")
plt.xlabel("Age")
plt.ylabel("Estimated Salary")
plt.legend()
plt.show()
Kod Çıktı Terminali
Kod Çıktı Grafiği

--

--