Dalam unit ini, Anda akan menggunakan library YDF (Yggdrasil Decision Forest) untuk melatih dan menafsirkan pohon keputusan.
Unit ini terinspirasi dari tutorial 🧭 Memulai YDF.
Persiapan
Sebelum mempelajari set data, lakukan hal berikut:
- Buat notebook Colab baru.
- Instal library YDF dengan menempatkan dan menjalankan 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
Dataset Palmer Penguins
Colab ini menggunakan set data Palmer Penguins, yang berisi pengukuran ukuran untuk tiga spesies penguin:
- Chinstrap
- Gentoo
- Adelie
Ini adalah masalah klasifikasi—tujuannya adalah memprediksi spesies penguin berdasarkan data dalam set data Palmer's Penguins. Berikut adalah penguinnya:
Gambar 16. Tiga spesies penguin yang berbeda. Gambar oleh @allisonhorst
Kode berikut memanggil fungsi pandas untuk memuat set data 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 set data Palmer Penguins:
Tabel 3. 3 contoh pertama di Palmer Penguins
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 | 3750,0 | laki-laki | 2007 |
1 | Adelie | Torgersen | 39,5 | 17,4 | 186.0 | 3800,0 | perempuan | 2007 |
2 | Adelie | Torgersen | 40,3 | 18,0 | 195,0 | 3250.0 | perempuan | 2007 |
Set data lengkap berisi campuran fitur numerik (misalnya, bill_depth_mm
),
kategoris (misalnya, island
), dan yang tidak ada. Tidak seperti jaringan
neural, hutan keputusan mendukung semua jenis fitur ini secara native, sehingga Anda
tidak perlu melakukan encoding one-hot, normalisasi, atau fitur is_present tambahan.
Sel kode berikut membagi set data menjadi set pelatihan dan set pengujian:
# 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 dengan algoritma pembelajaran CART (Classification and Regression Trees) (alias learner) tanpa menentukan hiperparameter apa pun.
Hal ini karena pelajar ydf.CartLearner
memberikan nilai hyperparameter default yang baik. Anda akan mempelajari lebih lanjut cara kerja jenis model ini di bagian selanjutnya dalam kursus ini.
model = ydf.CartLearner(label=label).train(train_dataset)
Panggilan sebelumnya tidak menentukan kolom yang akan digunakan sebagai fitur input. Oleh karena itu, setiap kolom dalam set pelatihan digunakan. Panggilan juga tidak menentukan semantik (misalnya, numerik, kategoris, teks) dari 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 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 set data pelatihan berisi 272 contoh. 29 contoh lainnya telah dicadangkan secara otomatis untuk validasi dan pemangkasan hierarki.
Kondisi pertama menguji nilai bill_depth_mm
. Tabel 4 dan 5 menunjukkan kemungkinan berbagai spesies bergantung pada hasil kondisi pertama.
Tabel 4. Kemungkinan spesies yang 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 algoritma pemisahan yang tepat untuk klasifikasi biner dengan fitur numerik.
Jika bill_depth_mm ≥ 42.3
adalah Benar (True), pengujian lebih lanjut apakah
flipper_length_mm ≥ 207.5
dapat memisahkan Gentoos dan Gentoos+Adelie hampir dengan sempurna.
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
Jarang terjadi, tetapi mungkin saja akurasi pengujian lebih tinggi daripada akurasi pelatihan. Dalam hal ini, set pengujian mungkin berbeda dengan set pelatihan. Namun, hal ini tidak terjadi di sini karena pelatihan & pengujian dibagi secara acak. Penjelasan yang lebih mungkin adalah set data pengujian sangat kecil (hanya 72 contoh), sehingga estimasi akurasi tidak akurat.
Dalam praktiknya, untuk set data sekecil itu, penggunaan validasi silang akan lebih baik karena akan menghitung nilai metrik evaluasi yang lebih akurat. Namun, dalam contoh ini, kita melanjutkan dengan pelatihan & pengujian demi kesederhanaan.
Meningkatkan hyperparameter model
Model ini adalah satu pohon keputusan yang dilatih dengan nilai hyperparameter default. Untuk mendapatkan prediksi yang lebih baik, Anda dapat:
Gunakan model yang lebih canggih seperti random forest atau model gradient boosted trees. Algoritma pembelajaran tersebut akan dijelaskan di halaman berikutnya.
Optimalkan hyperparameter menggunakan pengamatan dan intuisi Anda. Panduan peningkatan model dapat membantu.
Gunakan penyesuaian hyperparameter untuk menguji sejumlah besar kemungkinan hyperparameter secara otomatis.
Karena kita belum melihat algoritma random forest dan gradient boosted trees, dan karena jumlah contoh terlalu kecil untuk melakukan penyesuaian hyperparameter otomatis, 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) mungkin telah tercapai. - Pohon mungkin telah dibagi lalu 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 daun yang berisi 61 contoh telah dibagi beberapa kali.
Untuk melihat apakah pembagian lebih lanjut node ini bermanfaat, kita mengevaluasi kualitas model baru ini pada set data pengujian:
print(model.evaluate(test_dataset).accuracy)
# >> 0.97222
Kualitas model telah meningkat dengan akurasi pengujian yang meningkat dari 0,9167 menjadi 0,97222. Perubahan hyperparameter ini adalah ide yang bagus.
Pratinjau hutan keputusan
Dengan terus meningkatkan hyperparameter, kita mungkin dapat mencapai akurasi yang sempurna. Namun, alih-alih proses manual ini, kita dapat melatih model yang lebih canggih seperti random forest dan melihat apakah model tersebut berfungsi lebih baik.
model = ydf.RandomForestLearner(label=label).train(train_dataset)
print("Test accuracy: ", model.evaluate(test_dataset).accuracy)
# >> Test accuracy: 0.986111
Akurasi hutan acak lebih baik daripada pohon sederhana kita. Anda akan mempelajari alasannya di halaman berikutnya.
Penggunaan dan batasan
Seperti yang disebutkan sebelumnya, satu pohon keputusan sering kali memiliki kualitas yang lebih rendah daripada metode machine learning modern seperti hutan acak, pohon yang ditingkatkan gradien, dan jaringan neural. Namun, pohon keputusan masih berguna dalam kasus berikut:
- Sebagai dasar yang sederhana dan tidak mahal untuk mengevaluasi pendekatan yang lebih kompleks.
- Jika ada kompromi antara kualitas dan kemampuan interpretasi model.
- Sebagai pengganti interpretasi model hutan keputusan, yang akan dibahas dalam kursus ini nanti.