Recherche de site Web

Optimisation des modèles d'apprentissage automatique à l'aide du package Caret R


Les algorithmes d’apprentissage automatique sont paramétrés afin de pouvoir être adaptés au mieux à un problème donné. Une difficulté est que la configuration d’un algorithme pour un problème donné peut être un projet en soi.

Comme pour sélectionner « le meilleur » algorithme pour un problème, vous ne pouvez pas savoir à l’avance quels paramètres d’algorithme seront les meilleurs pour un problème. La meilleure chose à faire est d’enquêter empiriquement avec des expériences contrôlées.

Le package caret R a été conçu pour faciliter la recherche des paramètres optimaux pour un algorithme. Il fournit une méthode de recherche par grille pour rechercher des paramètres, combinée à diverses méthodes pour estimer les performances d'un modèle donné.

Dans cet article, vous découvrirez 5 recettes que vous pouvez utiliser pour régler les algorithmes d'apprentissage automatique afin de trouver les paramètres optimaux pour vos problèmes à l'aide du package caret R.

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.

Réglage du modèle

Le package caret R fournit une recherche de grille où lui ou vous pouvez spécifier les paramètres à essayer pour votre problème. Il testera toutes les combinaisons et localisera celle qui donne les meilleurs résultats.

Les exemples de cet article montreront comment vous pouvez utiliser le package caret R pour régler un algorithme d'apprentissage automatique.

La quantification vectorielle d'apprentissage (LVQ) sera utilisée dans tous les exemples en raison de sa simplicité. C'est comme les k voisins les plus proches, sauf que la base de données d'échantillons est plus petite et adaptée en fonction des données d'entraînement. Il a deux paramètres à régler, le nombre d'instances (livres de codes) dans le modèle appelé taille et le nombre d'instances à vérifier lors de la réalisation de prédictions appelé k.

Chaque exemple utilisera également l'ensemble de données sur les fleurs d'iris, fourni avec R. Cet ensemble de données de classification fournit 150 observations pour trois espèces de fleurs d'iris et leurs mesures de pétales et de sépales en centimètres.

Chaque exemple suppose également que nous sommes intéressés par la précision de la classification comme mesure que nous optimisons, bien que cela puisse être modifié. De plus, chaque exemple estime les performances d'un modèle donné (combinaison de taille et de paramètres k) en utilisant une validation croisée n fois répétée, avec 10 fois et 3 répétitions. Cela aussi peut être modifié si vous le souhaitez.

Recherche de grille : grille automatique

Il existe deux façons de régler un algorithme dans le package Caret R, la première consiste à permettre au système de le faire automatiquement. Cela peut être fait en définissant tuneLength pour indiquer le nombre de valeurs différentes à essayer pour chaque paramètre d'algorithme.

Cela ne prend en charge que les paramètres d'algorithme entiers et catégoriels, et cela donne une estimation grossière des valeurs à essayer, mais cela peut vous permettre d'être opérationnel très rapidement.

La recette suivante montre la recherche automatique dans la grille des attributs size et k de LVQ avec 5 (tuneLength=5) valeurs de chacun (25 modèles au total).

Réglage automatique des paramètres dans R :

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

Les valeurs finales utilisées pour le modèle étaient taille=10 et k=1.

Recherche de grille : Grille manuelle

La deuxième façon de rechercher les paramètres de l'algorithme consiste à spécifier manuellement une grille de réglage. Dans la grille, chaque paramètre de l'algorithme peut être spécifié comme un vecteur de valeurs possibles. Ces vecteurs se combinent pour définir toutes les combinaisons possibles à tenter.

La recette ci-dessous démontre la recherche d'une grille de réglage manuel avec 4 valeurs pour le paramètre taille et 5 valeurs pour le paramètre k (20 combinaisons).

Recherche de grille avec le package caret r :

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,20,50), k=c(1,2,3,4,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)

Les valeurs finales utilisées pour le modèle étaient taille=50 et k=5.

Prétraitement des données

L'ensemble de données peut être prétraité dans le cadre du réglage des paramètres. Il est important de le faire au sein de l'échantillon utilisé pour évaluer chaque modèle, afin de garantir que les résultats tiennent compte de toute la variabilité du test. Si l'ensemble de données est normalisé ou standardisé avant le processus de réglage, il aurait accès à des connaissances supplémentaires (biais) et ne donnerait pas une estimation aussi précise des performances sur des données invisibles.

Les attributs de l'ensemble de données sur l'iris sont tous dans les mêmes unités et généralement à la même échelle, la normalisation et la standardisation ne sont donc pas vraiment nécessaires. Néanmoins, l'exemple ci-dessous montre le réglage des paramètres size et k de LVQ tout en normalisant l'ensemble de données avec preProcess="scale".

Recherche de grille avec prétraitement avec le package caret r :

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", preProcess="scale", trControl=control, tuneLength=5)
# summarize the model
print(model)

Les valeurs finales utilisées pour le modèle étaient taille=8 et k=6.

Traitement parallèle

Le package caret prend en charge le traitement parallèle afin de réduire le temps de calcul pour une expérience donnée. Il est pris en charge automatiquement tant qu'il est configuré. Dans cet exemple, nous chargeons le package doMC et définissons le nombre de cœurs sur 4, ce qui rend disponible 4 threads de travail pour le caret lors du réglage du modèle. Ceci est utilisé pour les boucles pour les répétitions de validation croisée pour chaque combinaison de paramètres.

Recherche de grille avec traitement parallèle avec le package caret r :

# ensure results are repeatable
set.seed(7)
# configure multicore
library(doMC)
registerDoMC(cores=4)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

Les résultats sont les mêmes que dans le premier exemple, mais plus rapidement.

Visualisation des performances

Il peut être utile de représenter graphiquement les performances de différentes combinaisons de paramètres d'algorithme pour rechercher des tendances et la sensibilité du modèle. Caret prend en charge la représentation graphique directe du modèle qui comparera la précision de différentes combinaisons d'algorithmes.

Dans la recette ci-dessous, une plus grande grille manuelle de paramètres d'algorithme est définie et les résultats sont représentés graphiquement. Le graphique montre la taille sur l'axe des x et la précision du modèle sur l'axe des y. Deux lignes sont tracées, une pour chaque valeur k. Le graphique montre les tendances générales de l'augmentation des performances avec la taille et montre que la valeur la plus élevée de k est probablement préférée.

Recherche de grille avec visualisation avec le package caret r :

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,15,20,25,30,35,40,45,50), k=c(3,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)
# plot the effect of parameters on accuracy
plot(model)

Les valeurs finales utilisées pour le modèle étaient taille=35 et k=5.

Résumé

Dans cet article, vous avez découvert la prise en charge du package caret R pour le réglage des paramètres de l'algorithme à l'aide d'une recherche par grille.

Vous avez vu 5 recettes utilisant le package caret R pour régler les paramètres size et k pour l'algorithme LVQ.

Chaque recette de cet article est autonome et prête à être copiée et collée dans votre propre projet et à adapter à votre problème.

Articles connexes