Pembelajaran Mesin - Pohon Keputusan
Pohon Keputusan
Dalam bab ini kami akan menunjukkan cara membuat "Pohon Keputusan". Pohon Keputusan adalah Bagan Alir, dan dapat membantu Anda membuat keputusan berdasarkan pengalaman sebelumnya.
Dalam contoh, seseorang akan mencoba memutuskan apakah dia harus pergi ke acara komedi atau tidak.
Untung saja orang yang kita contohkan sudah mendaftar setiap kali ada acara komedi di kota, dan mencatat beberapa informasi tentang komedian itu, dan juga mendaftar apakah dia pergi atau tidak.
Usia | Pengalaman | Pangkat | Kebangsaan | Pergi |
36 | 10 | 9 | Inggris | TIDAK |
42 | 12 | 4 | Amerika Serikat | TIDAK |
23 | 4 | 6 | n | TIDAK |
52 | 4 | 4 | Amerika Serikat | TIDAK |
43 | 21 | 8 | Amerika Serikat | YA |
44 | 14 | 5 | Inggris | TIDAK |
66 | 3 | 7 | n | YA |
35 | 14 | 9 | Inggris | YA |
52 | 13 | 7 | n | YA |
35 | 5 | 9 | n | YA |
24 | 3 | 5 | Amerika Serikat | TIDAK |
18 | 3 | 7 | Inggris | YA |
45 | 9 | 9 | Inggris | YA |
Sekarang, berdasarkan kumpulan data ini, Python dapat membuat pohon keputusan yang dapat digunakan untuk memutuskan apakah ada acara baru yang layak untuk dihadiri.
Bagaimana cara kerjanya?
Pertama, impor modul yang Anda butuhkan, dan baca dataset dengan panda:
Contoh
Baca dan cetak kumpulan data:
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)
Untuk membuat pohon keputusan, semua data harus numerik.
Kita harus mengubah kolom non numerik 'Kebangsaan' dan 'Pergi' menjadi nilai numerik.
Pandas memiliki map()
metode yang mengambil kamus dengan informasi tentang cara mengonversi nilai.
{'UK': 0, 'USA': 1, 'N': 2}
Berarti mengkonversi nilai 'UK' ke 0, 'USA' ke 1, dan 'N' ke 2.
Contoh
Ubah nilai string menjadi nilai numerik:
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)
Kemudian kita harus memisahkan kolom fitur dari kolom target .
Kolom fitur adalah kolom yang kita coba prediksi , dan kolom target adalah kolom dengan nilai yang kita coba prediksi.
Contoh
X
adalah kolom fitur,
y
adalah kolom target:
features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)
Sekarang kita dapat membuat pohon keputusan yang sebenarnya, menyesuaikannya dengan detail kita, dan menyimpan file .png di komputer:
Contoh
Buat Pohon Keputusan, simpan sebagai gambar, dan tampilkan gambar:
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()
Hasil Dijelaskan
Pohon keputusan menggunakan keputusan Anda sebelumnya untuk menghitung peluang Anda ingin pergi menemui pelawak atau tidak.
Mari kita baca aspek berbeda dari pohon keputusan:
Pangkat
Rank <= 6.5
artinya setiap komedian berpangkat 6,5 atau lebih rendah akan mengikuti
True
panah (ke kiri), dan sisanya akan mengikuti False
panah (ke kanan).
gini = 0.497
mengacu pada kualitas pemisahan, dan selalu merupakan angka antara 0,0 dan 0,5, di mana 0,0 berarti semua sampel mendapat hasil yang sama, dan 0,5 berarti pemisahan dilakukan tepat di tengah.
samples = 13
berarti ada 13 komedian yang tersisa pada saat ini dalam keputusan, yang semuanya karena ini adalah langkah pertama.
value = [6, 7]
artinya dari 13 komedian ini, 6 akan mendapatkan "TIDAK", dan 7 akan mendapatkan "GO".
Gini
Ada banyak cara untuk membagi sampel, kami menggunakan metode GINI dalam tutorial ini.
Metode Gini menggunakan rumus ini:
Gini = 1 - (x/n)2 - (y/n)2
Di mana x
jumlah jawaban positif ("GO"),
n
adalah jumlah sampel, dan
y
jumlah jawaban negatif ("TIDAK"), yang memberi kita perhitungan ini:
1 - (7 / 13)2 - (6 / 13)2 = 0.497
Langkah selanjutnya berisi dua kotak, satu kotak untuk komedian dengan 'Peringkat' 6,5 atau lebih rendah, dan satu kotak dengan sisanya.
Benar - 5 Komedian Berakhir Disini:
gini = 0.0
berarti semua sampel mendapat hasil yang sama.
samples = 5
berarti ada 5 komedian yang tersisa di cabang ini (5 komedian dengan Peringkat 6,5 atau lebih rendah).
value = [5, 0]
berarti 5 akan mendapatkan "TIDAK" dan 0 akan mendapatkan "GO".
Salah - 8 Komedian Lanjutkan:
Kebangsaan
Nationality <= 0.5
berarti komedian dengan nilai kebangsaan kurang dari 0,5 akan mengikuti panah ke kiri (yang berarti semua orang dari Inggris, ), dan sisanya akan mengikuti panah ke kanan.
gini = 0.219
berarti bahwa sekitar 22% sampel akan menuju satu arah.
samples = 8
berarti ada 8 komedian yang tersisa di cabang ini (8 komedian dengan Peringkat lebih tinggi dari 6,5).
value = [1, 7]
artinya dari 8 komedian ini, 1 akan mendapatkan "TIDAK" dan 7 akan mendapatkan "GO".
Benar - 4 Komedian Lanjutkan:
Usia
Age <= 35.5
artinya komedian pada usia 35,5 atau lebih muda akan mengikuti panah ke kiri, dan sisanya akan mengikuti panah ke kanan.
gini = 0.375
berarti sekitar 37,5% sampel akan menuju satu arah.
samples = 4
berarti ada 4 komedian yang tersisa di cabang ini (4 komedian dari Inggris).
value = [1, 3]
artinya dari 4 komedian ini, 1 akan mendapatkan "TIDAK" dan 3 akan mendapatkan "GO".
Salah - 4 Komedian Berakhir Disini:
gini = 0.0
berarti semua sampel mendapat hasil yang sama.
samples = 4
berarti ada 4 komedian yang tersisa di cabang ini (4 komedian bukan dari Inggris).
value = [0, 4]
artinya dari 4 komedian ini, 0 mendapat "TIDAK" dan 4 mendapat "GO".
Benar - 2 Komedian Berakhir Di Sini:
gini = 0.0
berarti semua sampel mendapat hasil yang sama.
samples = 2
berarti ada 2 komedian yang tersisa di cabang ini (2 komedian berusia 35,5 tahun atau lebih muda).
value = [0, 2]
artinya dari 2 komedian ini, 0 mendapat "TIDAK" dan 2 mendapat "GO".
Salah - 2 Komedian Lanjutkan:
Pengalaman
Experience <= 9.5
artinya komedian dengan pengalaman 9,5 tahun, atau kurang, akan mengikuti panah ke kiri, dan sisanya akan mengikuti panah ke kanan.
gini = 0.5
berarti 50% sampel akan menuju satu arah.
samples = 2
berarti ada 2 komedian yang tersisa di cabang ini (2 komedian yang lebih tua dari 35,5).
value = [1, 1]
artinya dari 2 komedian ini, 1 akan mendapatkan "TIDAK" dan 1 akan mendapatkan "GO".
Benar - 1 Komedian Berakhir Disini:
gini = 0.0
berarti semua sampel mendapat hasil yang sama.
samples = 1
berarti ada 1 komedian yang tersisa di cabang ini (1 komedian dengan pengalaman 9,5 tahun atau kurang).
value = [0, 1]
berarti 0 akan mendapatkan "TIDAK" dan 1 akan mendapatkan "GO".
Salah - 1 Komedian Berakhir Disini:
gini = 0.0
berarti semua sampel mendapat hasil yang sama.
samples = 1
berarti ada 1 komedian yang tersisa di cabang ini (1 komedian dengan pengalaman lebih dari 9,5 tahun).
value = [1, 0]
berarti 1 akan mendapatkan "TIDAK" dan 0 akan mendapatkan "GO".
Prediksi Nilai
Kita dapat menggunakan Pohon Keputusan untuk memprediksi nilai baru.
Contoh: Haruskah saya menonton pertunjukan yang dibintangi komedian Amerika berusia 40 tahun, dengan pengalaman 10 tahun, dan peringkat komedi 7?
Contoh
Gunakan metode predict() untuk memprediksi nilai baru:
print(dtree.predict([[40, 10, 7, 1]]))
Contoh
Apa jawabannya jika peringkat komedi adalah 6?
print(dtree.predict([[40, 10, 6, 1]]))
Hasil Berbeda
Anda akan melihat bahwa Pohon Keputusan memberi Anda hasil yang berbeda jika Anda menjalankannya cukup lama, bahkan jika Anda memasukkannya dengan data yang sama.
Itu karena Pohon Keputusan tidak memberi kita jawaban pasti 100%. Ini didasarkan pada kemungkinan hasil, dan jawabannya akan bervariasi.