Python MySQL Başlangıç
- Önceki Sayfa Eğitim/ Test
- Sonraki Sayfa MySQL Başlangıç

Karar Ağacı (Decision Tree)
Bu bölümde, 'karar ağacı' nasıl yapılacağını göstereceğiz. Karar ağacı, geçmiş deneyimlerinize dayanarak kararlar almanıza yardımcı olan bir akış çizgisidir.
Bu örnekte, bir kişinin komedi programına katılıp katılmamayı karar vermesi denenecek.
Şanslı ki, örneğimizdeki karakter her zaman kasabada komedi programı düzenlendiğinde kayıt yaptırır ve bazı komedi sanatçıları hakkında bilgiler kaydeder, ayrıca gitip gitmediğini de kaydeder.
Yaş | Deneyim | Rank | Nationality | Go |
---|---|---|---|---|
36 | 10 | 9 | UK | NO |
42 | 12 | 4 | USA | NO |
23 | 4 | 6 | N | NO |
52 | 4 | 4 | USA | NO |
43 | 21 | 8 | USA | YES |
44 | 14 | 5 | UK | NO |
66 | 3 | 7 | N | YES |
35 | 14 | 9 | UK | YES |
52 | 13 | 7 | N | YES |
35 | 5 | 9 | N | YES |
24 | 3 | 5 | USA | NO |
18 | 3 | 7 | UK | YES |
45 | 9 | 9 | UK | YES |
Şimdi, bu veri kümesine dayanarak Python, yeni bir performansın katılabilir olup olmadığını belirlemek için karar ağacı oluşturabilir.
Çalışma prensibi
Öncelikle, gerekli modülleri içe aktar ve pandas ile veri kümesini oku:
Örnek
Veri kümesini oku ve yazdır:
import pandas from sklearn import tree import pydotplus from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import matplotlib.image as pltimg df = pandas.read_csv("shows.csv") print(df)
Karar ağacı yapmak için tüm veriler sayısal olmalıdır.
Bizim 'Nationality' ve 'Go' adlı sayısal olmayan sütunları sayısal haline dönüştürmemiz gerekiyor.
Pandas, bu tür dönüşümleri yapmayı sağlayan bir map()
Bu yöntem, değerleri nasıl dönüştüreceğine dair bilgileri içeren bir sözlük kabul eder.
{'UK': 0, 'USA': 1, 'N': 2}
Değer 'UK'yu 0'a, 'USA'yi 1'e, 'N'yi 2'ye dönüştür.
Örnek
Dizgi değerlerini sayısal değerlere dönüştürün:
d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) print(df)
Sonra, özellik sütunlarını hedef sütundan ayırmamız gerekecek.
Özellik sütunları, değerleri tahmin etmeye çalıştığımız sütunlardır, hedef sütun ise tahmin etmeye çalıştığımız değerleri içeren sütundur.
Örnek
X özellik sütunudur, y hedef sütunudur:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Şimdi, detaylarımıza uygun gerçek bir karar ağacı oluşturabilir ve ardından bilgisayarda bir .png dosyası olarak kaydedebiliriz:
Örnek
Bir karar ağacı oluşturun, bunu bir görsellelele kaydedin ve ardından bu görseli gösterin:
dtree = DecisionTreeClassifier() dtree = dtree.fit(X, y) data = tree.export_graphviz(dtree, out_file=None, feature_names=features) graph = pydotplus.graph_from_dot_data(data) graph.write_png('mydecisiontree.png') img=pltimg.imread('mydecisiontree.png') imgplot = plt.imshow(img) plt.show()
Sonuç açıklaması
Karar ağacı, size komedi sanatçısını izlemek isteyip istemediğinizi hesaplamak için önceki kararlarınızı kullanır.
Karar ağacının farklı yönlerini okuyalım:

Rank
Rank <= 6.5
6.5 altında derecelenen komedi sanatçılarının izleyeceği şekilde True
Ok (sola doğru), geri kalanı ise devam eder False
Ok (sağa doğru).
gini = 0.497
Sapma kalitesini belirtir ve her zaman 0.0 ila 0.5 arasındaki bir sayıdır, 0.0 tüm örneklerin aynı sonucu aldığını, 0.5 ise tamamen ortada yapılan bir sapmayı belirtir.
samples = 13
Bu karar noktasında 13 komedi sanatçısının hala kaldığını belirtir, çünkü bu ilk adımdır, bu yüzden hepsi komedi sanatçısıdır.
value = [6, 7]
Bu 13 komedi sanatçısından 6'sının 'NO' alacağını, 7'sinin ise 'GO' alacağını belirtir.
Gini
Sapma örneklerin yöntemleri çoktur, bu dersimizde GINI yöntemini kullanıyoruz.
Gini yöntemi aşağıdaki formülle kullanılır:
Gini = 1 - (x/n)2 - (y/n)2
Burada, x, 'GO' (evet) yanıtı sayısıdır, n, örnek sayısıdır, y, 'NO' (hayır) yanıtı sayısıdır ve aşağıdaki formülle hesaplanır:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Bir sonraki adım iki kutu içerir, biri 6.5 veya daha düşük 'Rank' sahip komedi sanatçıları için, diğeri ise geri kalanı için bir kutu.
True - 5 adet komedi sanatçısı burada sona erir:
gini = 0.0
Tüm örneklerin aynı sonucu aldığını belirtir.
samples = 5
Bu kolonda hala 5 tane komedi sanatçısı kaldığını belirtir (5'inin derecesi 6.5 veya daha düşük komedi sanatçıları).
value = [5, 0]
5 "NO" alacak, 0 "GO" alacak.
False - 8 adet tiyatro oyuncusu devam etti:
Nationality (ülke)
Nationality <= 0.5
Ulusal değer 0.5'den küçük olan komedyenler sol oku izleyecek (Bu, İngiltere'den gelen herkesi ifade eder), geri kalanları sağ oku izleyecek.
gini = 0.219
Yaklaşık 22%% örneklerin bir yöne hareket edeceği anlamına gelir.
samples = 8
Bu dalda hala 8 adet komedyen kaldı (8 adet 6.5'den daha yüksek dereceli komedyen).
value = [1, 7]
Bu 8 komedyen arasında, 1 tanesi "NO" alacak, 7 tanesi "GO" alacak.

True - 4 adet tiyatro oyuncusu devam etti:
Age (yaş)
Age <= 35.5
35.5 yaş veya daha genç yaşta olan komedyenler sol oku izleyecek, geri kalanları sağ oku izleyecek.
gini = 0.375
Yaklaşık 37.5%% örneklerin bir yöne hareket edeceği anlamına gelir.
samples = 4
Bu dalda hala 4 adet komedyen kaldı (İngiltere'den gelen 4 komedyen).
value = [1, 3]
Bu 4 komedyen arasında, 1 tanesi "NO" alacak, 3 tanesi "GO" alacak.
False - 4 adet komedyen buraya kadar sona erdi:
gini = 0.0
Tüm örneklerin aynı sonucu verdiğini gösterir.
samples = 4
Bu dalda hala 4 adet komedyen kaldı (İngiltere'den gelen 4 komedyen).
value = [0, 4]
Bu 4 komedyen arasında, 0 tanesi "NO" alacak, 4 tanesi "GO" alacak.

True - 2 adet komedyen burada sona erdi:
gini = 0.0
Tüm örneklerin aynı sonucu verdiğini gösterir.
samples = 2
Bu dalda hala 2 adet komedyen kaldı (2 adet 35.5 yaş veya daha genç komedyen).
value = [0, 2]
Bu 2 komedyen arasında, 0 tanesi "NO" alacak, 2 tanesi "GO" alacak.
False - 2 adet tiyatro oyuncusu devam etti:
Experience (deneyim)
Experience <= 9.5
9.5 yıl veya daha fazla deneyime sahip komedyenler sol oku izleyecek, geri kalanları sağ oku izleyecek.
gini = 0.5
50%% örneklerin bir yöne hareket edeceği anlamına gelir.
samples = 2
Bu dalda hala 2 adet komedyen kaldı (2 adet 35.5 yaşın üzerinde komedyen).
value = [1, 1]
Bu iki komedyen arasında, 1 tanesi "NO" alacak, 1 tanesi "GO" alacak.

True - 1 adet komedyen burada sona erdi:
gini = 0.0
Tüm örneklerin aynı sonucu verdiğini gösterir.
samples = 1
Bu dalda hala 1 komedi sanatçısı kaldığını (9.5 yıldan az deneyimli 1 komedi sanatçısı) gösterir.
value = [0, 1]
0, "Hayır" anlamına gelir, 1, "Evet" anlamına gelir.
False - Buraya kadar 1 komedi sanatçısı var:
gini = 0.0
Tüm örneklerin aynı sonucu verdiğini gösterir.
samples = 1
Bu dalda hala 1 komedi sanatçısı kaldığını (9.5 yıldan fazla deneyimli 1 komedi sanatçısı) gösterir.
value = [1, 0]
1, "Hayır" anlamına gelir, 0, "Evet" anlamına gelir.
Tahmin Değerleri
Yeni değerleri tahmin etmek için karar ağacını kullanabiliriz.
Örneğin: 40 yaşında, 10 yıl deneyimi olan ve 7 komedi derecesine sahip bir Amerikan komedi sanatçısının yönettiği bir programı izlememeli miyim?
Örnek
Kullanım predict()
Yeni değerleri tahmin etme yöntemleri:
print(dtree.predict([[40, 10, 7, 1]]))
Örnek
Komedi derecesi 6 ise, cevabın ne olacağı nedir?
print(dtree.predict([[40, 10, 6, 1]]))
Farklı Sonuçlar
Yeterince fazla çalıştırılırsa, aynı verileri girdiyseniz de, karar ağacı size farklı sonuçlar sağlayacaktır.
Bu, karar ağacının bize 100% kesin bir cevap verememesi nedeniyle budur. Cevaplar, olasılıklara dayanmaktadır ve farklı olacaktır.
- Önceki Sayfa Eğitim/ Test
- Sonraki Sayfa MySQL Başlangıç