So führen sie eine kreuzvalidierung der modellleistung in r durch
In der Statistik erstellen wir häufig Modelle aus zwei Gründen:
- Verstehen Sie die Beziehung zwischen einer oder mehreren Prädiktorvariablen und einer Antwortvariablen.
- Verwenden Sie ein Modell, um zukünftige Beobachtungen vorherzusagen.
Die Kreuzvalidierung ist nützlich, um abzuschätzen, wie gut ein Modell zukünftige Beobachtungen vorhersagen kann.
Beispielsweise können wir ein multiples lineares Regressionsmodell erstellen, das Alter und Einkommen als Prädiktorvariablen und den Standardstatus als Antwortvariable verwendet. In diesem Fall möchten wir das Modell möglicherweise an einen Datensatz anpassen und dieses Modell dann verwenden, um basierend auf dem Einkommen und Alter eines neuen Antragstellers die Wahrscheinlichkeit vorherzusagen, dass er mit seinem Kredit in Verzug gerät.
Um festzustellen, ob das Modell über eine starke Vorhersagefähigkeit verfügt, müssen wir es verwenden, um Vorhersagen auf Daten zu treffen, die es noch nie zuvor gesehen hat. Dadurch können wir den Vorhersagefehler des Modells abschätzen.
Verwendung der Kreuzvalidierung zur Schätzung des Vorhersagefehlers
Kreuzvalidierung bezieht sich auf verschiedene Möglichkeiten, Vorhersagefehler abzuschätzen. Der allgemeine Ansatz zur Kreuzvalidierung ist:
1. Reservieren Sie eine bestimmte Anzahl von Beobachtungen im Datensatz – typischerweise 15–25 % aller Beobachtungen.
2. Passen Sie das Modell an die Beobachtungen an, die wir im Datensatz speichern (oder „trainieren“).
3. Testen Sie, wie gut das Modell Vorhersagen über Beobachtungen treffen kann, die wir nicht zum Trainieren des Modells verwendet haben.
Messung der Qualität eines Modells
Wenn wir das angepasste Modell verwenden, um Vorhersagen über neue Beobachtungen zu treffen, können wir verschiedene Metriken verwenden, um die Qualität des Modells zu messen, darunter:
Multiples R-Quadrat: Dies misst die Stärke der linearen Beziehung zwischen den Prädiktorvariablen und der Antwortvariablen. Ein R-Quadrat-Vielfaches von 1 weist auf eine perfekte lineare Beziehung hin, während ein R-Quadrat-Vielfaches von 0 auf keine lineare Beziehung hinweist. Je höher das R-Quadrat-Vielfache ist, desto wahrscheinlicher ist es, dass die Prädiktorvariablen die Antwortvariable vorhersagen.
Root Mean Square Error (RMSE): Misst den durchschnittlichen Vorhersagefehler, den das Modell bei der Vorhersage des Werts einer neuen Beobachtung macht. Dies ist der durchschnittliche Abstand zwischen dem wahren Wert einer Beobachtung und dem vom Modell vorhergesagten Wert. Niedrigere Werte für RMSE weisen auf eine bessere Modellanpassung hin.
Mittlerer absoluter Fehler (MAE): Dies ist die durchschnittliche absolute Differenz zwischen dem wahren Wert einer Beobachtung und dem vom Modell vorhergesagten Wert. Diese Metrik reagiert im Allgemeinen weniger empfindlich auf Ausreißer als RMSE. Niedrigere Werte für MAE weisen auf eine bessere Modellanpassung hin.
Implementierung von vier verschiedenen Kreuzvalidierungstechniken in R
Anschließend erklären wir, wie die folgenden Kreuzvalidierungstechniken in R implementiert werden:
1. Validierungssatz-Ansatz
2. k-fache Kreuzvalidierung
3. Lassen Sie die Kreuzvalidierung beiseite
4. Wiederholte k-fache Kreuzvalidierung
Um zu veranschaulichen, wie diese verschiedenen Techniken verwendet werden, verwenden wir eine Teilmenge des in mtcars integrierten R-Datensatzes:
#define dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Wir werden ein multiples lineares Regressionsmodell erstellen, das disp , hp und drat als Prädiktorvariablen und mpg als Antwortvariable verwendet.
Validierungssatz-Ansatz
Der Validierungssatz-Ansatz funktioniert wie folgt:
1. Teilen Sie die Daten in zwei Sätze auf: Ein Satz wird zum Trainieren des Modells (dh Schätzen der Modellparameter) und der andere Satz zum Testen des Modells verwendet. Im Allgemeinen wird der Trainingssatz durch zufällige Auswahl von 70–80 % der Daten generiert und die restlichen 20–30 % der Daten werden als Testsatz verwendet.
2. Erstellen Sie das Modell mithilfe des Trainingsdatensatzes.
3. Verwenden Sie das Modell, um Vorhersagen über die Testsatzdaten zu treffen.
4. Messen Sie die Modellqualität mithilfe von Metriken wie R-Quadrat, RMSE und MAE.
Beispiel:
Das folgende Beispiel verwendet den oben definierten Datensatz. Zuerst teilen wir die Daten auf
Ein Trainingssatz und ein Testsatz, wobei 80 % der Daten als Trainingssatz und die restlichen 20 % der Daten als Testsatz verwendet werden. Als nächstes erstellen wir das Modell mithilfe des Trainingssatzes. Dann verwenden wir das Modell, um Vorhersagen über den Testsatz zu treffen. Schließlich messen wir die Qualität des Modells mithilfe von R-Quadrat, RMSE und MAE.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #split the dataset into a training set (80%) and test set (20%). training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE) train <- data[training_obs, ] test <- data[-training_obs, ] # Build the linear regression model on the training set model <- lm(mpg ~ ., data = train) # Use the model to make predictions on the test set predictions <- model %>% predict(test) #Examine R-squared, RMSE, and MAE of predictions data.frame(R_squared = R2(predictions, test$mpg), RMSE = RMSE(predictions, test$mpg), MAE = MAE(predictions, test$mpg)) #R_squared RMSE MAE #1 0.9213066 1.876038 1.66614
Beim Vergleich verschiedener Modelle wird das Modell bevorzugt, das im Testsatz den niedrigsten RMSE erzeugt.
Vor- und Nachteile dieses Ansatzes
Der Vorteil des Validierungssatzansatzes besteht darin, dass er einfach und recheneffizient ist. Der Nachteil besteht darin, dass das Modell nur aus einem Teil der Gesamtdaten erstellt wird. Wenn die Daten, die wir aus dem Trainingssatz weglassen, interessante oder wertvolle Informationen enthalten, werden diese vom Modell nicht berücksichtigt.
k-facher Kreuzvalidierungsansatz
Der Ansatz der k-fachen Kreuzvalidierung funktioniert wie folgt:
1. Teilen Sie die Daten nach dem Zufallsprinzip in k „Faltungen“ oder Teilmengen auf (z. B. 5 oder 10 Teilmengen).
2. Trainieren Sie das Modell anhand aller Daten und lassen Sie dabei nur eine Teilmenge aus.
3. Verwenden Sie das Modell, um Vorhersagen über die Daten der ausgelassenen Teilmenge zu treffen.
4. Wiederholen Sie diesen Vorgang, bis jede der k Teilmengen als Testsatz verwendet wurde.
5 . Messen Sie die Qualität des Modells, indem Sie die k Testfehler mitteln. Das ist bekannt
als Kreuzvalidierungsfehler.
Beispiel
In diesem Beispiel teilen wir die Daten zunächst in 5 Teilmengen auf. Dann passen wir das Modell mithilfe aller Daten bis auf eine Teilmenge an. Dann verwenden wir das Modell, um Vorhersagen über die ausgelassene Teilmenge zu treffen und den Testfehler aufzuzeichnen (unter Verwendung von R-Quadrat, RMSE und MAE). Wir wiederholen diesen Vorgang, bis jede Teilmenge als Testsatz verwendet wurde. Dann berechnen wir einfach den Durchschnitt der 5 Testfehler.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets (or "folds") to use train_control <- trainControl(method = "cv", number = 5) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #Summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold) #Summary of sample sizes: 26, 25, 26, 25, 26 #Resampling results: # # RMSE Rsquared MAE #3.095501 0.7661981 2.467427 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Vor- und Nachteile dieses Ansatzes
Der Vorteil des k-fachen Kreuzvalidierungsansatzes gegenüber dem Validierungssatzansatz besteht darin, dass er das Modell mehrmals unter Verwendung unterschiedlicher Datenteile erstellt, sodass wir beim Erstellen des Modells nicht das Risiko eingehen müssen, wichtige Daten auszulassen.
Der subjektive Teil dieses Ansatzes besteht darin, den für k zu verwendenden Wert auszuwählen, d. h. die Anzahl der Teilmengen, in die die Daten unterteilt werden sollen. Im Allgemeinen führen niedrigere k-Werte zu einer höheren Verzerrung, aber geringeren Variabilität, während höhere k-Werte zu einer geringeren Verzerrung, aber einer höheren Variabilität führen.
In der Praxis wird k im Allgemeinen gleich 5 oder 10 gewählt, da diese Anzahl von Teilmengen tendenziell gleichzeitig eine zu große Verzerrung und eine zu große Variabilität vermeidet.
Leave One Out Cross-Validation (LOOCV)-Ansatz
Der LOOCV-Ansatz funktioniert wie folgt:
1. Erstellen Sie das Modell unter Verwendung aller Beobachtungen bis auf eine im Datensatz.
2. Verwenden Sie das Modell, um den Wert der fehlenden Beobachtung vorherzusagen. Notieren Sie den Fehler beim Testen dieser Vorhersage.
3. Wiederholen Sie diesen Vorgang für jede Beobachtung im Datensatz.
4. Messen Sie die Qualität des Modells, indem Sie alle Vorhersagefehler mitteln.
Beispiel
Das folgende Beispiel zeigt, wie perform LOOCV für denselben Datensatz verwendet wird, der in den vorherigen Beispielen verwendet wurde:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #specify that we want to use LOOCV train_control <- trainControl( method = "LOOCV" ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Leave-One-Out Cross-Validation #Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... #Resampling results: # # RMSE Rsquared MAE #3.168763 0.7170704 2.503544 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Vor- und Nachteile dieses Ansatzes
Der Vorteil von LOOCV besteht darin, dass wir alle Datenpunkte verwenden, was im Allgemeinen potenzielle Verzerrungen reduziert. Da wir das Modell jedoch verwenden, um den Wert jeder Beobachtung vorherzusagen, könnte dies zu einer größeren Variabilität des Vorhersagefehlers führen.
Ein weiterer Nachteil dieses Ansatzes besteht darin, dass er für eine so große Anzahl von Modellen geeignet sein muss, dass er ineffizient und rechenintensiv werden kann.
Wiederholter k-facher Kreuzvalidierungsansatz
Wir können eine wiederholte k-fache Kreuzvalidierung durchführen, indem wir einfach mehrmals eine k-fache Kreuzvalidierung durchführen. Der endgültige Fehler ist der durchschnittliche Fehler der Anzahl der Wiederholungen.
Das folgende Beispiel führt eine fünffache Kreuzvalidierung durch, die viermal wiederholt wird:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets to use and number of times to repeat k-fold CV train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4 ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 4 times) #Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... #Resampling results: # # RMSE Rsquared MAE #3.176339 0.7909337 2.559131 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Vor- und Nachteile dieses Ansatzes
Der Vorteil des Ansatzes der wiederholten k-fachen Kreuzvalidierung besteht darin, dass die Daten bei jeder Wiederholung in leicht unterschiedliche Teilmengen aufgeteilt werden, was zu einer noch unvoreingenommeneren Schätzung des Vorhersagefehlers des Modells führen sollte. Der Nachteil dieses Ansatzes besteht darin, dass er rechenintensiv sein kann, da wir den Modellanpassungsprozess mehrmals wiederholen müssen.
So wählen Sie die Anzahl der Falten bei der Kreuzvalidierung aus
Der subjektivste Teil der Kreuzvalidierung ist die Entscheidung, wie viele Falten (dh Teilmengen) verwendet werden sollen. Im Allgemeinen gilt: Je kleiner die Anzahl der Faltungen, desto verzerrter sind die Fehlerschätzungen, aber desto weniger variabel sind sie. Umgekehrt gilt: Je höher die Anzahl der Faltungen, desto weniger verzerrt sind die Fehlerschätzungen, aber desto variabler sind sie.
Es ist auch wichtig, die Berechnungszeit im Auge zu behalten. Für jede Falte müssen Sie ein neues Muster trainieren. Dies ist zwar ein langsamer Prozess, kann jedoch lange dauern, wenn Sie eine hohe Anzahl von Faltungen wählen.
In der Praxis wird die Kreuzvalidierung normalerweise mit 5 oder 10 Falten durchgeführt, da dies ein gutes Gleichgewicht zwischen Variabilität und Verzerrung bietet und gleichzeitig recheneffizient ist.
So wählen Sie ein Modell aus, nachdem Sie eine Kreuzvalidierung durchgeführt haben
Kreuzvalidierung wird verwendet, um den Vorhersagefehler eines Modells zu bewerten. Dies kann uns bei der Auswahl zwischen zwei oder mehr verschiedenen Modellen helfen, indem hervorgehoben wird, welches Modell den geringsten Vorhersagefehler aufweist (basierend auf RMSE, R-Quadrat usw.).
Nachdem wir mithilfe der Kreuzvalidierung das beste Modell ausgewählt haben, verwenden wir anschließend alle verfügbaren Daten, um es an das ausgewählte Modell anzupassen. Für unser endgültiges Modell verwenden wir nicht die tatsächlichen Modellinstanzen, die wir während der Kreuzvalidierung trainiert haben.
Beispielsweise können wir eine 5-fache Kreuzvalidierung verwenden, um zu bestimmen, welches Modell zwischen zwei verschiedenen Regressionsmodellen besser zu verwenden ist. Sobald wir jedoch festgestellt haben, welches Modell am besten geeignet ist, verwenden wir alle Daten, um das endgültige Modell anzupassen. Mit anderen Worten: Wir vergessen beim Bau des endgültigen Modells keine Falte.