Comment estimer la précision du modèle dans R à l'aide du package Caret
Lorsque vous créez un modèle prédictif, vous avez besoin d'un moyen d'évaluer la capacité du modèle sur des données invisibles.
Cela se fait généralement en estimant la précision à l'aide de données qui n'ont pas été utilisées pour entraîner le modèle, comme un ensemble de tests, ou en utilisant la validation croisée. Le package caret dans R fournit un certain nombre de méthodes pour estimer la précision d'un algorithme d'apprentissage automatique.
Dans cet article, vous découvrez 5 approches pour estimer les performances d'un modèle sur des données invisibles. Vous aurez également accès à des recettes dans R utilisant le package caret pour chaque méthode, que vous pourrez copier et coller dans votre propre projet, dès maintenant.
Démarrez votre projet avec mon nouveau livre Machine Learning Mastery With R, comprenant des tutoriels pas à pas et les fichiers code source R pour tous les exemples.
Commençons.
Estimation de la précision du modèle
Nous avons déjà pris en compte la précision du modèle dans la configuration des options de test dans un harnais de test. Vous pouvez en savoir plus dans l'article : Comment choisir les bonnes options de test lors de l'évaluation des algorithmes d'apprentissage automatique.
Dans cet article, vous découvrirez 5 méthodes différentes que vous pouvez utiliser pour estimer la précision du modèle.
Ils sont les suivants et chacun sera décrit tour à tour :
- Fractionnement des données
- Amorçage
- Validation croisée k-fold
- Validation croisée répétée k-fold
- Laisser un de côté la validation croisée
En général, je recommanderais la validation croisée répétée k-fold, mais chaque méthode a ses caractéristiques et ses avantages, en particulier lorsque la quantité de données ou la complexité spatiale et temporelle sont prises en compte. Réfléchissez à l'approche qui convient le mieux à votre problème.
Fractionnement des données
Le fractionnement des données implique le partitionnement des données en un ensemble de données de formation explicite utilisé pour préparer le modèle et un ensemble de données de test invisible utilisé pour évaluer les performances du modèle sur des données invisibles.
Ceci est utile lorsque vous disposez d'un très grand ensemble de données afin que l'ensemble de données de test puisse fournir une estimation significative des performances, ou lorsque vous utilisez des méthodes lentes et avez besoin d'une approximation rapide des performances.
L'exemple ci-dessous divise l'ensemble de données iris de sorte que 80 % soient utilisés pour la formation d'un modèle Naive Bayes et 20 % pour évaluer les performances du modèle.
Répartition des données dans R :
# load the libraries
library(caret)
library(klaR)
# load the iris dataset
data(iris)
# define an 80%/20% train/test split of the dataset
split=0.80
trainIndex <- createDataPartition(iris$Species, p=split, list=FALSE)
data_train <- iris[ trainIndex,]
data_test <- iris[-trainIndex,]
# train a naive bayes model
model <- NaiveBayes(Species~., data=data_train)
# make predictions
x_test <- data_test[,1:4]
y_test <- data_test[,5]
predictions <- predict(model, x_test)
# summarize results
confusionMatrix(predictions$class, y_test)
Amorçage
Le rééchantillonnage bootstrap consiste à prélever des échantillons aléatoires de l'ensemble de données (avec resélection) par rapport auxquels évaluer le modèle. Dans l'ensemble, les résultats fournissent une indication de la variance des performances des modèles. Généralement, un grand nombre d'itérations de rééchantillonnage sont effectuées (des milliers ou des dizaines de milliers).
L'exemple suivant utilise un bootstrap avec 10 rééchantillons pour préparer un modèle Naive Bayes.
Bootstrap de données dans R :
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="boot", number=100)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Validation croisée k-fold
La méthode de validation croisée k-fold consiste à diviser l'ensemble de données en k-sous-ensembles. Pour chaque sous-ensemble, le modèle est entraîné sur tous les autres sous-ensembles. Ce processus est terminé jusqu'à ce que l'exactitude soit déterminée pour chaque instance de l'ensemble de données et qu'une estimation globale de l'exactitude soit fournie.
Il s'agit d'une méthode robuste pour estimer la précision, la taille de k et ajuster le degré de biais dans l'estimation, avec des valeurs populaires fixées à 3, 5, 7 et 10.
L'exemple suivant utilise une validation croisée 10 fois pour estimer Naive Bayes sur l'ensemble de données iris.
Validation croisée k-fold dans R :
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="cv", number=10)
# fix the parameters of the algorithm
grid <- expand.grid(.fL=c(0), .usekernel=c(FALSE))
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb", tuneGrid=grid)
# summarize results
print(model)
Validation croisée répétée k-fold
Le processus de division des données en k-folds peut être répété plusieurs fois, c'est ce qu'on appelle la validation croisée répétée de k-folds. La précision finale du modèle est considérée comme la moyenne du nombre de répétitions.
L'exemple suivant utilise une validation croisée 10 fois avec 3 répétitions pour estimer Naive Bayes sur l'ensemble de données iris.
Validation croisée k-fold répétée dans R :
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Laisser un de côté la validation croisée
Dans Leave One Out Cross Validation (LOOCV), une instance de données est laissée de côté et un modèle construit sur toutes les autres instances de données de l'ensemble d'apprentissage. Ceci est répété pour toutes les instances de données.
L'exemple suivant montre LOOCV pour estimer Naive Bayes sur l'ensemble de données iris.
Laissez une validation croisée dans R :
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="LOOCV")
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Résumé
Dans cet article, vous avez découvert 5 méthodes différentes que vous pouvez utiliser pour estimer la précision de votre modèle sur des données invisibles.
Ces méthodes étaient : le fractionnement des données, le bootstrap, la validation croisée k-fold, la validation croisée répétée k-fold et la validation croisée Leave One Out.
Vous pouvez en savoir plus sur le package caret dans R sur la page d'accueil du package caret et sur la page CRAN du package caret. Si vous souhaitez maîtriser le package caret, je vous recommande le livre écrit par l'auteur du package, intitulé : Applied Predictive Modeling, en particulier le chapitre 4 sur le surajustement des modèles.