Traffine I/O

Bahasa Indonesia

2022-08-03

Gradient Boosting Decision Trees (GBDT)

Apa itu Gradient Boosting Decision Trees (GBDT)

Gradient Boosting Decision Trees (GBDT) adalah metode ensemble learning yang kuat yang menggabungkan kekuatan dari decision trees dan teknik gradient boosting. Metode ini semakin populer belakangan ini karena kemampuannya untuk menghasilkan model dengan performa tinggi yang dapat menangani berbagai masalah kompleks di berbagai domain, termasuk keuangan, kesehatan, dan pemasaran.

GBDT bekerja dengan cara membangun serangkaian decision trees secara iteratif, di mana setiap tree mencoba untuk memperbaiki kesalahan yang dibuat oleh pendahulunya. Proses ini berlanjut sampai jumlah tree yang ditentukan telah dibuat atau tingkat performa yang telah ditentukan tercapai. Dengan menggabungkan prediksi dari beberapa tree, GBDT sering dapat mencapai akurasi dan generalisasi yang lebih baik dibandingkan dengan decision tree tunggal.

Algoritma GBDT

Di bagian ini, saya akan menjelajahi algoritma GBDT, fokus pada kasus regresi dan klasifikasi. Ide utama di balik GBDT adalah membangun urutan decision tree lemah, di mana setiap tree dilatih untuk memperbaiki kesalahan yang dibuat oleh pendahulunya. Dengan secara iteratif meningkatkan model, GBDT dapat mencapai akurasi dan generalisasi yang tinggi. Mari kita telusuri komponen utama dari algoritma GBDT.

The architecture of Gradient Boosting Decision Tree
The architecture of Gradient Boosting Decision Tree

  1. Inisialisasi model dengan prediksi konstan

GBDT memulai dengan menginisialisasi model dengan nilai prediksi konstan. Untuk masalah regresi, konstan ini biasanya berupa mean dari nilai target, sedangkan untuk masalah klasifikasi, bisa berupa log-odds dari kelas mayoritas.

Untuk regresi, prediksi awal F_0(x) diberikan oleh:

F_0(x) = \frac{1}{N}\sum_{i=1}^{N} y_i

Untuk klasifikasi biner, prediksi awal F_0(x) diberikan oleh:

F_0(x) = \log \frac{\sum_{i=1}^{N} I(y_i = 1)}{\sum_{i=1}^{N} I(y_i = 0)}

di mana N adalah jumlah sampel, y_i adalah nilai target dari sampel ke-i, dan I adalah fungsi indikator.

  1. Membangun decision tree secara iteratif

GBDT membangun urutan decision tree dengan secara iteratif membangun tree baru ke pseudo-residual (gradien) dari fungsi loss. Pseudo-residual dihitung sebagai gradien negatif dari fungsi loss terhadap prediksi model saat ini. Ini membimbing algoritma ke arah penaksiran yang lebih baik dari fungsi target dengan meminimalkan loss.

Untuk regresi dengan fungsi loss kuadrat terkecil, pseudo-residual r_{i, t} pada iterasi ke-t diberikan oleh:

r_{i, t} = -\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}\bigg|_{F(x) = F_{t-1}(x)} = y_i - F_{t-1}(x_i)

Untuk klasifikasi biner dengan fungsi loss logistik, pseudo-residual r_{i, t} pada iterasi ke-t diberikan oleh:

r_{i, t} = -\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}\bigg|_{F(x) = F_{t-1}(x)} = y_i - \frac{1}{1 + \exp(-F_{t-1}(x_i))}
  1. Memperbarui model dengan prediksi tree berbobot

Setelah membangun decision tree baru h_t(x), GBDT memperbarui model dengan menambahkan versi prediksi tree yang ditimbang ke prediksi model saat ini. Bobot \alpha_t (learning rate) menentukan kontribusi tree baru terhadap model secara keseluruhan dan membantu mencegah overfitting. Model yang diperbarui F_t(x) diberikan oleh:

F_t(x) = F_{t-1}(x) + \alpha_t h_t(x)
  1. Menghentikan proses

Algoritma terus membangun dan menambahkan decision tree sampai jumlah tree yang telah ditentukan tercapai atau peningkatan performa menjadi tidak signifikan.

GBDT vs. Random Forest

Kedua GBDT dan Random Forest adalah metode ensemble yang menggunakan decision tree sebagai pembelajaran dasar, tetapi ada beberapa perbedaan kunci antara keduanya:

  • Boosting vs Bagging
    GBDT adalah algoritma boosting, di mana setiap tree dibangun secara berurutan untuk memperbaiki kesalahan pendahulunya. Sebaliknya, Random Forest adalah algoritma bagging, di mana tree dibangun secara independen menggunakan sampel bootstrapped dari dataset.

  • Struktur tree
    GBDT biasanya menggunakan tree dangkal, yang merupakan pembelajar lemah, sementara Random Forest menggunakan tree yang dalam dan sepenuhnya tumbuh.

  • Kompleksitas model
    Model GBDT dapat lebih kompleks dari Random Forest karena sifat iteratif boosting. Ini dapat mengarah pada performa yang lebih baik tetapi juga meningkatkan risiko overfitting.

  • Kecepatan pelatihan
    Melatih model GBDT dapat lebih lambat daripada melatih Random Forest, karena tree harus dibangun secara berurutan. Namun, model GBDT sering dapat mencapai performa yang sama atau lebih baik dengan lebih sedikit tree, yang dapat menutupi waktu pelatihan yang lebih lama.

  • Interpretabilitas
    Model GBDT dan Random Forest keduanya kurang dapat diinterpretasikan dibandingkan dengan decision tree tunggal, tetapi model GBDT dapat lebih sulit diinterpretasikan karena konstruksi tree secara berurutan dan penggunaan informasi gradien.

  • Keberlanjutan pada data berisik
    Random Forest umumnya lebih tahan terhadap data berisik, karena membangun beberapa tree independen dan mengambil rata-rata dari prediksi mereka. GBDT, di sisi lain, mungkin lebih sensitif terhadap noise, karena setiap tree dipengaruhi oleh kesalahan pendahulunya.

  • Penyetelan hyperparameter
    GBDT biasanya memerlukan penyetelan hyperparameter yang lebih banyak daripada Random Forest untuk mencapai performa yang optimal, karena melibatkan parameter tambahan seperti learning rate dan regularisasi.

GBDT dalam Python

Berikut adalah skrip Python untuk mengimplementasikan model GBDT. Dataset California Housing untuk regresi dan dataset Iris untuk klasifikasi digunakan sebagai contoh.

Regresi: Dataset California Housing

python
import numpy as np
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error

data = fetch_california_housing()
X, y = data.data, data.target

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create and train the GBDT model
gbdt_regressor = GradientBoostingRegressor(
    n_estimators=100,
    max_depth=3,
    learning_rate=0.1,
    random_state=42
)
gbdt_regressor.fit(X_train, y_train)

# Evaluate the model
y_pred = gbdt_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.4f}')
Mean Squared Error: 0.2940

klasifikasi: Dataset Iris

python
from sklearn.datasets import load_iris

data = load_iris()
X, y = data.data, data.target

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score

# Create and train the GBDT model
gbdt_classifier = GradientBoostingClassifier(
    n_estimators=100,
    max_depth=3,
    learning_rate=0.1,
    random_state=42
)
gbdt_classifier.fit(X_train, y_train)

# Evaluate the model
y_pred = gbdt_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')
Accuracy: 1.0000

Referensi

https://developers.google.com/machine-learning/decision-forests/intro-to-gbdt
https://www.analyticsvidhya.com/blog/2021/09/gradient-boosting-algorithm-a-complete-guide-for-beginners/
https://www.youtube.com/watch?v=3CC4N4z3GJc&ab_channel=StatQuestwithJoshStarmer
https://www.youtube.com/watch?v=2xudPOBz-vs&ab_channel=StatQuestwithJoshStarmer
https://www.youtube.com/watch?v=jxuNLH5dXCs&ab_channel=StatQuestwithJoshStarmer
https://www.youtube.com/watch?v=StWY5QWMXCw&ab_channel=StatQuestwithJoshStarmer

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!