K-fold-kreuzvalidierung in r (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.

Der einfachste Weg, eine k-fache Kreuzvalidierung in R durchzuführen, ist die Verwendung der trainControl()- Funktion aus der Caret- Bibliothek in R.

Dieses Tutorial bietet ein kurzes Beispiel für die Verwendung dieser Funktion zur Durchführung einer k-fachen Kreuzvalidierung für ein bestimmtes Modell in R.

Beispiel: K-Fold-Kreuzvalidierung in R

Angenommen, wir haben den folgenden Datensatz in R:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

Der folgende Code zeigt, wie man ein multiples lineares Regressionsmodell an diesen Datensatz in R anpasst und eine k-fache Kreuzvalidierung mit k = 5 Mal durchführt, um die Leistung des Modells zu bewerten:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

So interpretieren Sie das Ergebnis:

  • Es fand keine Vorverarbeitung statt. Das heißt, wir haben die Daten vor der Anpassung der Modelle in keiner Weise skaliert .
  • Die Resampling-Methode, die wir zur Bewertung des Modells verwendeten, war eine 5-fache Kreuzvalidierung.
  • Die Stichprobengröße für jeden Trainingssatz betrug 8.
  • RMSE: quadratischer Mittelwertfehler. Dies misst den durchschnittlichen Unterschied zwischen den Vorhersagen des Modells und den tatsächlichen Beobachtungen. Je niedriger der RMSE, desto genauer kann ein Modell tatsächliche Beobachtungen vorhersagen.
  • Rsquared: Dies ist ein Maß für die Korrelation zwischen Vorhersagen des Modells und tatsächlichen Beobachtungen. Je höher das R-Quadrat, desto genauer kann ein Modell tatsächliche Beobachtungen vorhersagen.
  • MAE: Der durchschnittliche absolute Fehler. Dies ist die durchschnittliche absolute Differenz zwischen den Vorhersagen des Modells und den tatsächlichen Beobachtungen. Je niedriger der MAE, desto genauer kann ein Modell tatsächliche Beobachtungen vorhersagen.

Jede der drei im Ergebnis bereitgestellten Messungen (RMSE, R-Quadrat und MAE) gibt uns eine Vorstellung von der Leistung des Modells bei unveröffentlichten Daten.

In der Praxis passen wir in der Regel mehrere unterschiedliche Modelle an und vergleichen die drei Metriken, die sich aus den hier vorgestellten Ergebnissen ergeben, um zu entscheiden, welches Modell die niedrigsten Testfehlerraten erzeugt und daher das beste zu verwendende Modell ist.

Wir können den folgenden Code verwenden, um die endgültige Modellanpassung zu untersuchen:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

Das endgültige Modell sieht wie folgt aus:

y = 21,2672 + 0,7803*(x 1 ) – 1,12538(x 2 )

Wir können den folgenden Code verwenden, um die für jede Falte getroffenen Modellvorhersagen anzuzeigen:

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

Beachten Sie, 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.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert