CommencerCommencez gratuitement

Trouver le bon nombre d’arbres pour une gradient boosting machine

Dans cet exercice, vous allez préparer la construction d’un modèle de gradient boosting pour prédire le nombre de vélos loués par heure en fonction de la météo, du type et du moment de la journée. Vous entraînerez le modèle sur les données du mois de juillet.

Les données de juillet ont été préchargées. Rappelez-vous que bikesJuly.treat ne contient plus la colonne cible ; vous devez donc la récupérer depuis les données non traitées : bikesJuly$cnt.

Vous utiliserez le package xgboost pour ajuster le modèle de forêt aléatoire. La fonction xgb.cv() (docs) utilise la validation croisée pour estimer l’erreur d’apprentissage hors échantillon à mesure que chaque nouvel arbre est ajouté au modèle. Le nombre approprié d’arbres à utiliser dans le modèle final est celui qui minimise la RMSE sur l’échantillon de validation.

Pour cet exercice, les principaux arguments de l’appel à xgb.cv() sont :

  • data : une matrice numérique.
  • label : vecteur des valeurs cibles (également numérique).
  • nrounds : nombre maximal d’itérations (arbres à construire).
  • nfold : nombre de plis pour la validation croisée. 5 est un bon choix.
  • objective : "reg:squarederror" pour des cibles continues.
  • eta : le taux d’apprentissage.
  • max_depth : profondeur maximale des arbres.
  • early_stopping_rounds : après ce nombre d’itérations sans amélioration, on arrête.
  • verbose : FALSE pour ne rien afficher.

Cet exercice fait partie du cours

<cours>Apprentissage supervisé en R : Régression</cours>
Voir le cours

Instructions de l’exercice

  • Complétez les blancs pour exécuter xgb.cv() sur les données d’entraînement traitées ; assignez la sortie à la variable cv.
    • Utilisez as.matrix() pour convertir le data frame traité en matrice.
    • Utilisez 50 itérations, et une validation croisée en 5 plis.
    • Définissez early_stopping_rounds à 5.
    • Définissez eta à 0.75, max_depth à 5.
  • Récupérez le data frame evaluation_log depuis cv et assignez-le à la variable elog. Chaque ligne de evaluation_log correspond à un arbre supplémentaire ; le numéro de ligne indique donc le nombre d’arbres dans le modèle.
  • Complétez les blancs pour obtenir le nombre d’arbres correspondant à la valeur minimale des colonnes train_rmse_mean et test_rmse_mean.
    • which.min() (docs) renvoie l’indice de la valeur minimale d’un vecteur.
    • De combien d’arbres avez-vous besoin ?

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
Modifier et exécuter le code