Python Academy · Les

Boommodellen: beslisbomen en random forests

Bouw beslisbomen en ensemblemodellen met forests en stem ze af.

Les 3 van 413 stappen

Boommodellen: beslisbomen en random forests is een gratis Python Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Concepten van beslisbomen

Een beslisboom splitst gegevens op in deelverzamelingen door een reeks binaire vragen te stellen. Elk intern knooppunt is een drempelwaarde voor een kenmerk; elk blad is een voorspelling.

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

Belangrijke hyperparameters zijn max_depth, min_samples_split en min_samples_leaf. Diepere bomen raken overfit; ondiepere bomen raken underfit.

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

Beslisbomen kunnen ook voor regressie worden gebruikt door in elk blad de gemiddelde doelwaarde te voorspellen.

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)

Belang van kenmerken

model.feature_importances_ geeft het relatieve belang van elk kenmerk op basis van de afname van onzuiverheid.

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}")

Overzicht van Random Forest

Een Random Forest traint veel gedecorreleerde beslisbomen op bootstrapsteekproeven en middelt hun voorspellingen — waardoor de variantie afneemt zonder de bias te verhogen.

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

Random forests werken net zo goed voor regressie.

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)))

Out-of-bag-score

Stel oob_score=True in voor een gratis validatiescore met voorbeelden die niet in de bootstrapsteekproef van elke boom zitten. Een aparte testset is niet nodig.

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_)

Gradiëntversterking

Gradiëntversterking (GBM) traint bomen na elkaar, waarbij elke boom de fouten van de vorige corrigeert. Dit is vaak nauwkeuriger dan Random Forests, maar het trainen duurt langer.

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 en LightGBM zijn geoptimaliseerde bibliotheken voor gradiëntversterking — sneller, beter schaalbaar en vaak nauwkeuriger dan de GBM van 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))

n_estimators afstellen

Meer bomen in een Random Forest verlagen de variantie (tot op zekere hoogte) zonder overfitting te veroorzaken. Gebruik een validatiecurve om het optimale aantal te vinden.

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}")

Een beslisboom visualiseren

Gebruik sklearn.tree.plot_tree of export_text om te bekijken wat de boom heeft geleerd.

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()))

Korte controle

Hoe vermindert Random Forest overfitting vergeleken met één beslisboom?

Samenvatting

Beslisbomen splitsen gegevens op basis van drempelwaarden voor kenmerken en voorspellen met bladwaarden. Stem max_depth af om overfitting te beheersen. Random Forests middelen veel bomen voor een lagere variantie. Gradiëntversterking traint bomen na elkaar voor een hoge nauwkeurigheid. Kies in productie bij voorkeur XGBoost of LightGBM.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “Boommodellen: beslisbomen en random forests” gratis?

Ja — de volledige tekst van “Boommodellen: beslisbomen en random forests” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “Boommodellen: beslisbomen en random forests”?

Bouw beslisbomen en ensemblemodellen met forests en stem ze af. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Boommodellen: beslisbomen en random forests”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De scikit-learn-API: fit, transform, predict
  2. Lineaire modellen: regressie en classificatie
  3. Boommodellen: beslisbomen en random forests
  4. Modelevaluatie en cross-validatie
← Terug naar Python Academy