Sklearn-Modellbewertung und -optimierung

Die Bewertung und das Tuning von Machine-Learning-Modellen sind entscheidende Schritte, um die Generalisierungsfähigkeit und Vorhersagegenauigkeit von Modellen sicherzustellen.

Durch geeignete Bewertungsmetriken und Tuning-Methoden kann die Modellleistung effektiv verbessert werden, wodurch das Risiko von Overfitting oder Underfitting vermieden wird.

In diesem Kapitel werden ausführlich Kreuzvalidierung, Grid Search, Random Search, Methoden zur Modellbewertung und weitere Inhalte vorgestellt.


1. Kreuzvalidierung

Das Konzept der Kreuzvalidierung vorstellen

Kreuzvalidierung ist eine Technik zur Bewertung der Modellleistung. Sie teilt den Datensatz in mehrere Teilmengen (Folds) auf und trainiert und testet das Modell mehrfach, um stabilere und zuverlässigere Bewertungsergebnisse zu erhalten.

Kreuzvalidierung hilft zu erkennen, ob Overfitting vorliegt, und kann die Generalisierungsfähigkeit des Modells genauer bewerten.

Zu den gängigen Kreuzvalidierungsmethoden gehören:

  • K-fache Kreuzvalidierung: Teile die Daten in K Folds auf, wähle nacheinander einen Fold als Testset, verwende die anderen K-1 Folds als Trainingsset, wiederhole dies K-mal und berechne schließlich den Durchschnitt der K Ergebnisse.
  • Leave-One-Out-Kreuzvalidierung (LOOCV): Behalte jeweils nur einen Datenpunkt als Testset und den Rest als Trainingsset. Diese Methode ist sehr zeitaufwendig, kann aber für kleine Datensätze verwendet werden.
  • Stratifizierte K-fache Kreuzvalidierung: Stelle bei der K-fachen Kreuzvalidierung sicher, dass die Klassenverteilung in jedem Fold der des gesamten Datensatzes ähnelt; geeignet bei Klassenungleichgewicht.

scikit-learn bietet mehrere Kreuzvalidierungsmethoden, wie cross_val_score und cross_val_predict, die uns helfen können, Kreuzvalidierung effizient durchzuführen.

cross_val_score zur Durchführung der K-fachen Kreuzvalidierung verwenden

Die Funktion cross_val_score wird verwendet, um eine K-fache Kreuzvalidierung durchzuführen und den Score jedes Folds zurückzugeben, um uns bei der Bewertung der Stabilität und Leistung des Modells zu helfen.

Verwende cross_val_score, um eine K-fache Kreuzvalidierung durchzuführen:

Beispiel

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# Daten laden
data = load_iris()
X, y = data.data, data.target

# Modell erstellen
model = RandomForestClassifier()

# K-fache Kreuzvalidierung durchführen
scores = cross_val_score(model, X, y, cv=5)  # 5-fache Kreuzvalidierung
print(f"Kreuzvalidierungswerte: {scores}")
print(f"Mittlere Genauigkeit: {scores.mean()}")
  • cv=5: Gibt an, dass eine 5-fache Kreuzvalidierung durchgeführt wird.
  • scores: Gibt den Score jedes Folds zurück, und das Endergebnis ist der Durchschnitt dieser Scores, der die Leistung des Modells darstellt.

Die Ausgabe sieht wie folgt aus:

Cross-validation scores: [0.96666667 0.96666667 0.93333333 0.96666667 1.        ]
Mean accuracy: 0.9666666666666668

2. Rastersuche und Zufallssuche

Verwende GridSearchCV zur Hyperparameter-Optimierung

GridSearchCV ist eine Technik, die die besten Hyperparameter findet, indem sie alle Hyperparameter-Kombinationen erschöpfend durchsucht.

GridSearchCV berechnet die Leistung jeder Kombination, indem es eine Menge von Kandidatenwerten für Parameter bereitstellt, und wählt schließlich die beste Parameterkombination aus.

Häufige Parameter von GridSearchCV:

  • param_grid: Das zu optimierende Hyperparameter-Raster, normalerweise ein Dictionary, in dem Schlüssel Parameternamen und Werte Kandidaten-Parameterwerte sind.
  • cv: Die Anzahl der Folds für die Kreuzvalidierung, üblicherweise auf 5 oder 10 gesetzt.

scikit-learn-Beispiel für die Verwendung von GridSearchCV:

Beispiel

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# Daten laden
data = load_iris()
X, y = data.data, data.target

# Modell erstellen
model = SVC()

# Hyperparameter-Raster definieren
param_grid = {'kernel': ['linear', 'rbf'], 'C': [1, 10, 100]}

# Rastersuche durchführen
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X, y)

# Beste Parameter und besten Score ausgeben
print(f"Beste Parameter: {grid_search.best_params_}")
print(f"Bester Score: {grid_search.best_score_}")
  • grid_search.best_params_: Gibt die Hyperparameter-Kombination mit der besten Leistung in der Rastersuche zurück.
  • grid_search.best_score_: Gibt den Kreuzvalidierungs-Score unter der besten Parameterkombination zurück.

Die Ausgabe sieht wie folgt aus:

Best parameters: {'C': 1, 'kernel': 'linear'}
Best score: 0.9800000000000001

Verwenden Sie RandomizedSearchCV, um den Tuning-Prozess zu beschleunigen

RandomizedSearchCV ist eine effizientere Methode zum Hyperparameter-Tuning, die den Tuning-Prozess beschleunigt, indem sie eine bestimmte Anzahl von Kombinationen zufällig aus dem Hyperparameterraum zur Evaluierung auswählt.

RandomizedSearchCV eignet sich für große Hyperparameterräume und kann Rechenzeit sparen.

Übliche Parameter von RandomizedSearchCV:

  • param_distributions: Die zu optimierende Hyperparameter-Verteilung, normalerweise ein Dictionary, wobei Werte Verteilungsobjekte sein können (wie z. B.scipy.statsVerteilungen in) oder eine Liste diskreter Werte.
  • n_iter: Die Anzahl der Iterationen für die Zufallssuche, d. h. die Anzahl der zufällig ausgewählten Hyperparameter-Kombinationen.

scikit-learn-Beispiel zur Verwendung von RandomizedSearchCV:

Beispiel

from sklearn.model_selection import RandomizedSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from scipy.stats import uniform

# Daten laden
data = load_iris()
X, y = data.data, data.target

# Modell erstellen
model = SVC()

# Hyperparameter-Verteilung definieren
param_distributions = {'C': uniform(0, 10), 'kernel': ['linear', 'rbf']}

# Zufällige Suche durchführen
random_search = RandomizedSearchCV(model, param_distributions, n_iter=10, cv=5)
random_search.fit(X, y)

# Beste Parameter und besten Score ausgeben
print(f"Beste Parameter: {random_search.best_params_}")
print(f"Bester Score: {random_search.best_score_}")
  • random_search.best_params_: Gibt die leistungsstärkste Hyperparameter-Kombination in der Zufallssuche zurück.
  • random_search.best_score_: Gibt den Kreuzvalidierungs-Score unter der besten Parameterkombination zurück.

Die Ausgabe sieht wie folgt aus:

Best parameters: {'C': 8.355688344706016, 'kernel': 'rbf'}
Best score: 0.9866666666666667

3. Modellbewertung

Verwenden Sie classification_report, confusion_matrix, roc_auc_score

Für Klassifikationsmodelle verwenden wir üblicherweise Metriken wie Präzision, Recall und F1-Score, um die Modellleistung zu bewerten.

scikit-learn bietet viele Evaluierungswerkzeuge, die uns helfen, die Leistung des Modells eingehend zu verstehen.

classification_report- Bietet Informationen wie Präzision, Recall, F1-Score und Support (die Anzahl der Stichproben in jeder Klasse).

Beispiel

from sklearn.metrics import classification_report

# Angenommen, y_test sind die wahren Labels, y_pred sind die Vorhersageergebnisse des Modells
print(classification_report(y_test, y_pred))

confusion_matrix- Die Konfusionsmatrix wird verwendet, um die Leistung eines Klassifikationsmodells für jede Klasse anzuzeigen, insbesondere wie positive Klassen als negative Klassen vorhergesagt werden und umgekehrt.

Beispiel

from sklearn.metrics import confusion_matrix

# Angenommen, y_test sind die wahren Labels, y_pred sind die Vorhersageergebnisse des Modells
print(confusion_matrix(y_test, y_pred))

roc_auc_score- ROC AUC (Area Under the Receiver Operating Characteristic Curve) ist eine Metrik zur Bewertung der Leistung von Klassifikationsmodellen, besonders geeignet für unausgewogene Datensätze. Je höher der AUC-Wert, desto besser die Modellleistung.

Beispiel

from sklearn.metrics import roc_auc_score

# Angenommen, y_test sind die wahren Labels, y_pred_proba sind die vom Modell vorhergesagten Wahrscheinlichkeitswerte
print(f"ROC-AUC-Wert: {roc_auc_score(y_test, y_pred_proba)}")

Bewertung von Regressionsmodellen: mean_squared_error, r2_score

Für Regressionsprobleme umfassen häufig verwendete Bewertungsmetriken den mittleren quadratischen Fehler (MSE) und das Bestimmtheitsmaß (R²).

mean_squared_error- Der mittlere quadratische Fehler ist ein gängiger Bewertungsstandard für Regressionsmodelle und berechnet den Mittelwert der quadrierten Fehler zwischen vorhergesagten Werten und wahren Werten.

Beispiel

from sklearn.metrics import mean_squared_error

# Angenommen, y_test sind die wahren Werte, y_pred sind die vorhergesagten Werte
print(f"Mittlerer quadratischer Fehler: {mean_squared_error(y_test, y_pred)}")

r2_score- Das Bestimmtheitsmaß R² wird verwendet, um zu messen, wie gut das Modell zu den Daten passt. Je näher der Wert an 1 liegt, desto besser ist die Modellanpassung.

Beispiel

from sklearn.metrics import r2_score

# Angenommen, y_test sind die wahren Werte, y_pred sind die vorhergesagten Werte
print(f"R²-Wert: {r2_score(y_test, y_pred)}")
Andere Erweiterungen