Python Academy · Les

Modelevaluatie en cross-validatie

Evalueer modellen met accuracy, F1, ROC-AUC en k-fold-CV.

Les 4 van 413 stappen

Modelevaluatie en cross-validatie is een gratis Python Academy-les op CoddyKit. Dit is les 4 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.

Splitsing in training, validatie en test

Gebruik een driedelige splitsing: training om het model aan te passen, validatie om hyperparameters af te stemmen en test om de uiteindelijke prestaties te rapporteren. Gebruik de testset nooit tijdens de ontwikkeling.

from sklearn.model_selection import train_test_split
import numpy as np

X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)

X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)

Nauwkeurigheidsscore

accuracy_score is het aandeel correcte voorspellingen. Gebruik deze voor evenwichtige klassen; kies bij onevenwichtige gegevens liever F1 of AUC.

from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
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 = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))

Precisie, sensitiviteit en F1

Voor onevenwichtige klassen geldt: precisie = TP/(TP+FP), sensitiviteit = TP/(TP+FN), F1 = het harmonische gemiddelde van precisie en sensitiviteit.

from sklearn.metrics import precision_score, recall_score, f1_score, classification_report

# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each class

Verwarringsmatrix

Een verwarringsmatrix toont terecht-positieven, fout-positieven, terecht-negatieven en fout-negatieven.

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
#  [FN TP]]

ROC-curve en AUC

roc_auc_score meet het gebied onder de ROC-curve. AUC = 1,0 is perfect; 0,5 = willekeurig.

from sklearn.metrics import roc_auc_score, roc_curve

y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))

fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curve

Regressiemaatstaven

Gebruik mean_squared_error (MSE), root_mean_squared_error (RMSE) en r2_score voor regressietaken.

from sklearn.metrics import mean_squared_error, r2_score

y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))

k-voudige kruisvalidatie

cross_val_score deelt gegevens op in k delen, traint op k-1 delen, evalueert op 1 deel en herhaalt dit k keer. Dit is robuuster dan één splitsing.

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")

StratifiedKFold

Gebruik StratifiedKFold om ervoor te zorgen dat elk deel dezelfde klassenverdeling heeft — cruciaal voor onevenwichtige gegevensverzamelingen.

from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())

Afweging tussen vertekening en variantie

Hoge vertekening = underfitting (model te eenvoudig). Hoge variantie = overfitting (model te complex). Kruisvalidatie laat zien welk probleem je hebt.

# Underfitting: low train score AND low val score
# → increase model complexity, add features

# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data

from sklearn.model_selection import validation_curve
import numpy as np

train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))

Geneste kruisvalidatie

Gebruik geneste kruisvalidatie voor een onbevooroordeelde afstemming van hyperparameters én evaluatie: de binnenste lus stemt af en de buitenste lus evalueert.

from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())

Kalibratie

De waarschijnlijkheidsschattingen van een classificatiemodel zijn mogelijk slecht gekalibreerd. Gebruik CalibratedClassifierCV voor betere waarschijnlijkheidsschattingen.

from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
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)

cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))

Korte controle

Waarom heeft kruisvalidatie de voorkeur boven één splitsing in training en test voor het evalueren van modellen?

Samenvatting

Gebruik nauwkeurigheid voor evenwichtige problemen en F1/AUC voor onevenwichtige problemen. Evalueer met k-voudige cross_val_score, gebruik StratifiedKFold voor onevenwichtige gegevens en gebruik geneste kruisvalidatie bij het afstellen van hyperparameters voor een onbevooroordeelde eindschatting. Kijk tijdens de ontwikkeling nooit naar de testset.

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 “Modelevaluatie en cross-validatie” gratis?

Ja — de volledige tekst van “Modelevaluatie en cross-validatie” 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 “Modelevaluatie en cross-validatie”?

Evalueer modellen met accuracy, F1, ROC-AUC en k-fold-CV. 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 4 van 4.

Hoe lang duurt de les “Modelevaluatie en cross-validatie”?

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