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')

Graphique d'importance variable dans R

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 .

Ajouter un commentaire

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