03 · Nadzorowane · 4 min czytania · Interaktywne · aktualizacja
Na czym polega przycinanie drzewa decyzyjnego i po co się je stosuje?
W skrócie
Przycinanie usuwa z drzewa decyzyjnego gałęzie, które dopasowują szum zamiast reguły. Drzewo jest mniejsze, czytelniejsze i zwykle lepiej uogólnia.
Co to jest
Przycinanie (pruning) to ograniczanie rozmiaru drzewa decyzyjnego tak, by nie dopasowywało szumu w danych treningowych. Rozróżnia się dwa podejścia: przycinanie wstępne (pre-pruning), które zatrzymuje wzrost drzewa według prostych reguł, oraz przycinanie końcowe (post-pruning), które najpierw hoduje duże drzewo, a potem odcina gałęzie niewnoszące wystarczająco wiele.
Drzewo decyzyjne pozostawione samo sobie dzieli dane tak długo, aż każdy liść będzie „czysty” — zawierał przykłady jednej klasy. Często oznacza to liście z jednym przykładem, a więc reguły opisujące jednego konkretnego pasażera o danym wieku i cenie biletu. Taka reguła opisuje jedną osobę, nie zjawisko.
Przycinanie jest dla drzew tym, czym regularyzacja dla regresji: świadomą rezygnacją z idealnego dopasowania do treningu w zamian za lepsze przewidywania na nowych danych.
Mechanizm — dlaczego tak działa
Algorytm budowy drzewa jest zachłanny: w każdym węźle wybiera podział, który najbardziej zmniejsza nieczystość (Gini lub entropię), bez patrzenia w przyszłość. Głębokie węzły zawierają coraz mniej przykładów, więc „najlepszy” podział jest tam coraz częściej dziełem przypadku — przy kilku punktach jakiś próg zawsze je rozdzieli. Drzewo bez ograniczeń ma małe obciążenie i ogromną wariancję: inna próbka danych daje zupełnie inną strukturę.
Przycinanie wstępne to proste hamulce: maksymalna głębokość, minimalna liczba przykładów w liściu, minimalny spadek nieczystości wymagany do podziału. Są tanie, ale krótkowzroczne — podział, który sam niewiele daje, może otworzyć drogę do bardzo dobrych podziałów niżej (klasyczny przykład to XOR), a zatrzymanie go odcina tę możliwość.
Przycinanie końcowe tego problemu nie ma. Standardem jest przycinanie kosztowo-złożonościowe (minimal cost-complexity pruning) z metodologii CART (Breiman i in., 1984). Dla każdego poddrzewa liczy się koszt R_α(T) = R(T) + α·|T|, gdzie R(T) to błąd (lub nieczystość) na treningu, a |T| to liczba liści. Parametr α to „cena” jednego liścia: gałąź zostaje tylko wtedy, gdy poprawia dopasowanie bardziej, niż kosztują jej liście. Rosnące α daje zagnieżdżony ciąg coraz mniejszych drzew — od pełnego aż po sam korzeń. Najlepsze α wybiera się walidacją krzyżową.
Zastrzeżenie: przycięte drzewo nadal jest modelem o wysokiej wariancji, tylko mniejszej. Jeśli zależy ci na trafności, a nie na czytelności, lasy losowe i wzmacnianie gradientowe zwykle wygrywają z najlepiej przyciętym pojedynczym drzewem. Przycinanie ma największy sens, gdy drzewo ma być pokazane ludziom i zrozumiane.
Na przykładzie
Titanic: 891 pasażerów, cechy klasa, płeć, wiek (braki uzupełnione medianą), rodzeństwo/małżonkowie, rodzice/dzieci, cena biletu; trening na 668, test na 223 (podział warstwowy, random_state=0). Pełne drzewo ma 153 liście i głębokość 19; 64 liście zawierają po jednym pasażerze. Na treningu trafia w 98,1%, na teście w 80,3%. Ścieżka przycinania daje 62 kandydackie wartości α; 5-krotna walidacja krzyżowa na treningu wybiera α ≈ 0,005. Przycięte drzewo ma 7 liści i głębokość 3, na treningu 84,3%, na teście 78,9% — i da się je przeczytać: kobiety z 1. i 2. klasy przeżywają, mężczyźni powyżej 13 lat nie, chłopcy z mniej niż trojgiem rodzeństwa tak, a los kobiet z 3. klasy zależy od ceny biletu.
Czy przycinanie pogorszyło model? Na tym jednym podziale różnica to 3 pasażerów na 223 — szum. Uczciwsze porównanie daje powtórzona walidacja krzyżowa (5 części × 10 powtórzeń na całym zbiorze): pełne drzewo 78,1%, przycięte z α = 0,005 — 81,7%. Przycięte drzewo jest więc lepsze i ponad dwadzieścia razy mniejsze. To także lekcja o ocenie modeli: pojedynczy podział na trening i test potrafi wskazać złego zwycięzcę.
Dane: Titanic
W praktyce
- Przycinanie wstępne w
DecisionTreeClassifier:max_depth,min_samples_leaf,min_samples_split,min_impurity_decrease,max_leaf_nodes. - Przycinanie końcowe:
ccp_alpha; kandydatów zwracatree.cost_complexity_pruning_path(X_train, y_train).ccp_alphas. - α wybieraj walidacją krzyżową (
GridSearchCVpoccp_alpha), nigdy na zbiorze testowym. - Typowe dobre wartości przycinania wstępnego:
min_samples_leaf5–50 zależnie od wielkości danych,max_depth3–8 dla drzew do interpretacji. - W lasach losowych zwykle nie przycina się pojedynczych drzew — wariancję zmniejsza uśrednianie; w boostingu drzewa są płytkie z założenia.
Najczęstsze pytania
- Czym różni się przycinanie wstępne od końcowego?
- Wstępne zatrzymuje wzrost drzewa według reguł ustalonych z góry, np. maksymalnej głębokości. Końcowe najpierw buduje pełne drzewo, a potem usuwa gałęzie, które nie są warte swojej złożoności. Końcowe jest zwykle skuteczniejsze, bo nie odrzuca podziałów, których wartość widać dopiero niżej.
- Jak wybrać wartość ccp_alpha?
- Wyznacz ścieżkę przycinania, a potem dla każdej kandydackiej wartości policz wynik walidacji krzyżowej na danych treningowych. Wybierz α z najlepszym wynikiem albo — zgodnie z regułą jednego błędu standardowego — największe α, którego wynik mieści się w jednym błędzie standardowym od najlepszego.
- Czy przycięte drzewo zawsze jest lepsze?
- Nie zawsze na konkretnym zbiorze testowym, ale zwykle w średniej po wielu próbkach. Gdy danych jest bardzo dużo, a zależność skomplikowana, głębsze drzewo może być uzasadnione. Przycinanie zawsze natomiast poprawia czytelność i stabilność struktury.
Źródła
- Breiman L., Friedman J., Olshen R., Stone C. „Classification and Regression Trees”, Wadsworth, 1984.
- James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., 2021, rozdz. 8.1.
- Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 9.2.
- Dokumentacja scikit-learn, „Minimal Cost-Complexity Pruning”: https://scikit-learn.org/stable/modules/tree.html#minimal-cost-complexity-pruning