Python 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)

Örnek Çalıştırma

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)

Örnek Çalıştırma

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)

Örnek Çalıştırma

Ş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()

Örnek Çalıştırma

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 Çalıştırma

Örnek

Komedi derecesi 6 ise, cevabın ne olacağı nedir?

print(dtree.predict([[40, 10, 6, 1]]))

Örnek Çalıştırma

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.