Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

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 *