Pemula Belajar Pohon Keputusan


Pohon Keputusan (Decision Tree)

Dalam bab ini, kita akan menunjukkan bagaimana untuk membuat 'pohon keputusan'. Pohon keputusan adalah diagram alur yang dapat membantu Anda membuat keputusan berdasarkan pengalaman sebelumnya.

Dalam contoh ini, seseorang akan mencoba menentukan apakah dia harus ikut serta dalam program komedi.

Dahulu, watak dalam contoh kami terdaftar setiap kali program komedi diadakan di kota, dan terdaftar beberapa informasi tentang penari komedi, serta mendaftar apakah dia pernah pergi atau tidak.

Umur Pengalaman 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

Sekarang, berdasarkan data set ini, Python boleh membuat pohon keputusan, pohon keputusan ini boleh digunakan untuk menentukan sama ada berapa berapa penting untuk menghadiri pertunjukan baru.

Kerjaan Kerap

Pertama, import modul yang diperlukan dan gunakan pandas untuk membaca data set:

Contoh

Baca dan cetak data set:

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)

Jalankan Contoh

Untuk membuat pohon keputusan, semua data mesti dalam bentuk angka.

Kami mesti mengubah kolom bukan angka 'Nationality' dan 'Go' kepada angka.

Pandas mempunyai map() Metode, metode ini menerima katilog yang mengandungi maklumat tentang bagaimana untuk menukar nilai.

{'UK': 0, 'USA': 1, 'N': 2}

Maksudnya adalah mengubah nilai 'UK' kepada 0, 'USA' kepada 1, dan 'N' kepada 2.

Contoh

Ubah nilai teks kepada angka:

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)

Jalankan Contoh

Kemudian, kami mesti memisahkan kolom fitur dengan kolom sasaran.

Kolom fitur adalah kolom yang kami cuba untuk prédiksi, dan kolom sasaran adalah kolom yang mempunyai nilai yang kami cuba untuk prédiksi.

Contoh

X adalah kolom fitur, y adalah kolom sasaran:

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

Jalankan Contoh

Sekarang, kami boleh membuat pohon keputusan sebenar, yang sesuai dengan perincian kami, dan kemudian simpan fail .png di komputer:

Contoh

Buat pohon keputusan, simpannya sebagai imej, dan tunjukkan imej itu:

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

Jalankan Contoh

Pengertian hasil

Pohon keputusan menggunakan keputusan sebelumnya untuk mengira kesempatan anda untuk melihat pelakon komedi.

Kami baca berbagai aspek pohon keputusan:


Rank

Rank <= 6.5 Maksudkan pelakon komedi dengan 'Rank' di bawah 6.5 akan diikuti True Tanduk (melangkau ke kiri), dan sisanya diikuti False Tanduk (melangkau ke kanan).

gini = 0.497 Maksudkan kualiti pemotongan, dan selalu angka di antara 0.0 hingga 0.5, di mana 0.0 maksudkan semua sample mendapat keputusan yang sama, dan 0.5 maksudkan pemotongan sepenuhnya di tengah.

samples = 13 Maksudkan bahawa di titik keputusan ini masih ada 13 pelakon komedi, kerana ini adalah langkah pertama, jadi mereka semua adalah pelakon komedi.

value = [6, 7] Maksudkan bahawa di 13 pelakon komedi ini, 6 akan mendapat 'NO', dan 7 akan mendapat 'GO'.

Gini

Ada banyak kaedah untuk memotong sample, dan kami menggunakan kaedah GINI dalam tutorial ini.

Kaedah Gini menggunakan formula di bawah:

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

Di antara, x adalah jumlah jawapan yang pasti ('GO'), n adalah jumlah sample, dan y adalah jumlah jawaban yang salah ('NO'), dihitung dengan formula di bawah:

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


Langkah berikutnya mengandungi 2 kotak, satu kotak untuk pelakon komedi dengan 'Rank' 6.5 atau lebih rendah, dan yang lainnya untuk sisanya.

True - 5 pelakon komedi di sini tamat:

gini = 0.0 Maksudkan bahawa semua sample mendapat keputusan yang sama.

samples = 5 Maksudkan bahawa di cabang ini masih ada 5 pelakon komedi ( tingkatan 5 orang adalah 6.5 atau rendah lagi pelakon komedi).

value = [5, 0] Maksudnya 5 mendapat "NO" dan 0 mendapat "GO".

Bukan - 8 Penyanyi Drama terus:

Nationality(Negara)

Nationality <= 0.5 Maksudnya Penyanyi Komedi yang nilai negara kurang dari 0.5 akan mengikuti panah kiri (ini menunjukkan semua orang dari Inggris), sisanya akan mengikuti panah kanan.

gini = 0.219 Maksudnya sekitar 22% contoh akan bergerak ke arah yang sama.

samples = 8 Maksudnya di cabang ini masih ada 8 Penyanyi Komedi (8 Penyanyi Komedi dengan tingkat di atas 6.5).

value = [1, 7] Maksudnya di antara 8 Penyanyi Komedi ini, 1 orang akan mendapat "NO" dan 7 orang akan mendapat "GO".


Benar - 4 Penyanyi Drama terus:

Age(Umur)

Age <= 35.5 Maksudnya Penyanyi Komedi yang berumur 35.5 tahun atau lebih muda akan mengikuti panah kiri, sisanya akan mengikuti panah kanan.

gini = 0.375 Maksudnya sekitar 37.5% contoh akan bergerak ke arah yang sama.

samples = 4 Maksudnya di cabang ini masih ada 4 Penyanyi Komedi (4 Penyanyi Komedi dari Inggris).

value = [1, 3] Maksudnya di antara 4 Penyanyi Komedi ini, 1 orang akan mendapat "NO" dan 3 orang akan mendapat "GO".

Bukan - 4 Penyanyi Komedi sampai sini berhenti:

gini = 0.0 Menunjukkan semua sampel mendapat hasil yang sama.

samples = 4 Maksudnya di cabang ini masih ada 4 Penyanyi Komedi (4 Penyanyi Komedi dari Inggris).

value = [0, 4] Maksudnya di antara 4 Penyanyi Komedi ini, 0 akan mendapat "NO" dan 4 akan mendapat "GO".


Benar - 2 Penyanyi Komedi di sini berhenti:

gini = 0.0 Menunjukkan semua sampel mendapat hasil yang sama.

samples = 2 Maksudnya di cabang ini masih ada 2 Penyanyi Komedi (2 Penyanyi Komedi yang berumur 35.5 tahun atau lebih muda).

value = [0, 2] Maksudnya di antara 2 Penyanyi Komedi ini, 0 akan mendapat "NO" dan 2 akan mendapat "GO".

Bukan - 2 Penyanyi Drama terus:

Experience(Pengalaman)

Experience <= 9.5 Maksudnya Penyanyi Komedi yang memiliki pengalaman 9.5 tahun atau lebih banyak akan mengikuti panah kiri, sisanya akan mengikuti panah kanan.

gini = 0.5 Maksudnya 50% contoh akan bergerak ke arah yang sama.

samples = 2 Maksudnya adalah di cabang ini masih ada 2 Penyanyi Komedi (2 Penyanyi Komedi yang berumur di atas 35.5).

value = [1, 1] Maksudnya adalah antara 2 Penyanyi Komedi ini, 1 akan mendapat "NO" dan 1 akan mendapat "GO".


Benar - 1 Penyanyi Komedi di sini berhenti:

gini = 0.0 Menunjukkan semua sampel mendapat hasil yang sama.

samples = 1 Menunjukkan ada 1 aktor komedi lagi di cabang ini (1 aktor komedi mempunyai pengalaman 9.5 tahun atau kurang).

value = [0, 1] Menunjukkan 0 menunjukkan "Tidak", 1 menunjukkan "Bergo"

False - 1 aktor komedi sampai kini:

gini = 0.0 Menunjukkan semua sampel mendapat hasil yang sama.

samples = 1 Menunjukkan ada 1 aktor komedi lagi di cabang ini (dari mana 1 aktor komedi mempunyai pengalaman lebih daripada 9.5 tahun).

value = [1, 0] 1 menunjukkan "Tidak", 0 menunjukkan "Bergo"

Nilai ramalan

Kami boleh menggunakan pohon keputusan untuk ramalkan nilai baru.

Contohnya: Saya patut melihat program yang disutradarai oleh aktor komedi berusia 40 tahun dari Amerika yang mempunyai pengalaman 10 tahun dan tingkat komedi 7?

Contoh

Gunakan predict() Cara untuk ramalkan nilai baru:

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

Jalankan Contoh

Contoh

Jika tingkat komedi adalah 6, apa jawapan adalah?

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

Jalankan Contoh

Hasil yang berbeza

Jika dijalankan beberapa kali, bahkan jika data yang anda masukkan sama, pohon keputusan akan memberikan hasil yang berbeza.

Ini kerana pohon keputusan tidak dapat memberikan jawapan pasti 100%. Ia berdasarkan kemungkinan hasil, jawapan akan berbeza.