Einführung
In diesem Lab werden wir lernen, wie wir die Kreuzvalidierung verwenden, um Vorhersagen und Fehler eines Modells mit den Funktionen cross_val_predict und PredictionErrorDisplay aus scikit-learn zu visualisieren. Wir werden den Diabetes-Datensatz laden, eine Instanz eines linearen Regressionsmodells erstellen und die Kreuzvalidierung verwenden, um ein Array von Vorhersagen zu erhalten. Anschließend werden wir PredictionErrorDisplay verwenden, um die tatsächlichen Werte gegen die vorhergesagten Werte sowie die Residuen gegen die vorhergesagten Werte zu plotten.
Tipps für die VM
Nachdem der Start der VM abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.
Daten laden und vorbereiten
Zunächst werden wir den Diabetes-Datensatz laden und ihn für das Modellieren vorbereiten. Wir werden die Funktion load_diabetes aus scikit-learn verwenden, um den Datensatz in zwei Arrays, X und y, zu laden.
from sklearn.datasets import load_diabetes
X, y = load_diabetes(return_X_y=True)
Ein lineares Regressionsmodell erstellen
Als nächstes werden wir eine Instanz eines linearen Regressionsmodells mithilfe der Klasse LinearRegression aus scikit-learn erstellen.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
Kreuzvalidierte Vorhersagen generieren
Wir werden die Funktion cross_val_predict aus scikit-learn verwenden, um kreuzvalidierte Vorhersagen zu generieren.
from sklearn.model_selection import cross_val_predict
y_pred = cross_val_predict(lr, X, y, cv=10)
Vorhersagefehler visualisieren
Wir werden PredictionErrorDisplay aus scikit-learn verwenden, um die Vorhersagefehler zu visualisieren. Wir werden die tatsächlichen Werte gegen die vorhergesagten Werte sowie die Residuen gegen die vorhergesagten Werte plotten.
import matplotlib.pyplot as plt
from sklearn.metrics import PredictionErrorDisplay
fig, axs = plt.subplots(ncols=2, figsize=(8, 4))
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="actual_vs_predicted",
subsample=100,
ax=axs[0],
random_state=0,
)
axs[0].set_title("Actual vs. Predicted values")
PredictionErrorDisplay.from_predictions(
y,
y_pred=y_pred,
kind="residual_vs_predicted",
subsample=100,
ax=axs[1],
random_state=0,
)
axs[1].set_title("Residuals vs. Predicted Values")
fig.suptitle("Plotting cross-validated predictions")
plt.tight_layout()
plt.show()
Ergebnisse interpretieren
Aus den Visualisierungen können wir sehen, dass der Plot der tatsächlichen Werte gegen die vorhergesagten Werte eine relativ lineare Beziehung mit einigen Schwankungen zeigt. Der Plot der Residuen gegen die vorhergesagten Werte zeigt ein relativ zufälliges Muster ohne deutlichen Trend, was darauf hindeutet, dass das lineare Regressionsmodell möglicherweise gut zu den Daten passt. Es ist jedoch wichtig zu beachten, dass wir cross_val_predict nur zu Visualisierungszwecken verwendet haben. Es wäre problematisch, die Modellleistung quantitativ zu bewerten, indem man eine einzelne Leistungsmetrik aus den konkatenierten Vorhersagen berechnet, die von cross_val_predict zurückgegeben werden, wenn die verschiedenen CV-Folds in Größe und Verteilungen variieren. Es wird empfohlen, die Leistungsmetriken pro Fold mit cross_val_score oder cross_validate zu berechnen.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man die Kreuzvalidierung verwendet, um Modellvorhersagen und -fehler mit den Funktionen cross_val_predict und PredictionErrorDisplay aus scikit-learn zu visualisieren. Wir haben den Diabetes-Datensatz geladen, eine Instanz eines linearen Regressionsmodells erstellt und die Kreuzvalidierung verwendet, um ein Array von Vorhersagen zu erhalten. Anschließend haben wir PredictionErrorDisplay verwendet, um die tatsächlichen Werte gegen die vorhergesagten Werte sowie die Residuen gegen die vorhergesagten Werte zu plotten. Schließlich haben wir die Ergebnisse interpretiert und die Wichtigkeit der Verwendung von Leistungsmetriken pro Fold für die Modellbewertung diskutiert.