Di unit ini, Anda akan menggunakan pelatihan library YDF (Yggdrasil Decision Forest) dan menafsirkan pohon keputusan.
Unit ini terinspirasi dari tutorial 🧭 YDF Getting Started.
Persiapan
Sebelum mempelajari {i>dataset<i}, 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
{i>Dataset <i}Palmer Penguins
Colab ini menggunakan set data Palmer Penguins, yang berisi pengukuran ukuran untuk tiga spesies penguin:
- Tali Dagu
- Gentoo
- Adelia
Ini adalah masalah klasifikasi—tujuannya adalah untuk memprediksi spesies penguin berdasarkan data di {i>dataset<i} Penguin Palmer. Berikut adalah penguin:
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 | gender | tahun | |
---|---|---|---|---|---|---|---|---|
0 | Adelia | Torersen | 39,1 | 18,7 | 181,0 | 3750,0 | laki-laki | 2007 |
1 | Adelia | Torersen | 39,5 | 17,4 | 186,0 | 3800,0 | perempuan | 2007 |
2 | Adelia | Torersen | 40,3 | 18,0 | 195,0 | 3250,0 | perempuan | 2007 |
Set data lengkap berisi campuran numerik (misalnya, bill_depth_mm
), kategori (misalnya, island
), dan fitur yang tidak ada. Tidak seperti jaringan
neural, forest 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 pelajar) tanpa menentukan
hyperparameter apa pun.
Hal ini karena pelajar ydf.CartLearner
memberikan nilai hyperparameter default
yang baik. Anda akan mempelajari lebih lanjut tentang cara kerja
jenis model ini nanti di materi 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 tersebut juga tidak menentukan semantik (misalnya, numerik, kategori, teks) dari fitur input. Oleh karena itu, semantik fitur secara otomatis disimpulkan.
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 dipesan secara otomatis untuk divalidasi dan pemangkasan pohon.
Kondisi pertama menguji nilai bill_depth_mm
. Tabel 4 dan 5 menunjukkan kemungkinan
spesies yang berbeda tergantung pada hasil dari kondisi pertama.
Tabel 4. Kemungkinan spesies yang berbeda jika bill_depth_mm ≥
42.3
Spesies | Kecenderungan |
---|---|
Adelie (merah) | 8% |
Gentoo (biru) | 58% |
Tali dagu (hijau) | 36% |
Tabel 5. Kemungkinan spesies yang berbeda jika
bill_depth_mm < 42.3
Spesies | Kecenderungan |
---|---|
Adelie (merah) | 97% |
Gentoo (biru) | 2% |
Tali dagu (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
bernilai Benar, pengujian lebih lanjut apakah
flipper_length_mm ≥ 207.5
dapat hampir secara sempurna memisahkan
Gentoos dan dari Gentoos+Adelie.
Kode berikut memberikan pelatihan dan pengujian akurasi 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
Meskipun jarang terjadi, akurasi pengujian lebih tinggi daripada akurasi pelatihan. Dalam hal ini, set pengujian mungkin berbeda dengan set pelatihan. Namun, hal ini tidak berlaku di sini karena pelatihan & pengujian dibagi secara acak. Penjelasan yang lebih mungkin adalah set data pengujian sangat kecil (hanya 72 contoh), sehingga estimasi akurasinya tidak stabil.
Dalam praktiknya, untuk set data kecil seperti itu, penggunaan validasi silang akan lebih disukai karena akan menghitung nilai metrik evaluasi yang lebih akurat. Namun, dalam contoh ini, kami melanjutkan dengan pelatihan & pengujian agar lebih mudah.
Meningkatkan kualitas hyperparameter model
Model ini adalah satu pohon keputusan yang dilatih dengan nilai hyperparameter default. Untuk mendapatkan prediksi yang lebih baik, Anda dapat:
Gunakan pelajar yang lebih canggih seperti hutan acak atau model pohon yang ditingkatkan gradien. Algoritma pembelajaran tersebut akan dijelaskan di halaman berikutnya.
Mengoptimalkan hyperparameter menggunakan pengamatan dan intuisi Anda. Panduan peningkatan model dapat membantu.
Gunakan penyesuaian hyperparameter untuk otomatis menguji sejumlah besar kemungkinan hyperparameter.
Karena kita belum melihat algoritma hutan dan gradien yang meningkatkan hierarki secara acak, dan karena jumlah contoh terlalu kecil untuk melakukan penyesuaian hyperparameter otomatis, maka 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 bagian ini lebih lanjut? Ada dua kemungkinan alasan:
- Jumlah minimum sampel per daun (
min_examples=5
secara default) mungkin telah tercapai. - Hierarki 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 lebih lanjut beberapa kali.
Untuk melihat apakah pembagian node lebih lanjut bermanfaat, kami mengevaluasi kualitas model baru ini di set data pengujian:
print(model.evaluate(test_dataset).accuracy)
# >> 0.97222
Kualitas model telah meningkat dengan akurasi pengujian mulai dari 0,9167 menjadi 0,97222. Perubahan hyperparameter ini adalah ide yang bagus.
Sebelumnya dari forest keputusan
Dengan terus meningkatkan hyperparameter, kita mungkin bisa mencapai akurasi yang sempurna. Namun, sebagai ganti proses manual ini, kita dapat melatih model yang lebih canggih seperti forest acak dan melihat 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
Keakuratan hutan acak lebih baik daripada pohon sederhana. 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 forest acak, pohon yang ditingkatkan gradien, dan jaringan neural. Namun, pohon keputusan masih berguna dalam kasus-kasus berikut:
- Sebagai dasar pengukuran sederhana dan murah untuk mengevaluasi pendekatan yang lebih kompleks.
- Ketika ada keseimbangan antara kualitas model dan penafsiran.
- Sebagai proxy untuk interpretasi model forest keputusan, yang akan dipelajari nanti dalam kursus.