Lensa ML

Gradient Boosting

Langkah 1 dari 6: Mulai dari Konstanta

Prediksi awal

Prediksi awal0.08
-3-2-10123-2-1012xy
Prediksi
0.08
MSE
1.483
Rentang residual
-1.6…1.6
Titik
25

Gradient boosting dimulai dari prediksi sederhana, biasanya rata-rata target. Nilainya sudah dekat dengan rata-rata, yaitu konstanta yang meminimalkan squared error.

Geser slider prediksi awal dan perhatikan kartu MSE. Konstanta yang meminimalkan squared error adalah rata-rata target, sekitar 0,08 untuk 25 titik ini. Loss lain mulai dari konstanta lain: median untuk absolute error, dan log-odds kelas positif untuk log loss pada klasifikasi biner. Nilai awal ini adalah f_0(x) milik model. Setiap tree berikutnya menambahkan koreksi di atasnya, jadi bentuk model akhirnya f(x) = f_0 + η·Σ h_m(x), dengan h_m sebagai tree ke-m.

Langkah 2 dari 6: Fit ke Residual

Tree mempelajari error

Putaran 1
Prediksi vs Dataf(x)Residual (yang dipelajari tree berikutnya)0-3-2-10123
Putaran
1
MSE sebelum
1.483
MSE sesudah
0.822
Peningkatan
44.5%

Kurva atas adalah prediksi ensemble saat ini. Titik merah di bawah adalah residual, yaitu error yang belum tertangkap, dan garis bertingkat berwarna adalah tree baru yang di-fit ke residual itu.

Tekan Putar atau geser slider putaran, lalu bandingkan residual di panel bawah dengan stump yang digambar di atasnya. Dengan squared-error loss L = ½(y − f)², negative gradient terhadap prediksi f adalah y − f, yaitu residual. Jadi, melatih tree pada residual sama dengan satu langkah gradient descent di ruang fungsi, pandangan yang dipaparkan Jerome Friedman pada 2001. Untuk loss lain seperti log loss, tree di-fit ke pseudo-residual yang dihitung dari gradient loss itu. Setiap stump dalam demo ini mencoba semua titik split dan menyimpan yang squared error-nya terendah.

Langkah 3 dari 6: Learning Rate

Langkah kecil, hasil besar

Learning rate η0.30
Putaran1
1. Tree yang di-fit ke residual-1.011.28× η = 0.302. Update yang diskalakan (η × tree)-0.3030.385tambahkan ke ensemble ↓3. Prediksi yang diperbarui-3-1013
η
0.30
Putaran
1
MSE sebelum
1.483
MSE sesudah
0.822

η=0.30 menskalakan kontribusi setiap tree menjadi 30% dari nilai aslinya, dengan menukar kecepatan belajar demi stabilitas.

Geser slider learning rate η dan putaran, lalu ikuti ketiga panel dari tree mentah sampai update yang sudah diskalakan. Mengalikan setiap tree dengan η, yang disebut shrinkage, berarti setiap tree hanya memperbaiki sebagian error, sehingga tree berikutnya masih punya sesuatu untuk dipelajari. Friedman menemukan bahwa nilai kecil, sekitar η ≤ 0.1, secara konsisten memberi test error lebih rendah dengan biaya tree yang lebih banyak. Library biasanya memakai default 0,1 atau 0,3. Shrinkage sering dipasangkan dengan row subsampling, yaitu setiap tree hanya melihat sebagian acak data, varian yang disebut stochastic gradient boosting.

Langkah 4 dari 6: Membangun Secara Berurutan

Ensemble terus bertambah

R1
-3-2-10123-2-1012xy
Tree
1
MSE train
0.822
MSE test
0.718
Std. residual
0.907

Setiap tree memperbaiki kesalahan ensemble, jadi prediksi membaik selangkah demi selangkah. Putaran awal menangkap pola besar dalam data.

Tekan Putar atau geser slider putaran dari 1 ke 30, lalu bandingkan kartu MSE train dan MSE test. Boosting dan bagging menurunkan jenis error yang berbeda. Bagging merata-ratakan tree independen ber-variance tinggi untuk menurunkan variance, sedangkan boosting menambahkan tree kecil ber-bias tinggi satu per satu untuk menurunkan bias. Itu sebabnya boosting memakai tree dangkal, sering kali dengan kedalaman 3 sampai 8, atau stump satu split seperti di sini. Tree-nya tidak bisa dilatih paralel karena setiap tree bergantung pada tree sebelumnya, jadi library memparalelkan pencarian split di dalam setiap tree.

Langkah 5 dari 6: Tree × Learning Rate

Tradeoff-nya

-3-2-10123-2-1012xy
η
0.30
Tree
20
MSE train
0.012
MSE test
0.066

Learning rate rendah dengan banyak tree bisa menyamai rate tinggi dengan sedikit tree, dan biasanya generalize lebih baik. Ubah kedua slider untuk melihat interaksinya.

Geser slider learning rate η dan tree maksimum bersama-sama. Pada data ini, η = 1 dengan 5 tree mencapai MSE test sekitar 0,19, sedangkan η = 0.05 dengan 50 tree mencapai sekitar 0,07. Menurunkan η menjadi separuh kira-kira menggandakan jumlah tree yang dibutuhkan untuk fit training yang sama. Resep yang umum adalah menetapkan learning rate kecil, misalnya 0,05 atau 0,1, lalu membiarkan early stopping memilih jumlah tree. Kedalaman tree, jumlah minimum sampel per leaf, dan penalti L1 atau L2 pada nilai leaf, seperti di XGBoost, adalah pengatur utama lainnya.

Langkah 6 dari 6: Loss Landscape

Melihat loss turun

R1
01020304050Putaran0.00.20.40.60.81.01.21.41.6MSEterbaikTrainTest
Putaran
1
Loss train
0.916
Loss test
0.801
Gap
-0.116

Loss train terus turun. Perhatikan loss test: kalau naik, model sedang overfit. Kedua loss masih turun. Loss test terbaik ada di putaran 19.

Tekan Putar atau geser slider putaran sampai 50 dan cari penanda terbaik berwarna emas. Di sini loss test mencapai titik terendah di putaran 19, dengan MSE sekitar 0,050, lalu pelan-pelan naik ke 0,056 pada putaran 50, sementara loss training terus turun sampai sekitar 0,006. Early stopping mengubah pola ini menjadi aturan: sisihkan validation set, pantau loss-nya setelah setiap putaran, dan berhenti begitu tidak membaik selama sejumlah putaran tertentu, misalnya 50. XGBoost dan LightGBM mendukung ini secara langsung. Model akhir hanya menyimpan tree sampai putaran terbaik.

Apa itu gradient boosting?

Gradient boosting adalah metode ensemble yang membangun model kuat dengan menambahkan banyak model lemah, biasanya decision tree kecil, satu per satu. Setiap tree baru di-fit ke error dari ensemble saat ini, lebih tepatnya ke negative gradient dari loss, dan output-nya dikecilkan dengan learning rate sebelum ditambahkan. Dengan squared-error loss, gradient itu tidak lain adalah residual: target dikurangi prediksi saat ini.

Gradient-boosted tree termasuk model paling akurat untuk data tabular dan sering memenangkan kompetisi machine learning tabular. XGBoost, LightGBM, dan CatBoost adalah implementasi yang umum. Metode ini dipakai untuk model click-through dan ranking di mesin pencari dan periklanan, juga untuk credit scoring, deteksi penipuan, dan peramalan permintaan.

Ide utama

  • Gradient boosting menambahkan tree satu per satu, dan setiap tree di-fit ke error ensemble saat ini.
  • Setiap tree di-fit ke negative gradient dari loss, yang untuk squared error adalah residual.
  • Learning rate menskalakan kontribusi setiap tree agar tidak ada satu tree yang mendominasi.
  • Learning rate yang lebih kecil butuh lebih banyak tree, tetapi biasanya generalize lebih baik.
  • Boosting menurunkan bias dengan tree dangkal, sedangkan bagging menurunkan variance dengan tree dalam.
  • Early stopping pada validation set menentukan jumlah tree.

Ulasan singkat tentang topik ini

Pertanyaan umum

Apa bedanya gradient boosting dan AdaBoost?

AdaBoost mengubah weight titik training setelah setiap putaran, sehingga model berikutnya fokus pada contoh yang salah diklasifikasi. Gradient boosting melatih setiap model baru pada gradient dari loss function. Ternyata AdaBoost adalah kasus khusus dari kerangka ini dengan exponential loss, dan gradient boosting memperluas idenya ke loss apa pun yang differentiable.

Apa yang membedakan XGBoost dari gradient boosting biasa?

XGBoost memakai langkah orde kedua (Newton), menambahkan penalti L1 dan L2 pada nilai leaf, mempelajari arah default untuk nilai yang hilang di setiap split, dan memakai pencarian split aproksimasi yang cepat. Chen dan Guestrin memaparkannya pada 2016. LightGBM mempercepat training lebih jauh dengan split berbasis histogram dan pertumbuhan tree leaf-wise.

Bisakah gradient boosting dipakai untuk klasifikasi?

Bisa. Untuk klasifikasi biner, metode ini melakukan boosting pada log-odds di bawah log loss, dan setiap tree di-fit ke gradient y − p, dengan p sebagai probabilitas prediksi saat ini. Untuk K kelas, biasanya tumbuh K tree per putaran, satu untuk setiap skor kelas, lalu skornya digabungkan dengan softmax.

Apakah gradient boosting perlu feature scaling?

Tidak. Tree-nya membuat split berdasarkan threshold, jadi penskalaan ulang yang monoton pada sebuah feature tidak mengubah split. Metode ini juga kurang peka terhadap outlier pada input dibanding model linear, walaupun outlier pada target tetap berpengaruh di bawah squared-error loss.

Penjelasan terkait

Referensi

  1. Friedman (2001), "Greedy Function Approximation: A Gradient Boosting Machine", Annals of Statistics
  2. Friedman (2002), "Stochastic Gradient Boosting", Computational Statistics & Data Analysis
  3. Chen & Guestrin (2016), "XGBoost: A Scalable Tree Boosting System"
  4. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", chapter 8: Tree-Based Methods

Terakhir diperbarui