Validation croisée K-Fold dans R (étape par étape)
Pour évaluer les performances d’un modèle sur un ensemble de données, nous devons mesurer dans quelle mesure les prédictions faites par le modèle correspondent aux données observées.
Une méthode couramment utilisée pour ce faire est connue sous le nom de validation croisée k-fold , qui utilise l’approche suivante :
1. Divisez aléatoirement un ensemble de données en k groupes, ou « plis », de taille à peu près égale.
2. Choisissez l’un des plis comme ensemble de retenue. Ajustez le modèle sur les plis k-1 restants. Calculez le test MSE sur les observations dans le pli qui a été tendu.
3. Répétez ce processus k fois, en utilisant à chaque fois un ensemble différent comme ensemble d’exclusion.
4. Calculez le MSE global du test comme étant la moyenne des k MSE du test.
Le moyen le plus simple d’effectuer une validation croisée k fois dans R consiste à utiliser la fonction trainControl() de la bibliothèque caret dans R.
Ce didacticiel fournit un exemple rapide de la façon d’utiliser cette fonction pour effectuer une validation croisée k fois pour un modèle donné dans R.
Exemple : validation croisée K-Fold dans R
Supposons que nous ayons l’ensemble de données suivant dans 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
Le code suivant montre comment ajuster un modèle de régression linéaire multiple à cet ensemble de données dans R et effectuer une validation croisée k fois avec k = 5 fois pour évaluer les performances du modèle :
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 predictor 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
Voici comment interpréter le résultat :
- Aucun prétraitement n’a eu lieu. Autrement dit, nous n’avons en aucun cas mis à l’échelle les données avant d’ajuster les modèles.
- La méthode de rééchantillonnage que nous avons utilisée pour évaluer le modèle était une validation croisée avec 5 plis.
- La taille de l’échantillon pour chaque ensemble de formation était de 8.
- RMSE : erreur quadratique moyenne. Celui-ci mesure la différence moyenne entre les prédictions faites par le modèle et les observations réelles. Plus le RMSE est bas, plus un modèle peut prédire avec précision les observations réelles.
- Rsquared : Il s’agit d’une mesure de la corrélation entre les prédictions faites par le modèle et les observations réelles. Plus le R au carré est élevé, plus un modèle peut prédire avec précision les observations réelles.
- MAE : L’erreur absolue moyenne. Il s’agit de la différence absolue moyenne entre les prédictions faites par le modèle et les observations réelles. Plus le MAE est bas, plus un modèle peut prédire avec précision les observations réelles.
Chacune des trois mesures fournies dans le résultat (RMSE, R-carré et MAE) nous donne une idée des performances du modèle sur des données inédites.
En pratique, nous ajustons généralement plusieurs modèles différents et comparons les trois métriques fournies par les résultats présentés ici pour décider quel modèle produit les taux d’erreur de test les plus faibles et constitue donc le meilleur modèle à utiliser.
Nous pouvons utiliser le code suivant pour examiner l’ajustement final du modèle :
#view final model
model$finalModel
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) x1 x2
21.2672 0.7803 -1.1253
Le modèle final s’avère être :
y = 21,2672 + 0,7803*(x 1 ) – 1,12538(x 2 )
Nous pouvons utiliser le code suivant pour afficher les prédictions du modèle faites pour chaque pli :
#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
Notez que dans cet exemple, nous avons choisi d’utiliser k=5 plis, mais vous pouvez choisir le nombre de plis que vous souhaitez. En pratique, nous choisissons généralement entre 5 et 10 plis, car cela s’avère être le nombre optimal de plis qui produit des taux d’erreur de test fiables.