0Pricing
Python Academy · Lektion

Modellbewertung und Kreuzvalidierung

Bewerten Sie Modelle mit Accuracy, F1, ROC-AUC und k-facher Kreuzvalidierung.

Modellbewertung und Kreuzvalidierung ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Aufteilung in Training, Validierung und Test

Verwenden Sie eine Aufteilung in drei Teile: Training zum Anpassen des Modells, Validierung zum Abstimmen der Hyperparameter und Test zum Berichten der endgültigen Leistung. Verwenden Sie den Testsatz während der Entwicklung niemals.

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)

Accuracy-Score

accuracy_score ist der Anteil der korrekten Vorhersagen. Verwenden Sie ihn bei ausgeglichenen Klassen; bei unausgeglichenen Daten sind F1 oder AUC vorzuziehen.

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

Precision, Recall und F1

Bei unausgeglichenen Klassen gilt: Precision = TP/(TP+FP), Recall = TP/(TP+FN), F1 = harmonisches Mittel von Precision und Recall.

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

Konfusionsmatrix

Eine Konfusionsmatrix zeigt True Positives, False Positives, True Negatives und False Negatives.

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-Kurve und AUC

roc_auc_score misst die Fläche unter der ROC-Kurve. AUC = 1.0 ist perfekt; 0.5 entspricht einer zufälligen Vorhersage.

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

Regressionsmetriken

Verwenden Sie mean_squared_error (MSE), root_mean_squared_error (RMSE) und r2_score für Regressionsaufgaben.

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-fache Kreuzvalidierung

cross_val_score teilt die Daten in k Teilmengen auf, trainiert auf k-1 davon, evaluiert auf der verbleibenden Teilmenge und wiederholt dies k-mal. Das ist robuster als eine einzelne Aufteilung.

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

Verwenden Sie StratifiedKFold, um sicherzustellen, dass jede Teilmenge dieselbe Klassenverteilung aufweist – entscheidend bei unausgeglichenen Datensätzen.

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

Bias-Varianz-Trade-off

Hoher Bias bedeutet Underfitting (das Modell ist zu einfach). Hohe Varianz bedeutet Overfitting (das Modell ist zu komplex). Die Kreuzvalidierung zeigt, welches Problem vorliegt.

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

Verschachtelte Kreuzvalidierung

Für eine unverzerrte Abstimmung der Hyperparameter und eine unverzerrte Bewertung verwenden Sie verschachtelte Kreuzvalidierung: Die innere Schleife stimmt die Parameter ab, die äußere Schleife evaluiert das Modell.

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

Kalibrierung

Die Wahrscheinlichkeitsschätzungen eines Klassifikators können schlecht kalibriert sein. Verwenden Sie CalibratedClassifierCV für bessere Wahrscheinlichkeitsschätzungen.

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

Kurze Überprüfung

Warum wird zur Bewertung von Modellen die Kreuzvalidierung einer einzelnen Aufteilung in Trainings- und Testdaten vorgezogen?

Zusammenfassung

Verwenden Sie Accuracy für ausgeglichene Probleme und F1/AUC für unausgeglichene. Evaluieren Sie mit cross_val_score und k-facher Kreuzvalidierung, verwenden Sie StratifiedKFold für unausgeglichene Daten und verschachtelte Kreuzvalidierung beim Abstimmen von Hyperparametern, um eine unverzerrte endgültige Schätzung zu erhalten. Verwenden Sie den Testsatz während der Entwicklung niemals.

Häufig gestellte Fragen

Ist die Lektion „Modellbewertung und Kreuzvalidierung“ kostenlos?

Ja — der vollständige Text von „Modellbewertung und Kreuzvalidierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Modellbewertung und Kreuzvalidierung“?

Bewerten Sie Modelle mit Accuracy, F1, ROC-AUC und k-facher Kreuzvalidierung. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Modellbewertung und Kreuzvalidierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Die scikit-learn-API: fit, transform, predict
  2. Lineare Modelle: Regression und Klassifikation
  3. Baumbasierte Modelle: Entscheidungsbäume und Random Forests
  4. Modellbewertung und Kreuzvalidierung
← Zurück zu Python Academy