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.

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *