Comment effectuer l’ensachage dans R (étape par étape)
Lorsque nous créons un arbre de décision pour un ensemble de données donné, nous n’utilisons qu’un seul ensemble de données de formation pour construire le modèle.
Cependant, l’inconvénient de l’utilisation d’un seul arbre de décision est qu’il a tendance à souffrir d’ une variance élevée . Autrement dit, si nous divisons l’ensemble de données en deux moitiés et appliquons l’arbre de décision aux deux moitiés, les résultats pourraient être très différents.
Une méthode que nous pouvons utiliser pour réduire la variance d’un seul arbre de décision est connue sous le nom de bagging , parfois appelée agrégation bootstrap .
L’ensachage fonctionne comme suit :
1. Prenez b échantillons bootstrapés à partir de l’ensemble de données d’origine.
2. Créez un arbre de décision pour chaque échantillon bootstrap.
3. Faites la moyenne des prédictions de chaque arbre pour obtenir un modèle final.
En construisant des centaines, voire des milliers d’arbres de décision individuels et en prenant les prédictions moyennes de tous les arbres, nous nous retrouvons souvent avec un modèle en sac ajusté qui produit un taux d’erreur de test beaucoup plus faible par rapport à un seul arbre de décision.
Ce didacticiel fournit un exemple étape par étape de la façon de créer un modèle en sac dans R.
Étape 1 : Chargez les packages nécessaires
Tout d’abord, nous allons charger les packages nécessaires pour cet exemple :
library(dplyr) #for data wrangling library(e1071) #for calculating variable importance library(caret) #for general model fitting library(rpart) #for fitting decision trees library(ipred) #for fitting bagged decision trees
Étape 2 : Ajuster le modèle en sac
Pour cet exemple, nous utiliserons un ensemble de données R intégré appelé qualité de l’air qui contient des mesures de la qualité de l’air à New York sur 153 jours individuels.
#view structure of airquality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
Le code suivant montre comment ajuster un modèle en sac dans R à l’aide de la fonction bagging() de la bibliothèque ipred .
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
Notez que nous avons choisi d’utiliser 150 échantillons bootstrapés pour construire le modèle en sac et nous avons spécifié que coob est VRAI pour obtenir l’erreur hors sac estimée.
Nous avons également utilisé les spécifications suivantes dans la fonction rpart.control() :
- minsplit = 2 : cela indique au modèle de ne nécessiter que 2 observations dans un nœud pour se diviser.
- cp = 0 . C’est le paramètre de complexité. En le définissant sur 0, nous n’exigeons pas que le modèle soit capable d’améliorer l’ajustement global de quelque manière que ce soit afin d’effectuer une division.
Essentiellement, ces deux arguments permettent aux arbres individuels de pousser extrêmement profondément, ce qui conduit à des arbres avec une variance élevée mais un faible biais. Ensuite, lorsque nous appliquons le bagging, nous sommes en mesure de réduire la variance du modèle final tout en gardant le biais faible.
À partir des résultats du modèle, nous pouvons voir que le RMSE estimé hors sac est de 17,4973 . Il s’agit de la différence moyenne entre la valeur prévue pour l’ozone et la valeur réelle observée.
Étape 3 : Visualisez l’importance des prédicteurs
Bien que les modèles en sac aient tendance à fournir des prédictions plus précises que les arbres de décision individuels, il est difficile d’interpréter et de visualiser les résultats des modèles en sac ajustés.
Nous pouvons cependant visualiser l’importance des variables prédictives en calculant la réduction totale de RSS (somme résiduelle des carrés) due à la répartition sur un prédicteur donné, moyennée sur tous les arbres. Plus la valeur est grande, plus le prédicteur est important.
Le code suivant montre comment créer un tracé d’importance variable pour le modèle en sac ajusté, à l’aide de la fonction varImp() de la bibliothèque caret :
#calculate variable importance VI <- data.frame(var=names(airquality[,-1]), imp=varImp(bag)) #sort variable importance descending VI_plot <- VI[order(VI$Overall, decreasing=TRUE),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg=rownames(VI_plot), horiz=TRUE, col='steelblue', xlab='Variable Importance')
Nous pouvons voir que Solar.R est la variable prédictive la plus importante du modèle tandis que Month est la moins importante.
Étape 4 : Utiliser le modèle pour faire des prédictions
Enfin, nous pouvons utiliser le modèle en sac ajusté pour faire des prédictions sur de nouvelles observations.
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
Sur la base des valeurs des variables prédictives, le modèle en sac ajusté prédit que la valeur de l’ozone sera de 24,487 ce jour particulier.
Le code R complet utilisé dans cet exemple peut être trouvé ici .