03 · Nadzorowane · 5 min czytania · aktualizacja
Czym różni się bagging od boostingu i kiedy który stosować?
W skrócie
Bagging uśrednia niezależne, złożone modele i zmniejsza wariancję. Boosting składa po kolei proste modele i zmniejsza obciążenie, ale łatwiej uczy się szumu.
Co to jest
Bagging trenuje wiele modeli niezależnie, każdy na losowej próbce bootstrapowej, i uśrednia ich przewidywania, co zmniejsza wariancję; boosting trenuje modele po kolei, każdy skupiony na błędach poprzednich, co zmniejsza obciążenie. Bagging potrzebuje modeli złożonych i niestabilnych (głębokich drzew), boosting — prostych i stabilnych (płytkich drzew, pniaków).
Najprościej: bagging to komisja niezależnych ekspertów, z których każdy jest bystry, ale kapryśny, a głosowanie usuwa ich kaprysy. Boosting to zespół, w którym każdy kolejny członek dostaje listę spraw, z którymi poprzednicy sobie nie poradzili.
Z baggingu wywodzi się las losowy, z boostingu — AdaBoost, gradient boosting, XGBoost, LightGBM i CatBoost.
Mechanizm — dlaczego tak działa
Błąd = obciążenie² + wariancja + szum. Model o dużej wariancji zmienia się mocno przy zmianie próbki treningowej; model o dużym obciążeniu systematycznie mija się z prawdą, niezależnie od próbki. Te dwa problemy wymagają odwrotnych lekarstw.
Bagging. Średnia z B modeli o wariancji σ² i wzajemnej korelacji ρ ma wariancję ρσ² + (1 − ρ)σ²/B. Obciążenie średniej jest takie samo jak pojedynczego modelu. Bagging nie zrobi więc z modelu za prostego modelu dobrego: uśrednione pniaki nadal są pniakami. Za to z modelu przeuczonego, ale nieobciążonego, zrobi model dobry. Modele uczą się niezależnie, więc trening łatwo zrównoleglić.
Boosting. Każdy kolejny model dopasowuje się do tego, czego suma poprzednich jeszcze nie wyjaśnia: w AdaBoost przez zwiększanie wag źle sklasyfikowanych przykładów, w gradient boostingu przez dopasowanie do gradientu straty (dla błędu kwadratowego — do reszt). Suma wielu pniaków może odtworzyć złożoną funkcję, więc obciążenie spada. Ceną jest sekwencyjność i ryzyko przeuczenia przy zbyt wielu krokach.
Szum w etykietach. Boosting z definicji skupia się na przykładach, których nie umie przewidzieć — a przykłady ze złą etykietą są właśnie takie. AdaBoost z wykładniczą stratą daje im coraz większe wagi. Dietterich (2000) pokazał, że przy losowym szumie etykiet bagging zyskuje względem boostingu. Ważniejsza od rodzaju zespołu okazuje się jednak złożoność modelu bazowego: głębokie drzewo zapamiętuje każdą złą etykietę, a pniak nie ma na to miejsca.
Kiedy który. Jeśli pojedynczy model jest niestabilny i przeuczony — bagging. Jeśli jest stabilny, ale za prosty — boosting. Na czystych danych dobrze strojony boosting zwykle wygrywa, na zaszumionych bagging jest bezpieczniejszy.
Na przykładzie
Breast Cancer Wisconsin i Titanic, powtarzana walidacja krzyżowa 5 × 5 (random_state=0), po 200 modeli w każdym zespole. W wersji „szum” losowo odwróciłem 20% etykiet w danych treningowych; zbiór testowy zostaje czysty. Trafność:
| Model | BC czyste | BC szum 20% | Titanic czyste | Titanic szum 20% |
|---|---|---|---|---|
| Pniak (jeden podział) | 0,894 | 0,899 | 0,787 | 0,787 |
| Głębokie drzewo | 0,928 | 0,736 | 0,785 | 0,682 |
| Bagging pniaków | 0,919 | 0,917 | 0,787 | 0,781 |
| Bagging głębokich drzew | 0,957 | 0,910 | 0,818 | 0,725 |
| AdaBoost na pniakach | 0,971 | 0,884 | 0,800 | 0,790 |
| AdaBoost na głębokich drzewach | 0,924 | 0,724 | 0,799 | 0,684 |
| Gradient boosting, pniaki | 0,965 | 0,923 | 0,810 | 0,786 |
| Gradient boosting, głębokość 3 | 0,963 | 0,889 | 0,822 | 0,770 |
Na czystych danych widać podręcznikową regułę: bagging pomaga głębokim drzewom (0,928 → 0,957), prawie nic nie daje pniakom; AdaBoost odwrotnie — świetny na pniakach, bezużyteczny na głębokich drzewach, które już na starcie nie mają błędów do poprawiania. Z szumem AdaBoost na pniakach traci na Breast Cancer 8,7 punktu, a bagging pniaków tylko 0,2. Ale na Titanicu bagging głębokich drzew stracił aż 9,3 punktu, a AdaBoost na pniakach wypadł z szumem najlepiej — winne są drzewa, które zapamiętują złe etykiety, a nie samo uśrednianie.
Rozkład błędu na zbiorze Diabetes (50 losowych próbek treningowych po 200 pacjentów, stały zbiór testowy 142 pacjentów, błąd średniokwadratowy): głębokie drzewo ma wariancję 2946, a bagging tych drzew — 204, przy prawie niezmienionym obciążeniu (3593 → 3349, wartości z szumem nieusuwalnym). Gradient boosting na pniakach ma najniższe obciążenie (3271) przy wariancji 169 i najniższy łączny błąd: 3440 wobec 3552 dla baggingu.
Dane: Titanic Breast Cancer Wisconsin (diagnostyka raka piersi) Diabetes (progresja cukrzycy)
W praktyce
Reguła wyboru:
- Model bazowy przeucza się i skacze między próbkami → bagging:
BaggingClassifier(DecisionTreeClassifier(), n_estimators=200, n_jobs=-1)albo od razuRandomForestClassifier. - Model bazowy jest za prosty → boosting płytkich drzew:
HistGradientBoostingClassifier(max_depth=3, learning_rate=0.05, early_stopping=True). - Podejrzewasz dużo błędnych etykiet → bagging albo boosting z małym współczynnikiem uczenia i płytkimi drzewami; unikaj AdaBoost (
AdaBoostClassifier) z wykładniczą stratą. - Ogranicz złożoność modelu bazowego przy szumie:
min_samples_leaf=5–20w drzewach baggingu działa jak filtr na pojedyncze złe etykiety. - Bagging daje darmową ocenę poza próbką:
BaggingClassifier(..., oob_score=True).oob_score_; boosting stroisz wczesnym zatrzymaniem na zbiorze walidacyjnym.
Najczęstsze pytania
- Czy las losowy to bagging?
- Tak, z jednym dodatkiem: przy każdym podziale drzewo wybiera spośród losowego podzbioru cech. To obniża korelację drzew (ρ we wzorze na wariancję), więc uśrednianie działa jeszcze lepiej niż w czystym baggingu.
- Czy boosting można zrównoleglić?
- Kolejne drzewa muszą powstawać po kolei, bo każde zależy od błędów poprzednich. Biblioteki zrównoleglają za to budowę pojedynczego drzewa: szukanie najlepszego podziału po różnych cechach i fragmentach danych liczy się na wielu rdzeniach.
- Czy bagging może pogorszyć model?
- Rzadko i nieznacznie: dla modeli stabilnych (regresja liniowa, kNN z dużym k, pniaki) daje niemal ten sam model, tylko wolniej. Każdy model widzi ok. 63% unikalnych przykładów, więc dla bardzo małych zbiorów pojedynczy model może być minimalnie lepszy.
Źródła
- Breiman L. „Bagging Predictors”, Machine Learning 24(2), 1996, s. 123–140.
- Freund Y., Schapire R. E. „A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting”, Journal of Computer and System Sciences 55(1), 1997, s. 119–139.
- Dietterich T. G. „An Experimental Comparison of Three Methods for Constructing Ensembles of Decision Trees: Bagging, Boosting, and Randomization”, Machine Learning 40(2), 2000, s. 139–157.
- Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., Springer 2009, rozdz. 8.7 i 10.
- Dokumentacja scikit-learn, „Ensembles: Gradient boosting, random forests, bagging, voting, stacking”: https://scikit-learn.org/stable/modules/ensemble.html