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ór | Las losowy | Gradient boosting | HistGradientBoosting |
|---|---|---|---|
| Titanic | 0,815 | 0,821 | 0,820 |
| Breast Cancer | 0,961 | 0,960 | 0,966 |
| Wine | 0,981 | 0,943 | 0,974 |
| Digits 8×8 | 0,976 | 0,966 | 0,971 |
| Diabetes (R²) | 0,431 | 0,413 | 0,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ź
RidgeCVlubLogisticRegression, 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.