web-dev-qa-db-fra.com

Application du modèle de validation croisée en k-fold à l'aide du paquet caret

Permettez-moi de commencer par dire que j'ai lu de nombreux articles sur la validation croisée et qu'il semble y avoir beaucoup de confusion. Ma compréhension de cela est simplement ceci:

  1. Effectuez une validation croisée des k-fold, c’est-à-dire 10 replis pour comprendre l’erreur moyenne sur les 10 replis.
  2. Si cela est acceptable, indiquez le modèle à l’ensemble des données.

J'essaie de créer un arbre de décision en utilisant rpart dans R et en tirant parti du package caret. Vous trouverez ci-dessous le code que j'utilise.

# load libraries
library(caret)
library(rpart)

# define training control
train_control<- trainControl(method="cv", number=10)

# train the model 
model<- train(resp~., data=mydat, trControl=train_control, method="rpart")

# make predictions
predictions<- predict(model,mydat)

# append predictions
mydat<- cbind(mydat,predictions)

# summarize results
confusionMatrix<- confusionMatrix(mydat$predictions,mydat$resp)

J'ai une question concernant l'application train-caret. J'ai lu Une brève introduction au paquet caret section de train qui indique pendant le processus de rééchantillonnage que le "jeu de paramètres optimal" est déterminé. 

Dans mon exemple, ai-je codé correctement? Dois-je définir les paramètres rpart dans mon code ou mon code est-il suffisant?

7
pman1971

lorsque vous effectuez une validation croisée des k-fold, vous effectuez déjà une prévision pour chaque échantillon, un peu plus de 10 modèles différents (en supposant que k = 10). Il n’est pas nécessaire de faire une prédiction sur les données complètes, car vous avez déjà leurs prédictions à partir des k différents modèles.

Ce que vous pouvez faire est le suivant:

train_control<- trainControl(method="cv", number=10, savePredictions = TRUE)

Ensuite

model<- train(resp~., data=mydat, trControl=train_control, method="rpart")

si vous voulez voir l'observation et les prédictions dans un format de Nice, vous tapez simplement:

model$pred

Également pour la deuxième partie de votre question, caret devrait gérer tous les paramètres. Vous pouvez essayer manuellement les paramètres de réglage si vous le souhaitez.

16
zacdav

Une chose importante à noter ici est de ne pas confondre sélection de modèle et estimation d'erreur de modèle. 

Vous pouvez utiliser la validation croisée pour estimer les hyper-paramètres du modèle (paramètre de régularisation par exemple). 

Cela se fait généralement avec une validation croisée de 10 fois, car il s’agit d’un bon choix pour le compromis biais-variance (un facteur 2 pourrait provoquer des modèles avec un biais élevé, laisser un cv en dehors peut entraîner des modèles avec une variance/un ajustement excessif) . 

Après cela, si vous ne disposez pas d'un ensemble de tests indépendant, vous pouvez estimer la distribution empirique de certaines mesures de performance à l'aide de la validation croisée: une fois que vous avez trouvé les meilleurs hyper-paramètres, vous pouvez les utiliser pour estimer l'erreur de cv. 

Notez que dans cette étape, les hyperparamètres sont fixes mais peut-être que les paramètres du modèle sont différents parmi les modèles de validation croisée.

4
jorjasso

Dans la première page du court document d'introduction pour le paquet caret, il est mentionné que le modèle optimal est choisi pour tous les paramètres. Pour commencer, il faut comprendre que la validation croisée est une procédure permettant de choisir la meilleure approche de modélisation plutôt que le modèle lui-même CV - Sélection finale du modèle . Caret fournit une option de recherche dans la grille en utilisant tuneGrid où vous pouvez fournir une liste de valeurs de paramètres à tester. Le modèle final aura le paramètre optimisé une fois l’entraînement terminé.

1
KarthikS