Dalam unit ini, Anda akan menggunakan YDF (Yggdrasil) Decision Forest) melatih dan menafsirkan pohon keputusan.
Unit ini terinspirasi dari 🧭 Memulai YDF tutorial.
Persiapan
Sebelum mempelajari {i>dataset<i}, lakukan hal berikut:
- Buat Colab baru notebook.
- Instal library YDF dengan menempatkan dan mengeksekusi baris kode berikut
di notebook Colab baru Anda:
!pip install ydf -U
- Impor library berikut:
import ydf import numpy as np import pandas as pd
{i>Dataset<i} Palmer Penguins
Colab ini menggunakan Set data Palmer Penguins, yang berisi pengukuran ukuran untuk tiga spesies penguin:
- Tali Dagu
- Gentoo
- Adelie
Ini adalah masalah klasifikasi—tujuannya adalah untuk memprediksi spesies penguin berdasarkan data dalam {i>dataset <i}Palmer's Penguins. Berikut gambar-gambar penguin tersebut:
Gambar 16. Tiga spesies penguin yang berbeda. Gambar oleh @allisonhorst
Kode berikut memanggil objek panda untuk memuat {i>dataset<i} Palmer Penguins ke dalam memori:
path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"
# Display the first 3 examples.
dataset.head(3)
Tabel berikut memformat 3 contoh pertama dalam Palmer Penguins {i>dataset<i}:
Tabel 3. 3 contoh pertama pada Penguin Palmer
spesies | pulau | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | seks | tahun | |
---|---|---|---|---|---|---|---|---|
0 | Adelie | Torgersen | 39,1 | 18,7 | 181,0 | 3.750,0 | laki-laki | 2007 |
1 | Adelie | Torgersen | 39,5 | 17,4 | 186,0 | 3.800,0 | perempuan | 2007 |
2 | Adelie | Torgersen | 40,3 | 18,0 | 195,0 | 3.250,0 | perempuan | 2007 |
Set data lengkap berisi campuran angka (misalnya, bill_depth_mm
),
kategorikal (misalnya, island
), dan fitur yang tidak ada. Tidak seperti jaringan neural
hutan keputusan mendukung semua jenis fitur ini secara native, sehingga Anda
tidak harus melakukan pengkodean one-hot, normalisasi, atau fitur is_present tambahan.
Sel kode berikut membagi set data menjadi set pelatihan dan pengujian ditetapkan:
# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2
train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]
print("Training examples: ", len(train_dataset))
# >> Training examples: 272
print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72
Melatih pohon keputusan dengan hyperparameter default
Anda dapat melatih pohon keputusan
pertama Anda dengan CART (Klasifikasi dan
Algoritma pembelajaran Pohon Regresi) (alias pelajar) tanpa menentukan
hyperparameter.
Hal itu karena pelajar ydf.CartLearner
memberikan nilai default yang baik
nilai hyperparameter. Anda akan mempelajari lebih lanjut cara kerja jenis model ini
dalam materi
ini nanti.
model = ydf.CartLearner(label=label).train(train_dataset)
Panggilan sebelumnya tidak menentukan kolom yang akan digunakan fitur input. Oleh karena itu, setiap kolom dalam set pelatihan digunakan. Panggilan juga tidak menentukan semantik (misalnya, numerik, kategoris, teks) fitur input. Oleh karena itu, semantik fitur disimpulkan secara otomatis.
Panggil model.plot_tree()
untuk menampilkan pohon keputusan yang dihasilkan:
model.plot_tree()
Di Colab, Anda dapat menggunakan mouse untuk menampilkan detail tentang elemen tertentu seperti sebagai distribusi class di setiap node.
Gambar 17. Pohon keputusan yang dilatih dengan hyperparameter default.
Colab menunjukkan bahwa kondisi root berisi 243 contoh. Namun, Anda mungkin ingat bahwa {i>dataset<i} pelatihan berisi 272 contoh. 29 sisanya contoh telah disimpan secara otomatis untuk validasi dan pemangkasan pohon.
Kondisi pertama menguji nilai bill_depth_mm
. Tabel 4 dan 5 menunjukkan
kemungkinan spesies yang berbeda tergantung pada hasil kondisi pertama.
Tabel 4. Kemungkinan spesies berbeda jika bill_depth_mm ≥
42.3
Spesies | Kecenderungan |
---|---|
Adelie (merah) | 8% |
Gentoo (biru) | 58% |
Chinstrap (hijau) | 36% |
Tabel 5. Kemungkinan spesies yang berbeda jika
bill_depth_mm < 42.3
Spesies | Kecenderungan |
---|---|
Adelie (merah) | 97% |
Gentoo (biru) | 2% |
Chinstrap (hijau) | 0% |
bill_depth_mm
adalah fitur numerik. Oleh karena itu, nilai 42,3 ditemukan
menggunakan pemisahan tepat untuk klasifikasi biner dengan
fitur.
Jika bill_depth_mm ≥ 42.3
Benar, uji lebih lanjut apakah
flipper_length_mm ≥ 207.5
dapat memisahkan hampir secara sempurna
Gentoos dan dari
gentoos+Adelie.
Kode berikut memberikan akurasi pelatihan dan pengujian model:
train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy: 0.9338
test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy: 0.9167
Ini jarang, tetapi mungkin terjadi, akurasi pengujian lebih tinggi daripada pelatihan tingkat akurasi. Dalam hal ini, set pengujian mungkin berbeda dari set pelatihan. Namun, hal ini tidak berlaku di sini seperti kereta & tes dipisah secara acak. Penjelasan yang lebih mungkin adalah set data pengujiannya sangat kecil (hanya 72 contoh), sehingga estimasi akurasinya tidak jelas.
Dalam praktiknya, untuk {i>dataset<i} sekecil itu, menggunakan validasi silang akan lebih disukai karena akan menghitung nilai metrik evaluasi yang lebih akurat. Namun, dalam contoh ini, kami melanjutkan dengan pelatihan & pengujian demi kesederhanaan.
Meningkatkan hyperparameter model
Modelnya adalah pohon keputusan tunggal yang dilatih dengan hyperparameter default masing-masing. Untuk mendapatkan prediksi yang lebih baik, Anda dapat:
Gunakan pelajar yang lebih handal, seperti forest acak atau pohon yang didukung gradien model transformer. Algoritma pembelajaran tersebut akan dijelaskan di halaman berikutnya.
Optimalkan hyperparameter menggunakan pengamatan dan intuisi Anda. Tujuan panduan peningkatan kualitas model dapat membantu.
Menggunakan penyesuaian hyperparameter untuk menguji secara otomatis sejumlah besar kemungkinan hyperparameter.
Karena kita belum melihat hutan acak dan pohon yang didukung gradien dan karena jumlah contoh terlalu sedikit untuk melakukan pengujian penyesuaian hyperparameter, Anda akan meningkatkan kualitas model secara manual.
Pohon keputusan yang ditampilkan di atas berukuran kecil, dan daun dengan 61 contoh berisi campuran label Adelie dan Chinstrap. Mengapa algoritma tidak membagi daun ini lebih lanjut? Ada dua kemungkinan alasan:
- Jumlah minimum sampel per daun (
min_examples=5
secara default) dapat memiliki tercapai. - Pohon mungkin telah dibagi dan kemudian dipangkas untuk mencegah overfitting.
Kurangi jumlah minimum contoh menjadi 1 dan lihat hasilnya:
model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()
Gambar 18. Pohon keputusan yang dilatih dengan min_examples=1.
Node {i>leaf<i} yang berisi 61 contoh telah dibagi lebih lanjut dengan beberapa kali.
Untuk melihat apakah pembagian node lebih lanjut bermanfaat, kami mengevaluasi kualitas model baru ini pada set data pengujian:
print(model.evaluate(test_dataset).accuracy)
# >> 0.97222
Kualitas model telah meningkat dengan akurasi pengujian mulai dari 0,9167 hingga 0,97222. Perubahan hyperparameter ini adalah ide bagus.
Hutan keputusan sebelumnya
Dengan terus meningkatkan hyperparameter, kita mungkin bisa mencapai tingkat akurasi. Namun, alih-alih menggunakan proses manual ini, kita dapat melatih model seperti forest acak dan lihat apakah model tersebut berfungsi lebih baik.
model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111
Akurasi forest acak lebih baik daripada pohon sederhana kita. Anda akan pelajari alasannya di halaman berikutnya.
Penggunaan dan batasan
Seperti yang disebutkan sebelumnya, pohon keputusan tunggal sering kali memiliki kualitas yang lebih rendah daripada modern metode machine learning seperti hutan acak, pohon yang ditingkatkan gradien, dan jaringan. Namun, pohon keputusan tetap berguna dalam kasus berikut:
- Sebagai dasar yang sederhana dan murah untuk mengevaluasi pendekatan yang lebih kompleks.
- Ketika ada imbal balik antara kualitas model dan penafsiran.
- Sebagai proxy untuk penafsiran model hutan keputusan, yang materi ini akan dipelajari nanti.