ML Atlas

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ę.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: drzewo decyzyjne na pasażerach Titanica: suwak głębokości rozbudowuje drzewo, a różnica trafności między treningiem i testem rośnie.

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 zwraca tree.cost_complexity_pruning_path(X_train, y_train).ccp_alphas.
  • α wybieraj walidacją krzyżową (GridSearchCV po ccp_alpha), nigdy na zbiorze testowym.
  • Typowe dobre wartości przycinania wstępnego: min_samples_leaf 5–50 zależnie od wielkości danych, max_depth 3–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

Zobacz też