Scikit Learn - Pohon Keputusan
Pada bab ini kita akan mempelajari tentang metode pembelajaran di Sklearn yang diistilahkan sebagai pohon keputusan.
Decisions tress (DTs) adalah metode pembelajaran yang diawasi non-parametrik yang paling kuat. Mereka dapat digunakan untuk tugas klasifikasi dan regresi. Tujuan utama DT adalah untuk membuat model yang memprediksi nilai variabel target dengan mempelajari aturan keputusan sederhana yang diambil dari fitur data. Pohon keputusan memiliki dua entitas utama; satu adalah simpul akar, di mana data terpecah, dan lainnya adalah simpul atau daun keputusan, di mana kita mendapatkan keluaran akhir.
Algoritma Pohon Keputusan
Algoritma Decision Tree yang berbeda dijelaskan di bawah ini -
ID3
Ini dikembangkan oleh Ross Quinlan pada tahun 1986. Ini juga disebut Iterative Dichotomiser 3. Tujuan utama dari algoritma ini adalah untuk menemukan fitur kategorikal tersebut, untuk setiap node, yang akan menghasilkan perolehan informasi terbesar untuk target kategorikal.
Ini memungkinkan pohon untuk tumbuh hingga ukuran maksimumnya dan kemudian untuk meningkatkan kemampuan pohon pada data yang tidak terlihat, menerapkan langkah pemangkasan. Output dari algoritma ini adalah pohon multiway.
C4.5
Ini adalah penerus ID3 dan secara dinamis mendefinisikan atribut diskrit yang mempartisi nilai atribut kontinu menjadi satu set interval diskrit. Itulah alasannya menghapus batasan fitur kategorikal. Ini mengubah pohon terlatih ID3 menjadi set aturan 'IF-THEN'.
Untuk menentukan urutan penerapan aturan ini, keakuratan setiap aturan akan dievaluasi terlebih dahulu.
C5.0
Ia bekerja mirip dengan C4.5 tetapi menggunakan lebih sedikit memori dan membuat aturan yang lebih kecil. Ini lebih akurat dari C4.5.
GEROBAK
Ini disebut algoritma Klasifikasi dan Regresi Pohon. Ini pada dasarnya menghasilkan pemisahan biner dengan menggunakan fitur dan ambang batas yang menghasilkan perolehan informasi terbesar di setiap node (disebut indeks Gini).
Homogenitas bergantung pada indeks Gini, semakin tinggi nilai indeks Gini maka homogenitas akan semakin tinggi. Ini seperti algoritma C4.5, tetapi, perbedaannya adalah ia tidak menghitung kumpulan aturan dan tidak mendukung variabel target numerik (regresi) juga.
Klasifikasi dengan pohon keputusan
Dalam hal ini, variabel keputusan bersifat kategorikal.
Sklearn Module - Perpustakaan Scikit-learn menyediakan nama modul DecisionTreeClassifier untuk melakukan klasifikasi multikelas pada dataset.
Parameter
Tabel berikut berisi parameter yang digunakan oleh sklearn.tree.DecisionTreeClassifier modul -
Sr Tidak | Parameter & Deskripsi |
---|---|
1 | criterion - string, opsional default = "gini" Ini mewakili fungsi untuk mengukur kualitas split. Kriteria yang didukung adalah “gini” dan “entropy”. Standarnya adalah gini yang untuk ketidakmurnian Gini sedangkan entropi adalah untuk perolehan informasi. |
2 | splitter - string, opsional default = "terbaik" Ini memberi tahu model, strategi mana dari "terbaik" atau "acak" untuk memilih pemisahan di setiap node. |
3 | max_depth - int atau None, opsional default = None Parameter ini menentukan kedalaman maksimum pohon. Nilai defaultnya adalah None yang berarti node akan berkembang sampai semua daun murni atau sampai semua daun mengandung kurang dari sampel min_smaples_split. |
4 | min_samples_split - int, float, opsional default = 2 Parameter ini memberikan jumlah minimum sampel yang diperlukan untuk memisahkan node internal. |
5 | min_samples_leaf - int, float, opsional default = 1 Parameter ini memberikan jumlah minimum sampel yang diperlukan untuk berada di simpul daun. |
6 | min_weight_fraction_leaf - float, default opsional = 0. Dengan parameter ini, model akan mendapatkan fraksi bobot minimum dari jumlah bobot yang dibutuhkan untuk berada di simpul daun. |
7 | max_features - int, float, string atau None, opsional default = None Ini memberi model jumlah fitur yang harus dipertimbangkan saat mencari split terbaik. |
8 | random_state - int, instance RandomState atau Tidak Ada, opsional, default = tidak ada Parameter ini mewakili seed dari bilangan acak semu yang dihasilkan yang digunakan saat mengacak data. Berikut adalah pilihannya -
|
9 | max_leaf_nodes - int atau None, opsional default = None Parameter ini akan membiarkan menumbuhkan pohon dengan max_leaf_nodes dengan cara terbaik-pertama. Standarnya tidak ada yang berarti akan ada jumlah node daun yang tidak terbatas. |
10 | min_impurity_decrease - float, default opsional = 0. Nilai ini berfungsi sebagai kriteria bagi node untuk dipisahkan karena model akan memisahkan node jika pemisahan ini menyebabkan penurunan pengotor lebih besar dari atau sama dengan min_impurity_decrease value. |
11 | min_impurity_split - float, default = 1e-7 Ini mewakili ambang batas untuk penghentian awal pertumbuhan pohon. |
12 | class_weight - dict, daftar dicts, “balanced” atau None, default = None Ini mewakili bobot yang terkait dengan kelas. Bentuknya adalah {class_label: weight}. Jika kita menggunakan opsi default, itu berarti semua kelas seharusnya memiliki bobot satu. Di sisi lain, jika Anda memilihclass_weight: balanced, ini akan menggunakan nilai y untuk menyesuaikan bobot secara otomatis. |
13 | presort - bool, opsional default = False Ini memberi tahu model apakah akan memprakarsai data untuk mempercepat penemuan pemisahan terbaik yang sesuai. Standarnya salah tetapi disetel ke true, ini dapat memperlambat proses pelatihan. |
Atribut
Tabel berikut berisi atribut yang digunakan oleh sklearn.tree.DecisionTreeClassifier modul -
Sr Tidak | Parameter & Deskripsi |
---|---|
1 | feature_importances_ - susunan bentuk = [n_features] Atribut ini akan mengembalikan kepentingan fitur. |
2 | classes_: - larik berbentuk = [n_class] atau daftar larik semacam itu Ini mewakili label kelas yaitu masalah keluaran tunggal, atau daftar array label kelas yaitu masalah multi-keluaran. |
3 | max_features_ - int Ini mewakili nilai deduksi dari parameter max_features. |
4 | n_classes_ - int atau daftar Ini mewakili jumlah kelas yaitu masalah output tunggal, atau daftar jumlah kelas untuk setiap output yaitu masalah multi-output. |
5 | n_features_ - int Ini memberi nomor features ketika metode fit () dilakukan. |
6 | n_outputs_ - int Ini memberi nomor outputs ketika metode fit () dilakukan. |
Metode
Tabel berikut berisi metode yang digunakan oleh sklearn.tree.DecisionTreeClassifier modul -
Sr Tidak | Parameter & Deskripsi |
---|---|
1 | apply(diri, X [, check_input]) Metode ini akan mengembalikan indeks daun. |
2 | decision_path(diri, X [, check_input]) Seperti namanya, metode ini akan mengembalikan jalur keputusan di pohon |
3 | fit(diri, X, y [, sample_weight,…]) Metode fit () akan membangun pengklasifikasi pohon keputusan dari set pelatihan yang diberikan (X, y). |
4 | get_depth(diri) Seperti namanya, metode ini akan mengembalikan kedalaman pohon keputusan |
5 | get_n_leaves(diri) Seperti namanya, metode ini akan mengembalikan jumlah daun pohon keputusan. |
6 | get_params(diri [, dalam]) Kita dapat menggunakan metode ini untuk mendapatkan parameter penduga. |
7 | predict(diri, X [, check_input]) Ini akan memprediksi nilai kelas untuk X. |
8 | predict_log_proba(diri, X) Ini akan memprediksi probabilitas log kelas dari sampel input yang kami berikan, X. |
9 | predict_proba(diri, X [, check_input]) Ini akan memprediksi probabilitas kelas dari sampel input yang disediakan oleh kami, X. |
10 | score(diri, X, y [, sample_weight]) Sesuai dengan namanya, metode score () akan mengembalikan akurasi rata-rata pada data dan label pengujian yang diberikan .. |
11 | set_params(diri, \ * \ * params) Kita dapat mengatur parameter penduga dengan metode ini. |
Contoh Implementasi
Skrip Python di bawah ini akan digunakan sklearn.tree.DecisionTreeClassifier modul untuk membuat pengklasifikasi untuk memprediksi pria atau wanita dari kumpulan data kami yang memiliki 25 sampel dan dua fitur yaitu 'tinggi' dan 'panjang rambut' -
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
Keluaran
['Woman']
Kami juga dapat memprediksi probabilitas setiap kelas dengan menggunakan metode python predict_proba () sebagai berikut -
Contoh
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Keluaran
[[0. 1.]]
Regresi dengan pohon keputusan
Dalam hal ini variabel keputusan bersifat kontinu.
Sklearn Module - Perpustakaan Scikit-learn menyediakan nama modul DecisionTreeRegressor untuk menerapkan pohon keputusan pada masalah regresi.
Parameter
Parameter yang digunakan oleh DecisionTreeRegressor hampir sama dengan yang digunakan di DecisionTreeClassifiermodul. Perbedaannya terletak pada parameter 'kriteria'. UntukDecisionTreeRegressor modul ‘criterion: string, opsional default = "mse" 'parameter memiliki nilai berikut -
mse- Ini singkatan dari mean squared error. Ini sama dengan pengurangan varian sebagai kriteria pemilihan fitur. Ini meminimalkan kerugian L2 menggunakan rata-rata setiap node terminal.
freidman_mse - Ini juga menggunakan kesalahan kuadrat rata-rata tetapi dengan peningkatan skor Friedman.
mae- Ini adalah singkatan dari mean absolute error. Ini meminimalkan kerugian L1 menggunakan median dari setiap node terminal.
Perbedaan lainnya adalah tidak ada ‘class_weight’ parameter.
Atribut
Atribut dari DecisionTreeRegressor juga sama seperti sebelumnya DecisionTreeClassifiermodul. Perbedaannya adalah tidak ada‘classes_’ dan ‘n_classes_'atribut.
Metode
Metode DecisionTreeRegressor juga sama seperti sebelumnya DecisionTreeClassifiermodul. Perbedaannya adalah tidak ada‘predict_log_proba()’ dan ‘predict_proba()’'atribut.
Contoh Implementasi
Metode fit () dalam model regresi pohon keputusan akan mengambil nilai floating point y. mari kita lihat contoh implementasi sederhana dengan menggunakanSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Setelah dipasang, kita dapat menggunakan model regresi ini untuk membuat prediksi sebagai berikut -
DTreg.predict([[4, 5]])
Keluaran
array([1.5])