Masuk ke Python MySQL
- Halaman Sebelumnya Pelatihan/Pengujian
- Halaman Berikutnya Masuk ke MySQL

Pohon Keputusan (Decision Tree)
Dalam bab ini, kita akan menunjukkan bagaimana membuat "pohon keputusan". Pohon keputusan adalah grafik proses yang dapat membantu Anda membuat keputusan berdasarkan pengalaman sebelumnya.
Dalam contoh ini, seseorang akan mencoba menentukan apakah dia/mereka harus berpartisipasi dalam pertunjukan komedi.
Untungnya, karakter contoh kita selalu mendaftar saat pertunjukan komedi di kota dan mendaftar beberapa informasi tentang aktor komedi, serta mendaftar apakah dia/mereka pernah datang.
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 dataset ini, Python dapat membuat pohon keputusan, pohon keputusan ini dapat digunakan untuk menentukan apakah berbagai pertunjukan baru layak dihadiri.
Cara Kerja
Pertama, masukkan modul yang dibutuhkan dan gunakan pandas untuk membaca dataset:
Contoh
Baca dan cetak dataset:
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 berupa angka.
Kami harus mengkonversi kolom non-angka 'Nationality' dan 'Go' menjadi angka.
Pandas memiliki map()
Metode, metode ini menerima kamus yang mengandung informasi tentang bagaimana cara mengkonversi nilai.
{'UK': 0, 'USA': 1, 'N': 2}
Artinya mengubah nilai 'UK' menjadi 0, 'USA' menjadi 1, dan 'N' menjadi 2.
Contoh
Ubah nilai string menjadi 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 harus memisahkan kolom fitur dengan kolom target.
Kolom fitur adalah kolom yang kami coba untuk memprediksi, kolom target adalah kolom yang memiliki nilai yang kami coba untuk memprediksi.
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, kami dapat membuat pohon keputusan yang nyata, yang sesuai dengan detil kami, dan kemudian simpan berkas .png di komputer:
Contoh
Buat pohon keputusan, simpan ke gambar, dan tampilkan gambar tersebut:
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()
Penjelasan hasil
Pohon keputusan menggunakan keputusan sebelumnya untuk menghitung kesempatan Anda untuk menonton aktor komedi.
Baca berbagai aspek pohon keputusan:

Rank
Rank <= 6.5
Menunjukkan bahwa aktor komedi dengan peringkat di bawah 6.5 akan mengikuti True
Tanduk (ke kiri), sisanya mengikuti False
Tanduk (ke kanan).
gini = 0.497
Menunjukkan kualitas pemotongan, dan selalu angka diantara 0.0 dan 0.5, di mana 0.0 menunjukkan bahwa semua sampel mendapatkan hasil yang sama, dan 0.5 menunjukkan bahwa pemotongan selalu di tengah.
samples = 13
Menunjukkan bahwa di titik keputusan ini masih ada 13 aktor komedi, karena ini adalah tahap pertama, jadi mereka semua adalah aktor komedi.
value = [6, 7]
Menunjukkan bahwa di 13 aktor komedi ini, 6 akan mendapatkan "NO", dan 7 akan mendapatkan "GO".
Gini
Ada banyak metode memotong sampel, di tutorial ini kami menggunakan metode GINI.
Metode Gini menggunakan formula berikut:
Gini = 1 - (x/n)2 - (y/n)2
Diantara mereka, x adalah jumlah jawaban positif ("GO"), n adalah jumlah sampel, dan y adalah jumlah jawaban negatif ("NO"), hitung dengan formula berikut:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Langkah berikutnya terdiri dari 2 kotak, salah satu kotak untuk aktor komedi dengan 'Rank' 6.5 atau lebih rendah, dan sisanya adalah kotak lain.
True - 5 aktor komedi berakhir disini:
gini = 0.0
Menunjukkan bahwa semua sampel mendapatkan hasil yang sama.
samples = 5
Menunjukkan bahwa di cabang ini masih ada 5 aktor komedi (tingkat 5 aktor komedi adalah 6.5 atau lebih rendah).
value = [5, 0]
menunjukkan bahwa 5 mendapatkan "TIDAK" dan 0 mendapatkan "YA"
Salah - 8 penari drama terus:
Kebangsaan (kebangsaan)
Kebangsaan <= 0.5
menunjukkan bahwa penari komedi yang nilai kebangsaannya kurang dari 0.5 akan mengikuti panah kiri (ini berarti semua orang dari Inggris), sementara yang lainnya akan mengikuti panah kanan.
gini = 0.219
berarti sekitar 22% dari sampel akan bergerak ke arah yang sama.
samples = 8
menunjukkan bahwa di cabang ini masih ada 8 penari komedi (8 penari komedi dengan tingkat di atas 6.5).
value = [1, 7]
menunjukkan bahwa dari 8 penari komedi ini, 1 akan mendapatkan "TIDAK", sementara 7 lainnya akan mendapatkan "YA"

Benar - 4 penari drama terus:
Umur (umur)
Umur <= 35.5
menunjukkan bahwa penari komedi yang berusia 35.5 tahun atau lebih muda akan mengikuti panah kiri, sementara yang lainnya akan mengikuti panah kanan.
gini = 0.375
berarti sekitar 37.5% dari sampel akan bergerak ke arah yang sama.
samples = 4
menunjukkan bahwa di cabang ini masih ada 4 penari komedi (4 penari komedi dari Inggris).
value = [1, 3]
menunjukkan bahwa dari 4 penari komedi ini, 1 akan mendapatkan "TIDAK", sementara 3 lainnya akan mendapatkan "YA"
Salah - 4 penari komedi sampai di sini berakhir:
gini = 0.0
Berarti semua contoh mendapatkan hasil yang sama.
samples = 4
menunjukkan bahwa di cabang ini masih ada 4 penari komedi (4 penari komedi dari Inggris).
value = [0, 4]
menunjukkan bahwa dari 4 penari komedi ini, 0 akan mendapatkan "TIDAK", sementara 4 lainnya akan mendapatkan "YA"

Benar - 2 penari komedi di sini berakhir:
gini = 0.0
Berarti semua contoh mendapatkan hasil yang sama.
samples = 2
menunjukkan bahwa di cabang ini masih ada 2 penari komedi (2 penari komedi yang berusia 35.5 tahun atau lebih muda).
value = [0, 2]
menunjukkan bahwa dari 2 penari komedi ini, 0 akan mendapatkan "TIDAK", sementara 2 lainnya akan mendapatkan "YA"
Salah - 2 penari drama terus:
Pengalaman (pengalaman)
Pengalaman <= 9.5
menunjukkan bahwa penari komedi yang memiliki pengalaman 9.5 tahun atau lebih lama akan mengikuti panah kiri, sementara yang lainnya akan mengikuti panah kanan.
gini = 0.5
menunjukkan bahwa 50% dari sampel akan bergerak ke arah yang sama.
samples = 2
menunjukkan bahwa di cabang ini masih ada 2 penari komedi (2 penari komedi yang berusia di atas 35.5 tahun).
value = [1, 1]
menunjukkan bahwa 1 dari 2 penari komedi akan mendapatkan "TIDAK", sementara 1 lainnya akan mendapatkan "YA"

Benar - 1 penari komedi di sini berakhir:
gini = 0.0
Berarti semua contoh mendapatkan hasil yang sama.
samples = 1
Berarti di cabang ini masih ada 1 aktor komedi (1 aktor komedi dengan pengalaman 9,5 tahun atau kurang).
value = [0, 1]
Berarti 0 berarti "TIDAK", 1 berarti "YA".
False - 1 aktor komedi sampai saat ini:
gini = 0.0
Berarti semua contoh mendapatkan hasil yang sama.
samples = 1
Berarti di cabang ini masih ada 1 aktor komedi (1 aktor komedi dengan pengalaman lebih dari 9,5 tahun).
value = [1, 0]
1 berarti "TIDAK", 0 berarti "YA".
Nilai Prediksi
Kami dapat menggunakan pohon keputusan untuk memprediksi nilai baru.
Contohnya: Apakah saya seharusnya menonton program yang disutradarai oleh aktor komedi berusia 40 tahun dengan pengalaman 10 tahun, tingkat komedi 7?
Contoh
Penggunaan predict()
Cara untuk memprediksi nilai baru:
print(dtree.predict([[40, 10, 7, 1]]))
Contoh
Jika tingkat komedi adalah 6, apakah jawabannya?
print(dtree.predict([[40, 10, 6, 1]]))
Hasil yang berbeda
Jika dijalankan beberapa kali, bahkan jika data yang anda masukkan sama, pohon keputusan akan memberikan hasil yang berbeda.
Ini disebabkan pohon keputusan tidak dapat memberikan jawaban pasti 100%. Jawaban akan berbeda berdasarkan kemungkinan hasil.
- Halaman Sebelumnya Pelatihan/Pengujian
- Halaman Berikutnya Masuk ke MySQL