Makine Öğrenmesi (10/10)

tarafından Emin Fidan
0 yorum 474 görüntüleyenler

Karar Ağacı

Bu bölümde size nasıl bir “Karar Ağacı” yapılacağını göstereceğiz. Bir Karar Ağacı bir Akış Şemasıdır ve önceki deneyime dayanarak karar vermenize yardımcı olabilir.

Örnekte, bir kişi bir komedi şovuna gidip gitmeyeceğine karar vermeye çalışacaktır.

Neyse ki örnekteki kişimiz şehirde her komedi şovu yapıldığında kaydetti ve komedyen hakkında bazı bilgileri de kaydetti aynı zamanda gidip gitmediği de kayıtlı.

Şimdi, bu veri  kümesine dayanarak, Python yeni komedi şovlarının katılmaya değer olup olmadığına karar vermek için kullanılabilecek bir karar ağacı oluşturabilir.

Nasıl Çalışır ?

İlk olarak, ihtiyacımız olan modülleri import edelim ve veri kümesini pandas ile okuyalım:

Örnek :

Veri kümesini okuyalım ve yazdıralım:

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)

 

Çıktı :

Yukarıdaki tablonun aynısı çıkacak.Bir karar ağacı oluşturmak için tüm verilerin sayısal olması gerekir. Sayısal olmayan ‘Nationality’ ve ‘Go’ sütunlarını sayısal değerlere dönüştürmeliyiz.

Pandas, değerlerin nasıl dönüştürüleceğine ilişkin bilgileri içeren bir sözlük oluşturan bir map () yöntemine sahiptir.

{‘UK’: 0, ‘USA’: 1, ‘N’: 2}

"UK" değerlerini 0, "ABD" değerlerini 1 ve "N" değerlerini 2'ye dönüştürmek anlamına gelir.

Örnek :

String değerlerini sayısal değerlerle değiştirelim:

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)

Ardından özellik sütunlarını hedef sütundan ayırmamız gerekir. Özellik sütunları, tahmin etmeye çalıştığımız sütunlardır ve hedef sütun, tahmin etmeye çalıştığımız değerlerin bulunduğu sütundur.

Örnek :

x, özellik sütunları, y, hedef sütundur:

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

Şimdi asıl karar ağacını oluşturabilir, detaylarımıza sığdırabilir ve bir .png dosyasını bilgisayara kaydedebiliriz:

Örnek :

Bir Karar Ağacı oluşturalım, bir görüntü olarak kaydedelim ve görüntüyü gösterelim:

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

 

Karar ağacı, bir komedyeni görmek isteyip istemediğinizi hesaplamak için önceki kararlarınızı kullanır. Karar ağacının farklı yönlerini okuyalım:

Sıra:

Sıra <= 6.5, sıralaması 6.5 veya daha düşük olan her komedyenin Gerçek oku (solda), geri kalanı ise Yanlış oku (sağda) izleyeceği anlamına gelir.

gini = 0.497, ayrışmanın kalitesini belirtir ve her zaman 0.0 ile 0.5 arasında bir sayıdır; burada 0.0, tüm numunelerin aynı sonucu aldığını ve 0.5, ayrılmanın tam olarak ortada yapıldığı anlamına gelir.

samples = 13 kararda bu noktada 13 komedyen kaldığı anlamına gelir, bu da ilk adım olduğu için hepsi budur.
value = [6, 7] bu 13 komedyenden 6'sının "NO" ve 7'sinin "GO" alacağı anlamına gelir.

Gini: 

Örnekleri bölmenin birçok yolu vardır, bu öğreticide GINI yöntemini kullanıyoruz.

Gini yöntemi bu formülü kullanır:

Gini = 1 - (x/n)2 (y/n)2

X, pozitif cevapların sayısı (“GO”), n örneklerin sayısı ve y, negatif hesaplamanın sayısıdır (“NO”), bu da bize bu hesaplamayı verir:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

Bir sonraki adım iki kutu içerir, bir kutu 6.5 veya daha düşük ‘Rank’ olan komedyenler için ve diğer kutu geriye kalanlar içindir.

Doğru – 5 Komedyen Burada Sona Erer:

gini = 0.0
Tüm numunelerin aynı sonucu aldığı anlamına gelir. 
samples = 5
Bu dalda 5 komedyen kaldığı anlamına gelir (6.5 veya daha düşük bir sıraya sahip 5 komedyen). 
value = [5, 0]
5 değerinin "HAYIR" ve 0 değerinin "DEVAM" alacağı anlamına gelir.

Yanlış – 8 Komedyen Devam Ediyor :

Nationality

Nationality<= 0,5

Nationality değeri 0,5’ten düşük olan komedyenlerin soldaki oku takip edeceği anlamına gelir (yani İngiltere’den herkes anlamına gelir) ve geri kalanı sağdaki oku takip edecektir.

gini = 0.219

Numunelerin yaklaşık% 22’sinin bir yöne gideceği anlamına gelir.

samples = 8

Bu dalda 8 komedyen kaldığı anlamına gelir (6.5’in üzerinde bir sıraya sahip 8 komedyen).

value = [1, 7]

Bu 8 komedyenden 1’inin “NO” ve 7’sinin “GO” alacağı anlamına gelir.

Doğru – 4 Komedyen Devam Ediyor:

Age

Age <= 35.5

35.5 veya daha küçük yaştaki komedyenlerin soldaki oku takip edeceği ve gerikalanının sağdaki oku takip edeceği anlamına gelir.

gini = 0.375

Numunelerin yaklaşık% 37.5’inin bir yöne gideceği anlamına gelir.

samples = 4

Bu dalda 4 komedyen kaldığı anlamına gelir (İngiltere’den 4 komedyen). value = [1, 3] bu 4 komedyenden 1’inin “NO”, 3’ünün de “GO” alacağı anlamına gelir.

Yanlış – 4 Komedyen Burada Sona Erer:

gini = 0.0 Tüm numunelerin aynı sonucu aldığı anlamına gelir.

samples = 4 Bu dalda 4 komedyen kaldığı anlamına gelir (İngiltere’den değil 4 komedyen).

value = [0, 4] Bu 4 komedyenden 0’ın “NO” ve 4’ünün “GO” alacağı anlamına gelir.

Doğru – 2 Komedyen Burada Sona Erer:

gini = 0.0Tüm numunelerin aynı sonucu aldığı anlamına gelir.

sample = 2 Bu dalda 2 komedyen kaldığı anlamına gelir (35.5 veya daha genç yaşta 2 komedyen).

value = [0, 2]Bu 2 komedyenden 0’ın “NO” ve 2’nin “GO” alacağı anlamına gelir.

Yanlış – 2 Komedyen Devam Ediyor:

Experience

Experience<= 9.5
9,5 yıllık veya daha fazla deneyime sahip komedyenlerin soldaki oku takip edeceği ve geri kalanının sağdaki oku takip edeceği anlamına gelir. 
gini = 0.5
Numunelerin% 50'sinin bir yöne gideceği anlamına gelir. samples = 2, budalda 2 komedyen kaldığı anlamına gelir (35.5'ten eski 2 komedyen). 
value = [1, 1]
Bu 2 komedyenden 1'in "HAYIR" ve 1'inin "GO" alacağı anlamına gelir.

Doğru - 1 Komedyen Burada Sona Erer:

gini = 0.0Tüm numunelerin aynı sonucu aldığı anlamına gelir.
samples = 1Bu dalda 1 komedyen kaldığı anlamına gelir (9,5 yıllık tecrübeye sahip 1 komedyen).
value = [0, 1] 0'ın "NO" alacağı ve 1'in "GO" alacağı anlamına gelir.
Yanlış - 1 Komedyen Burada Sona Erer:

gini = 0.0Tüm numunelerin aynı sonucu aldığı anlamına gelir.
samples = 1Bu dalda 1 komedyen kaldığı anlamına gelir (9.5 yıldan fazla deneyime sahip 1 komedyen).
value = [1, 0]1'in "HAYIR" alacağı ve 0'ın "GO" alacağı anlamına gelir.
Değerleri Tahmin Etme
Yeni değerleri tahmin etmek için KararAğacı'nı kullanabiliriz. 
Örnek: Gidip 40 yaşında bir Amerikalı komedyen, 10 yıllık tecrübesi ve 7 komedi sıralamasının yer aldığı bir gösteri görmeli miyim?
Örnek :
Yeni değerleri tahmin etmek için predict () yöntemini kullanalım:
print(dtree.predict([[40, 10, 7, 1]]))
Çıktı :
[1]
[1] means 'GO'
[0] means 'NO'
Örnek :
Komedi sıralaması 6 olsaydı cevap ne olurdu?
print(dtree.predict([[40, 10, 6, 1]]))
Çıktı:
[0]
[1] means 'GO'
[0] means 'NO'
Farklı Sonuçlar
Karar Verisi Ağacı'nı, aynı verilerle besleseniz bile, yeterince kez çalıştırırsanız size farklı sonuçlar verdiğini göreceksiniz.
Çünkü Karar Ağacı bize% 100 kesin bir cevap vermez. Bir sonucun olasılığına dayanır ve cevap değişecektir.

-Burak Can Görgülü

Beğeneceğinizi düşündüğümüz yazılar