ML Atlas

03 · Nadzorowane · 4 min czytania · Interaktywne · aktualizacja

Jak działa las losowy (random forest) i dlaczego jest lepszy od jednego drzewa?

W skrócie

Las losowy uśrednia setki drzew decyzyjnych uczonych na losowych próbkach danych i losowych podzbiorach cech. Dzięki temu jest dokładny i stabilny.

Co to jest

Las losowy (random forest) to zespół wielu drzew decyzyjnych, z których każde uczy się na innej losowej próbce danych i przy każdym podziale wybiera spośród losowego podzbioru cech. Przewidywanie lasu to głos większości drzew (klasyfikacja) albo średnia ich przewidywań (regresja). Metodę w obecnej postaci opisał Leo Breiman w 2001 roku.

Pojedyncze głębokie drzewo jest jak ekspert z doskonałą pamięcią i słabym osądem: pamięta każdy przypadek treningowy, ale jego reguły zmieniają się dramatycznie przy niewielkiej zmianie danych. Las to rada setek takich ekspertów, z których każdy widział nieco inne dane i patrzył na nieco inne cechy. Ich indywidualne dziwactwa się znoszą, a wspólny sygnał zostaje.

Las losowy od dwóch dekad jest jednym z najbezpieczniejszych wyborów dla danych tabelarycznych: działa dobrze bez strojenia, nie wymaga skalowania cech i rzadko zawodzi spektakularnie.

Mechanizm — dlaczego tak działa

Las łączy dwa źródła losowości. Pierwsze to bagging: każde drzewo dostaje próbkę bootstrapową — tyle samo przykładów, co w zbiorze, ale losowanych ze zwracaniem, więc część się powtarza, a ok. 37% nie trafia do próbki wcale. Drugie to losowanie cech: przy każdym podziale drzewo rozważa tylko m losowo wybranych cech zamiast wszystkich (dla klasyfikacji typowo m ≈ √p).

Dlaczego drugie źródło jest potrzebne? Uśrednianie zmniejsza wariancję tylko wtedy, gdy błędy drzew są różne. Wariancja średniej z B drzew o wariancji σ² i wzajemnej korelacji ρ wynosi ρσ² + (1 − ρ)σ²/B. Drugi składnik znika przy dużym B, ale pierwszy zostaje — korelacja drzew wyznacza podłogę, poniżej której las nie zejdzie. Jeśli jedna cecha jest bardzo silna, wszystkie drzewa z samego baggingu zaczną od niej i będą do siebie podobne. Losowanie cech zmusza część drzew do szukania innych dróg, co obniża ρ.

Drzewa w lesie zwykle rosną bez przycinania. Każde z osobna jest przeuczone (małe obciążenie, duża wariancja), ale uśrednianie zabiera wariancję, zostawiając małe obciążenie. Dlatego dodawanie drzew nie powoduje przeuczenia — wynik stabilizuje się, a jedynym kosztem jest czas obliczeń.

Bonus z bootstrapu: każdy przykład nie trafił do ok. 37% drzew, więc można go ocenić tylko tymi drzewami. Taki błąd poza próbką (out-of-bag, OOB) jest darmowym przybliżeniem walidacji krzyżowej.

Ograniczenia: las nie ekstrapoluje (w regresji nie przewidzi wartości spoza zakresu treningowego), traci czytelność pojedynczego drzewa i bywa duży w pamięci. Wbudowana ważność cech (średni spadek nieczystości) faworyzuje cechy ciągłe i o wielu wartościach; rzetelniejsza jest ważność permutacyjna.

Na przykładzie

Breast Cancer Wisconsin: 569 guzów, 30 cech; trening na 426, test na 143 (podział warstwowy, random_state=0). Pojedyncze pełne drzewo trafia na teście w 90,2% przypadków, a zależnie od ziarna losowości (20 różnych random_state) — od 89,5% do 93,0%. Las 500 drzew: 94,4% na teście, a błąd OOB wskazuje 96,5% — sam z siebie, bez odkładania danych. Uczciwsze porównanie daje powtórzona walidacja krzyżowa (5 części × 10 powtórzeń): drzewo 92,5%, bagging 100 drzew 95,5%, las losowy 95,9%.

Losowanie cech rzeczywiście „rozkorelowuje” drzewa: średnia korelacja przewidywanych prawdopodobieństw między parami drzew wynosi 0,83 przy samym baggingu (wszystkie 30 cech w każdym podziale) i 0,79 przy losowaniu √30 ≈ 5 cech. Jedno drzewo „lasu” daje 88,1%, pięć drzew już 95,8%, a od 50 drzew wynik stoi na 94,4% — drobne wahania przy kilku drzewach to szum 143 przypadków testowych. Według wbudowanej ważności najważniejsze są największy obwód (0,15), największa liczba wklęsłych punktów konturu (0,12) i największy promień (0,12) — trzy cechy mierzące w dużej mierze wielkość i nieregularność guza.

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

  • RandomForestClassifier(n_estimators=500, n_jobs=-1, random_state=0) i RandomForestRegressor; skalowanie cech niepotrzebne.
  • n_estimators: im więcej, tym stabilniej (typowo 300–1000); nie powoduje przeuczenia, tylko kosztuje czas.
  • max_features to główny parametr: domyślnie "sqrt" dla klasyfikacji i 1.0 (wszystkie cechy) dla regresji; warto sprawdzić 0,3–0,5.
  • oob_score=True daje darmowe oszacowanie trafności; do ważności cech używaj permutation_importance na danych walidacyjnych.
  • min_samples_leaf 1–5 wygładza przewidywania i zmniejsza model; max_depth zwykle zostawia się bez limitu.

Najczęstsze pytania

Czy las losowy może się przeuczyć?
Dodawanie drzew nie przeucza lasu — błąd stabilizuje się na poziomie zależnym od korelacji drzew. Las może jednak dopasować szum przez zbyt głębokie drzewa przy bardzo zaszumionych danych; wtedy pomaga większe `min_samples_leaf`. Trafność 100% na treningu jest u lasu normalna i nie oznacza problemu.
Las losowy czy wzmacnianie gradientowe?
Wzmacnianie gradientowe (XGBoost, LightGBM) zwykle osiąga nieco lepsze wyniki po dostrojeniu, ale jest wrażliwsze na hiperparametry. Las jest odporniejszy i dobry „z pudełka”. W praktyce las to świetny pierwszy model, boosting — narzędzie do wyciśnięcia ostatnich punktów procentowych.
Jak interpretować las losowy?
Pojedynczego drzewa nie da się już przeczytać, ale można badać model z zewnątrz: ważność permutacyjna pokazuje, które cechy są potrzebne, wykresy częściowej zależności — jak przewidywanie zmienia się z wartością cechy, a wartości SHAP rozkładają pojedyncze przewidywanie na wkłady cech.

Źródła

  • Breiman L. „Random Forests”, Machine Learning 45(1), 2001.
  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 15.
  • James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., 2021, rozdz. 8.2.2.
  • Strobl C., Boulesteix A.-L., Zeileis A., Hothorn T. „Bias in Random Forest Variable Importance Measures”, BMC Bioinformatics 8, 2007.
  • Dokumentacja scikit-learn, „Forests of randomized trees”: https://scikit-learn.org/stable/modules/ensemble.html#forest

Zobacz też