ML Atlas

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ść:

ModelBC czysteBC szum 20%Titanic czysteTitanic szum 20%
Pniak (jeden podział)0,8940,8990,7870,787
Głębokie drzewo0,9280,7360,7850,682
Bagging pniaków0,9190,9170,7870,781
Bagging głębokich drzew0,9570,9100,8180,725
AdaBoost na pniakach0,9710,8840,8000,790
AdaBoost na głębokich drzewach0,9240,7240,7990,684
Gradient boosting, pniaki0,9650,9230,8100,786
Gradient boosting, głębokość 30,9630,8890,8220,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 razu RandomForestClassifier.
  • 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–20 w 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

Zobacz też