K-fold-kreuzvalidierung in python (schritt für schritt)
Um die Leistung eines Modells anhand eines Datensatzes zu bewerten, müssen wir messen, wie gut die vom Modell gemachten Vorhersagen mit den beobachteten Daten übereinstimmen.
Eine hierfür häufig verwendete Methode ist die k-fache Kreuzvalidierung , die den folgenden Ansatz verwendet:
1. Teilen Sie einen Datensatz zufällig in k Gruppen oder „Faltungen“ von ungefähr gleicher Größe auf.
2. Wählen Sie eine der Falten als Rückhalteset. Passen Sie die Schablone an die verbleibenden K-1-Falten an. Berechnen Sie den MSE-Test anhand der Beobachtungen in der gespannten Lage.
3. Wiederholen Sie diesen Vorgang k -mal, wobei Sie jedes Mal einen anderen Satz als Ausschlusssatz verwenden.
4. Berechnen Sie den Gesamttest-MSE als Durchschnitt der k Test-MSEs.
Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer k-fachen Kreuzvalidierung für ein bestimmtes Modell in Python.
Schritt 1: Laden Sie die erforderlichen Bibliotheken
Zuerst laden wir die für dieses Beispiel benötigten Funktionen und Bibliotheken:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
Schritt 2: Erstellen Sie die Daten
Als Nächstes erstellen wir einen Pandas-DataFrame, der zwei Prädiktorvariablen x1 und x2 sowie eine einzelne Antwortvariable y enthält.
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
Schritt 3: Führen Sie eine K-Fold-Kreuzvalidierung durch
Als Nächstes passen wir ein multiples lineares Regressionsmodell an den Datensatz an und führen LOOCV durch, um die Leistung des Modells zu bewerten.
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.6141267491803646
Aus dem Ergebnis können wir ersehen, dass der mittlere absolute Fehler (MAE) 3,614 betrug. Das heißt, der durchschnittliche absolute Fehler zwischen der Modellvorhersage und den tatsächlich beobachteten Daten beträgt 3,614.
Im Allgemeinen gilt: Je niedriger der MAE, desto besser kann ein Modell tatsächliche Beobachtungen vorhersagen.
Eine weitere häufig verwendete Metrik zur Bewertung der Modellleistung ist der quadratische Mittelfehler (Root Mean Square Error, RMSE). Der folgende Code zeigt, wie diese Metrik mithilfe von LOOCV berechnet wird:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
4.284373111711816
Aus dem Ergebnis können wir ersehen, dass der quadratische Mittelfehler (RMSE) 4,284 betrug.
Je niedriger der RMSE, desto besser kann ein Modell tatsächliche Beobachtungen vorhersagen.
In der Praxis passen wir in der Regel mehrere unterschiedliche Modelle an und vergleichen den RMSE oder MAE jedes Modells, um zu entscheiden, welches Modell die niedrigsten Testfehlerraten erzeugt und daher das beste zu verwendende Modell ist.
Beachten Sie auch, dass wir in diesem Beispiel die Verwendung von k=5 Falten wählen, Sie können jedoch eine beliebige Anzahl von Falten auswählen.
In der Praxis wählen wir typischerweise zwischen 5 und 10 Lagen, da sich dies als die optimale Lagenzahl erweist, die zu zuverlässigen Testfehlerraten führt.
Die vollständige Dokumentation zur KFold()-Funktion von sklearn finden Sie hier .
Zusätzliche Ressourcen
Eine Einführung in die K-Fold-Kreuzvalidierung
Eine vollständige Anleitung zur linearen Regression in Python
Leave-One-Out-Kreuzvalidierung in Python