encyklopedia.run.place

Gradient Boosting

Gradient Boosting (pol. wzmacnianie gradientowe) to technika uczenia maszynowego należąca do rodziny metod boostingu. Polega ona na iteracyjnym budowaniu zespołu słabych modeli (najczęściej drzew decyzyjnych), które kolejno korygują błędy poprzedników poprzez minimalizację wybranej funkcji straty przy użyciu metody gradientu.

Historia

Idea boostingu sięga lat 90. XX wieku, kiedy to Yoav Freund i Robert Schapire wprowadzili algorytm AdaBoost. W 1999 roku Jerome Friedman zaproponował Gradient Boosting Machine (GBM), łącząc koncepcję boosting z optymalizacją gradientową, co umożliwiło stosowanie dowolnych funkcji strat i modeli bazowych.

Zasada działania

Podstawowy schemat algorytmu wygląda następująco:

  1. Inicjalizacja modelu: F₀(x) = arg min_γ Σ L(y_i, γ), gdzie L jest funkcją straty.
  2. Dla kolejnych iteracji m = 1 … M:
    • Obliczenie residuali (negatywnych gradientów) r_i^{(m)} = -∂L(y_i, F_{m‑1}(x_i))/∂F_{m‑1}(x_i).
    • Trening słabego modelu h_m(x) (zazwyczaj drzewo decyzyjne) na danych {(x_i, r_i^{(m)})}.
    • Wyznaczenie optymalnej wielkości kroku γ_m poprzez rozwiązanie γ_m = arg min_γ Σ L(y_i, F_{m‑1}(x_i) + γ·h_m(x_i)).
    • Aktualizacja modelu: F_m(x) = F_{m‑1}(x) + ν·γ_m·h_m(x), przy czym ν (learning rate) jest parametrem regulującym tempo uczenia.
  3. Końcowy model F_M(x) jest sumą wszystkich słabych modeli.

Kluczowe elementy

  • Model bazowy – najczęściej drzewo decyzyjne o ograniczonej głębokości (tzw. stump).
  • Funkcja straty – dobór zależy od zadania: L2 dla regresji, logistyczna dla klasyfikacji binarnej, multinomialna log-loss dla klasyfikacji wieloklasowej.
  • Learning rate (η) – mały współczynnik (np. 0,01‑0,1) zmniejsza ryzyko przeuczenia, ale wymaga większej liczby drzew.
  • Liczba iteracji (M) – kontroluje złożoność modelu; typowo dobiera się metodą walidacji krzyżowej.
  • Subsampling – losowe pobieranie podzbioru danych w każdej iteracji (stochastyczny gradient boosting), co zwiększa różnorodność modeli.

Popularne implementacje

W praktyce najczęściej wykorzystywane są otwarte biblioteki:

  • scikit-learn – GradientBoostingRegressor i GradientBoostingClassifier.
  • XGBoost – rozszerzona wersja z regularizacją L1/L2, obsługą brakujących danych i paralelizacją.
  • LightGBM – oparta na drzewach gradientowych metoda z techniką leaf-wise growth, zoptymalizowana pod kątem dużych zbiorów.
  • CatBoost – specjalizuje się w danych kategorycznych, redukując potrzebę ich ręcznego kodowania.

Zastosowania

Gradient Boosting znajduje zastosowanie w wielu dziedzinach:

  • Finanse – prognozowanie ryzyka kredytowego, wykrywanie oszustw.
  • Marketing – modelowanie churnu, przewidywanie wartości klienta (CLV).
  • Medicina – klasyfikacja obrazów medycznych, prognozowanie terapii.
  • Systemy rekomendacyjne – ranking produktów i treści.
  • Ubezpieczenia – wycena składek i rezerwy techniczne.

Zalety i wady

Zalety Wady
  • Wysoka precyzja – potrafi modelować skomplikowane zależności.
  • Elastyczność – możliwość wyboru dowolnej funkcji straty.
  • Wbudowana regularyzacja (learning rate, subsampling).
  • Obsługa zmiennych mieszanych (liczbowych i kategorycznych).
  • Wysoki koszt obliczeniowy przy dużych zestawach danych.
  • Wrażliwość na nieodpowiednie parametry (przeuczenie przy dużym η).
  • Trudniejsza interpretacja w porównaniu do pojedynczych drzew.

Porównanie z innymi metodami boostingu

W przeciwieństwie do AdaBoost, który zmienia wagi próbek, gradient boosting optymalizuje funkcję straty bezpośrednio w przestrzeni gradientu, co pozwala na użycie bardziej złożonych funkcji kosztu i lepszą wydajność w zadaniach regresji.

Przykładowy kod w Pythonie (biblioteka scikit-learn)

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X, y = load_data()                     # funkcja wymyślona dla przykładu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = GradientBoostingRegressor(
    n_estimators=200,
    learning_rate=0.05,
    max_depth=3,
    subsample=0.8,
    random_state=42
)

model.fit(X_train, y_train)
pred = model.predict(X_test)
print('RMSE:', mean_squared_error(y_test, pred, squared=False))
  

Literatura

  • Friedman, J. H. (2001). Greedy Function Approximation: A Gradient Boosting Machine. Annals of Statistics.
  • Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. Proceedings of the 22nd ACM SIGKDD.
  • Ke, G., Meng, Q., Finley, T., et al. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. Advances in Neural Information Processing Systems.
  • Prokhorenkova, L., Gusev, G., et al. (2018). CatBoost: unbiased boosting with categorical features. arXiv preprint.

Gradient Boosting jest jednym z najpopularniejszych algorytmów uczenia maszynowego, łączącym wysoką dokładność z elastycznością konfiguracji, co czyni go standardowym wyborem w konkursach data‑science oraz w zastosowaniach przemysłowych.