ML Atlas

03 · Nadzorowane · 4 min czytania · Interaktywne · aktualizacja

Na czym polega bagging i dlaczego zmniejsza wariancję modelu?

W skrócie

Bagging uczy wiele kopii modelu na losowych próbkach bootstrapowych i uśrednia ich przewidywania. Zmniejsza wariancję niestabilnych modeli, nie obciążenie.

Co to jest

Bagging (bootstrap aggregating) to metoda zespołowa, w której ten sam algorytm trenuje się wiele razy, za każdym razem na innej próbce bootstrapowej danych, a przewidywania wszystkich modeli łączy się przez uśrednienie (regresja) lub głosowanie (klasyfikacja). Zaproponował ją Leo Breiman w 1996 roku.

Próbka bootstrapowa ma tyle samo przykładów co oryginalny zbiór, ale losuje się je ze zwracaniem. Niektóre przykłady trafiają do niej dwa lub trzy razy, inne wcale. Każdy model widzi więc nieco inną wersję rzeczywistości — i popełnia nieco inne błędy.

Intuicja: jeden pomiar wagi na kiepskiej wadze łazienkowej jest niepewny, średnia z dziesięciu pomiarów — dużo mniej. Bagging robi to samo z modelami: zamiast ufać jednemu kapryśnemu drzewu, pyta sto drzew, z których każde uczyło się na trochę innych danych.

Mechanizm — dlaczego tak działa

Błąd modelu na nowych danych można rozłożyć na obciążenie (systematyczne chybianie), wariancję (wrażliwość na konkretną próbkę treningową) i szum nieredukowalny. Uśrednienie B modeli o tym samym obciążeniu nie zmienia obciążenia, ale zmniejsza wariancję. Gdyby modele były niezależne, wariancja średniej spadłaby B razy. W praktyce są skorelowane — uczyły się z tych samych danych — więc wariancja średniej wynosi ρσ² + (1 − ρ)σ²/B, gdzie ρ to korelacja między modelami. Korzyść jest tym większa, im mniej modele są do siebie podobne.

Z tego wynika, kiedy bagging pomaga. Najbardziej zyskują modele niestabilne: o małym obciążeniu i dużej wariancji, jak głębokie drzewa decyzyjne, które przy drobnej zmianie danych wybierają zupełnie inne podziały. Modele stabilne — regresja liniowa, kNN z dużym k — na różnych próbkach bootstrapowych wychodzą prawie identyczne, więc uśrednianie niewiele zmienia. Bagging nie naprawi też modelu zbyt prostego: sto pniaków decyzyjnych (drzew z jednym podziałem) uśrednionych razem to wciąż w przybliżeniu jeden pniak.

Skąd liczba 63,2%? Prawdopodobieństwo, że konkretny przykład nie zostanie wylosowany w żadnym z n losowań, wynosi (1 − 1/n)ⁿ, co przy dużym n dąży do 1/e ≈ 0,368. Każda próbka bootstrapowa zawiera więc średnio ok. 63,2% różnych przykładów. Pozostałe ok. 36,8% to przykłady „poza workiem” (out-of-bag): każdy z nich można ocenić modelami, które go nie widziały, i dostać darmowe oszacowanie błędu testowego.

Bagging to szkielet lasu losowego. Las dodaje jeszcze losowanie cech przy każdym podziale, żeby obniżyć korelację ρ między drzewami. Przeciwieństwem baggingu jest boosting: tam modele uczą się po kolei, każdy poprawiając błędy poprzednich, co zmniejsza głównie obciążenie.

Na przykładzie

Breast Cancer Wisconsin, trening na 426 guzach, test na 143 (podział warstwowy, random_state=0). Losując 1000 próbek bootstrapowych z 426 przykładów, dostajemy średnio 63,25% różnych przykładów na próbkę — zgodnie ze wzorem 1 − (1 − 1/426)⁴²⁶ = 63,26%. Pojedyncze pełne drzewo trafia na teście w 90,2% przypadków; bagging 100 drzew — w 93,7%, a oszacowanie OOB wynosi 96,0%. W powtórzonej walidacji krzyżowej (5 części × 10 powtórzeń) zysk jest wyraźny: 92,5% dla drzewa, 95,5% dla baggingu.

Teraz kontrprzykład. Pniak decyzyjny (jeden podział) ma w tej samej walidacji 89,3%. Bagging 300 pniaków: 91,7% — niewielki zysk, bo pniak ma przede wszystkim duże obciążenie, a nie dużą wariancję. AdaBoost na tych samych 300 pniakach, ucząc je sekwencyjnie na błędach poprzedników, osiąga 96,9%. Bagging leczy niestabilność, boosting — prostotę.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: las losowy na pingwinach (dziób × płetwa): jedno głębokie drzewo trafia 93,1% pingwinów testowych, las od 3 drzew 95,1%, a ocena poza workiem (OOB) przy 100 drzewach daje 97,1% bez odkładania danych.

Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)

W praktyce

  • BaggingClassifier(estimator=DecisionTreeClassifier(), n_estimators=100, oob_score=True, n_jobs=-1) i BaggingRegressor.
  • Dla drzew zwykle lepiej od razu użyć RandomForestClassifier — to bagging z dodatkowym losowaniem cech.
  • max_samples (np. 0,5–1,0) i bootstrap_features=True dają dodatkową różnorodność; wariant bez zwracania to tzw. pasting.
  • Liczba modeli: zwykle 50–500; wynik stabilizuje się, a dalsze modele kosztują tylko czas.
  • Baguj modele o dużej wariancji (głębokie drzewa, sieci neuronowe trenowane od różnych inicjalizacji), nie stabilne modele liniowe.

Najczęstsze pytania

Czym różni się bagging od lasu losowego?
Las losowy to bagging drzew decyzyjnych z jedną modyfikacją: przy każdym podziale drzewo wybiera tylko spośród losowego podzbioru cech. Dzięki temu drzewa są mniej skorelowane i uśrednianie działa skuteczniej. Bagging jest ogólniejszy — można nim opakować dowolny model.
Czym różni się bagging od boostingu?
W baggingu modele uczą się niezależnie i równolegle na losowych próbkach, a potem się je uśrednia — zmniejsza to wariancję. W boostingu modele uczą się po kolei, każdy skupiając się na błędach poprzednich — zmniejsza to obciążenie. Bagging dobrze znosi zaszumione etykiety, boosting jest na nie wrażliwszy.
Czy bagging może pogorszyć model?
Rzadko i nieznacznie. Każdy model widzi tylko ok. 63% różnych przykładów, więc pojedynczo jest trochę słabszy; dla stabilnych modeli uśrednianie tego nie rekompensuje. Dla niestabilnych modeli zysk z redukcji wariancji niemal zawsze przeważa.

Źródła

  • Breiman L. „Bagging Predictors”, Machine Learning 24(2), 1996.
  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 8.7.
  • James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., 2021, rozdz. 8.2.1.
  • Dokumentacja scikit-learn, „Bagging meta-estimator”: https://scikit-learn.org/stable/modules/ensemble.html#bagging

Zobacz też