CommencezCommencez gratuitement

Trouver le bon nombre d'arbres pour une machine à gradient boosting

Dans cet exercice, vous vous préparerez à construire un modèle de gradient boosting pour prédire le nombre de vélos loués à l'heure en fonction de la météo ainsi que du type et du moment de la journée. Vous entraînerez le modèle avec les données du mois de juillet.

Les données de juillet ont été préchargées. Rappelez-vous que bikesJuly.treat n'a plus la colonne de sortie, vous devez donc l'obtenir à partir des données non traitées : bikesJuly$cnt.

Vous utiliserez le paquet xgboost pour ajuster le modèle de random forest. 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 de validation.

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

  • data : une matrice numérique.
  • label : un vecteur de sorties (également numérique).
  • nrounds : le nombre maximal d'itérations (arbres à construire).
  • nfold : le nombre de volets pour la validation croisée. 5 est un bon choix.
  • objective : "reg:squarederror" pour des sorties continues.
  • eta : le taux d'apprentissage.
  • max_depth : la 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.

Cette activité fait partie du cours

Apprentissage supervisé en R : régression

Voir le cours

Instructions de l’exercice

  • Remplissez les espaces vides pour exécuter xgb.cv() sur les données d'entraînement traitées; affectez la sortie à la variable cv.
    • Utilisez as.matrix() pour convertir le tableau de données traité en matrice.
    • Utilisez 50 itérations et une validation croisée à 5 volets.
    • Réglez early_stopping_rounds à 5.
    • Réglez eta à 0.75 et max_depth à 5.
  • Récupérez le tableau de données evaluation_log à partir de cv et affectez-le à la variable elog. Chaque ligne de evaluation_log correspond à un arbre supplémentaire, donc le numéro de ligne indique le nombre d'arbres dans le modèle.
  • Remplissez les espaces vides pour obtenir le nombre d'arbres associé à la valeur minimale des colonnes train_rmse_mean et test_rmse_mean.
    • which.min() (docs) retourne l'indice de la valeur minimale dans 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