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.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
RandomForestClassifier(n_estimators=500, n_jobs=-1, random_state=0)iRandomForestRegressor; skalowanie cech niepotrzebne.n_estimators: im więcej, tym stabilniej (typowo 300–1000); nie powoduje przeuczenia, tylko kosztuje czas.max_featuresto główny parametr: domyślnie"sqrt"dla klasyfikacji i1.0(wszystkie cechy) dla regresji; warto sprawdzić 0,3–0,5.oob_score=Truedaje darmowe oszacowanie trafności; do ważności cech używajpermutation_importancena danych walidacyjnych.min_samples_leaf1–5 wygładza przewidywania i zmniejsza model;max_depthzwykle 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