Python Academy · Lekcja

Modele drzewiaste: drzewa decyzyjne i lasy losowe

Proszę budować i dostrajać modele drzew decyzyjnych oraz lasów zespołowych.

Lekcja 3 z 413 kroki

Modele drzewiaste: drzewa decyzyjne i lasy losowe to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Koncepcje drzew decyzyjnych

Drzewo decyzyjne dzieli dane na podzbiory, zadając serię pytań binarnych. Każdy węzeł wewnętrzny określa próg cechy, a każdy liść zawiera predykcję.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print("Depth:", model.get_depth())
print("Leaves:", model.get_n_leaves())

DecisionTreeClassifier

Najważniejsze hiperparametry to: max_depth, min_samples_split i min_samples_leaf. Głębsze drzewa ulegają przeuczeniu, a płytsze — niedouczeniu.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = DecisionTreeClassifier(max_depth=5, min_samples_leaf=5)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

DecisionTreeRegressor

Drzewa decyzyjne obsługują również regresję, przewidując średnią wartość zmiennej docelowej w każdym liściu.

from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error

X, y = make_regression(noise=15, random_state=0)
model = DecisionTreeRegressor(max_depth=4).fit(X, y)
print("RMSE:", mean_squared_error(y, model.predict(X))**0.5)

Ważność cech

model.feature_importances_ podaje względną ważność każdej cechy na podstawie redukcji nieczystości.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np

X, y = load_iris(return_X_y=True)
feature_names = load_iris().feature_names
model = DecisionTreeClassifier().fit(X, y)
for name, imp in sorted(zip(feature_names, model.feature_importances_), key=lambda x: -x[1]):
    print(f"{name}: {imp:.3f}")

Przegląd lasów losowych

Las losowy trenuje wiele nieskorelowanych drzew decyzyjnych na próbkach bootstrapowych, a następnie uśrednia ich predykcje — zmniejszając wariancję bez zwiększania obciążenia.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = RandomForestClassifier(n_estimators=100, random_state=0)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

RandomForestRegressor

Lasy losowe równie dobrze sprawdzają się w regresji.

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import r2_score

X, y = make_regression(noise=10, random_state=0)
model = RandomForestRegressor(n_estimators=100, random_state=0).fit(X, y)
print("R²:", r2_score(y, model.predict(X)))

Wynik out-of-bag

Należy ustawić oob_score=True, aby uzyskać bez dodatkowego zbioru testowego wynik walidacji na podstawie próbek nieuwzględnionych w próbkach bootstrapowych poszczególnych drzew.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=0).fit(X, y)
print("OOB score:", model.oob_score_)

Wzmacnianie gradientowe

Wzmacnianie gradientowe (GBM) trenuje drzewa sekwencyjnie, a każde z nich koryguje błędy poprzedniego. Często zapewnia większą dokładność niż lasy losowe, ale trenuje się wolniej.

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = GradientBoostingClassifier(n_estimators=100).fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

XGBoost / LightGBM

XGBoost i LightGBM to zoptymalizowane biblioteki do wzmacniania gradientowego — są szybsze, lepiej skalowalne i często dokładniejsze niż GBM z biblioteki sklearn.

# pip install xgboost lightgbm
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

xgb = XGBClassifier(n_estimators=100, eval_metric="logloss").fit(X_tr, y_tr)
print("XGB acc:", xgb.score(X_te, y_te))

Dostrajanie n_estimators

Większa liczba drzew w lesie losowym zmniejsza wariancję — do pewnego momentu — bez powodowania przeuczenia. Do znalezienia optymalnej liczby należy użyć krzywej walidacji.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(random_state=0)
for n in [10, 50, 100, 200]:
    scores = cross_val_score(RandomForestClassifier(n_estimators=n, random_state=0), X, y, cv=5)
    print(f"n={n}: {scores.mean():.3f}")

Wizualizacja drzewa decyzyjnego

Należy użyć sklearn.tree.plot_tree lub export_text, aby sprawdzić, czego nauczyło się drzewo.

from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=2).fit(X, y)
print(export_text(model, feature_names=load_iris().feature_names.tolist()))

Szybkie sprawdzenie

W jaki sposób las losowy ogranicza przeuczenie w porównaniu z pojedynczym drzewem decyzyjnym?

Podsumowanie

Drzewa decyzyjne dzielą dane według progów cech i przewidują wartości zapisane w liściach. Parametr max_depth służy do kontrolowania przeuczenia. Lasy losowe uśredniają wyniki wielu drzew, zmniejszając wariancję. Wzmacnianie gradientowe trenuje drzewa sekwencyjnie, zapewniając wysoką dokładność. W środowisku produkcyjnym preferowane są XGBoost lub LightGBM.

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
76
Lekcje
320

Często zadawane pytania

Czy lekcja „Modele drzewiaste: drzewa decyzyjne i lasy losowe” jest bezpłatna?

Tak — pełny tekst „Modele drzewiaste: drzewa decyzyjne i lasy losowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Modele drzewiaste: drzewa decyzyjne i lasy losowe”?

Proszę budować i dostrajać modele drzew decyzyjnych oraz lasów zespołowych. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Modele drzewiaste: drzewa decyzyjne i lasy losowe”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. API scikit-learn: fit, transform, predict
  2. Modele liniowe: regresja i klasyfikacja
  3. Modele drzewiaste: drzewa decyzyjne i lasy losowe
  4. Ocena modeli i walidacja krzyżowa
← Powrót do Python Academy