Pemula Belajar Pohon Keputusan
- Halaman Sebelumnya Pelatihan/Pengujian
- Halaman Berikutnya Masuk MySQL

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)
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)
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)
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()
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]]))
Contoh
Jika tingkat komedi adalah 6, apa jawapan adalah?
print(dtree.predict([[40, 10, 6, 1]]))
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.
- Halaman Sebelumnya Pelatihan/Pengujian
- Halaman Berikutnya Masuk MySQL