Masuk ke Python 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)

Jalankan Instansia

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)

Jalankan Instansia

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)

Jalankan Instansia

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

Jalankan Instansia

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

Jalankan Instansia

Contoh

Jika tingkat komedi adalah 6, apakah jawabannya?

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

Jalankan Instansia

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.