ML Atlas

03 · Nadzorowane · 5 min czytania · aktualizacja

Las losowy czy gradient boosting — który model wybrać?

W skrócie

Gradient boosting po dostrojeniu bywa o włos dokładniejszy, las losowy jest odporniejszy na złe ustawienia. Na małych danych różnice giną zwykle w szumie.

Co to jest

Las losowy wybierz, gdy chcesz mocnego modelu bez strojenia i bez ryzyka katastrofy; gradient boosting — gdy masz czas na walidację hiperparametrów i zależy Ci na ostatnim punkcie procentowym, zwłaszcza na dużych danych tabelarycznych. Na małych zbiorach referencyjnych żaden z nich nie wygrywa systematycznie: w naszym porównaniu boosting był lepszy na dwóch zbiorach, las na dwóch, a na piątym oba przegrały ze zwykłą regresją liniową.

Oba modele składają się z setek drzew decyzyjnych, ale łączą je odwrotnie. Las losowy uczy głębokie drzewa niezależnie i uśrednia ich głosy. Boosting dokłada płytkie drzewa po kolei, a każde kolejne poprawia błędy sumy poprzednich.

Dlatego pytanie „który lepszy” sprowadza się do pytania, czego w Twoim problemie jest więcej: niestabilności (wariancji), którą leczy uśrednianie, czy niedopasowania (obciążenia), które leczy sekwencyjne poprawianie.

Mechanizm — dlaczego tak działa

Las: redukcja wariancji. Każde drzewo lasu jest przeuczone, ale przeuczone inaczej, bo widziało inną próbkę bootstrapową i inne losowe cechy. Średnia z wielu takich drzew ma prawie to samo obciążenie co jedno drzewo, a dużo mniejszą wariancję. Dodawanie drzew nie przeucza lasu, tylko stabilizuje wynik. Domyślne ustawienia są zwykle bliskie optymalnych.

Boosting: redukcja obciążenia. Pojedyncze płytkie drzewo jest za proste (duże obciążenie). Boosting dodaje je krokami, każde dopasowane do gradientu straty, czyli do tego, czego model jeszcze nie umie. Z każdym drzewem obciążenie spada, ale od pewnego momentu model zaczyna dopasowywać szum. Liczba drzew, współczynnik uczenia i głębokość są ze sobą sprzężone i trzeba je stroić razem, najlepiej z wczesnym zatrzymaniem.

Dlaczego boosting częściej wygrywa w benchmarkach. Przy wielu danych i złożonych zależnościach redukcja obciążenia daje więcej niż redukcja wariancji. Do tego nowoczesne implementacje (histogramy, regularyzacja liści, obsługa braków) są bardzo dopracowane. Duże porównania — Caruana i Niculescu-Mizil (2006), Grinsztajn i in. (2022) — stawiają boosting na szczycie dla danych tabelarycznych, z lasem tuż za nim.

Dlaczego las wygrywa na małych, zaszumionych danych. Gdy danych jest mało, a sygnał słaby, boosting szybko zaczyna gonić szum, a jego przewaga z obniżania obciążenia nie ma się z czego zmaterializować. Las z definicji uśrednia i jest pod tym względem bezpieczniejszy.

Ograniczenie wspólne. Oba modele są sumą schodków, więc nie ekstrapolują poza zakres danych treningowych i źle modelują gładkie zależności liniowe. Gdy prawdziwa zależność jest bliska liniowej, prosty model liniowy potrafi wygrać z oboma.

Na przykładzie

Powtarzana walidacja krzyżowa 5 × 5 (random_state=0), ustawienia domyślne scikit-learn: las 500 drzew, klasyczny GradientBoostingClassifier (100 drzew głębokości 3) i histogramowy HistGradientBoostingClassifier. Klasyfikacja — trafność, Diabetes — R².

ZbiórLas losowyGradient boostingHistGradientBoosting
Titanic0,8150,8210,820
Breast Cancer0,9610,9600,966
Wine0,9810,9430,974
Digits 8×80,9760,9660,971
Diabetes (R²)0,4310,4130,392

Odchylenia standardowe między częściami walidacji wynoszą 1–3 punkty procentowe na Titanicu i Breast Cancer, więc tam różnice są w granicach szumu. Na Wine (178 win) klasyczny boosting traci prawie 4 punkty — przy tak małym zbiorze las jest po prostu stabilniejszy.

Diabetes pokazuje, że strojenie pomaga obu modelom: las z max_features=0.33 i min_samples_leaf=5 osiąga R² 0,459, boosting ze współczynnikiem uczenia 0,03, 300 drzewami głębokości 2 i podpróbkowaniem 0,8 — 0,463. Obie konfiguracje wybrałem ręcznie, więc są lekko optymistyczne. A zwykła regresja grzbietowa (RidgeCV) daje 0,489 — więcej niż którykolwiek zespół drzew, bo zależność postępu choroby od BMI i ciśnienia jest tu w przybliżeniu liniowa.

Wrażliwość na złe ustawienia: boosting ze współczynnikiem uczenia 1,0, 1000 drzewami głębokości 5 spada na Digits do 0,919 z odchyleniem 0,124 — w niektórych częściach walidacji model się rozsypał. Las da się zepsuć tylko celowo: drzewa o głębokości 2 dają na Digits 0,824.

Dane: Titanic Breast Cancer Wisconsin (diagnostyka raka piersi) Wine (wina z Piemontu) Digits (ręcznie pisane cyfry 8×8) Diabetes (progresja cukrzycy)

W praktyce

Reguła wyboru:

  • Pierwszy model na nowych danych tabelarycznych → las: RandomForestClassifier(n_estimators=500, n_jobs=-1, random_state=0); dostajesz mocny punkt odniesienia i darmową ocenę OOB (oob_score=True).
  • Masz tysiące wierszy i czas na strojenie → boosting z wczesnym zatrzymaniem: HistGradientBoostingClassifier(learning_rate=0.05, max_iter=2000, early_stopping=True, validation_fraction=0.1).
  • Setki wierszy i dużo szumu → zacznij od lasu i modelu liniowego; boosting tylko z małym współczynnikiem uczenia (0,01–0,05) i płytkimi drzewami.
  • Zależność wygląda na liniową albo trzeba ekstrapolować → sprawdź RidgeCV lub LogisticRegression, zanim uwierzysz drzewom.
  • Porównuj modele na tych samych podziałach: cross_val_score(model, X, y, cv=RepeatedStratifiedKFold(n_splits=5, n_repeats=5, random_state=0)) i patrz na odchylenie, nie tylko na średnią.
  • Nie musisz wybierać: średnia prawdopodobieństw lasu i boostingu (VotingClassifier(voting="soft")) bywa lepsza od obu.

Najczęstsze pytania

Czy gradient boosting zawsze jest dokładniejszy od lasu losowego?
Nie. Wygrywa częściej w dużych benchmarkach, zwłaszcza na większych zbiorach i po strojeniu, ale na małych danych różnice bywają w granicach szumu albo przechylają się na stronę lasu. Rozstrzyga walidacja krzyżowa na Twoich danych, nie reputacja modelu.
Który model szybciej się trenuje?
Las da się trenować równolegle (każde drzewo niezależnie), boosting jest z natury sekwencyjny. Histogramowe implementacje boostingu (LightGBM, XGBoost, `HistGradientBoosting`) są jednak tak wydajne, że na dużych danych często są szybsze od lasu. Klasyczny `GradientBoostingClassifier` jest najwolniejszy.
Który jest odporniejszy na przeuczenie?
Las: więcej drzew go nie przeucza, a domyślne ustawienia są bezpieczne. Boosting przeucza się przy zbyt wielu drzewach lub zbyt dużym współczynniku uczenia, dlatego wymaga wczesnego zatrzymania i walidacji.

Źródła

  • Breiman L. „Random Forests”, Machine Learning 45(1), 2001, s. 5–32.
  • Friedman J. H. „Greedy Function Approximation: A Gradient Boosting Machine”, Annals of Statistics 29(5), 2001, s. 1189–1232.
  • Caruana R., Niculescu-Mizil A. „An Empirical Comparison of Supervised Learning Algorithms”, ICML 2006.
  • Grinsztajn L., Oyallon E., Varoquaux G. „Why do tree-based models still outperform deep learning on typical tabular data?”, NeurIPS 2022 (Datasets and Benchmarks Track).
  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., Springer 2009, rozdz. 10 i 15.

Zobacz też