Modele drzewiaste: drzewa decyzyjne i lasy losowe
Proszę budować i dostrajać modele drzew decyzyjnych oraz lasów zespołowych.
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.
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
- API scikit-learn: fit, transform, predict
- Modele liniowe: regresja i klasyfikacja
- Modele drzewiaste: drzewa decyzyjne i lasy losowe
- Ocena modeli i walidacja krzyżowa