CommencerCommencer gratuitement

Ajuster le nombre d’itérations de boosting

Commençons l’ajustement des hyperparamètres en observant comment le nombre d’itérations de boosting (le nombre d’arbres construits) influe sur les performances hors échantillon de votre modèle XGBoost. Vous utiliserez xgb.cv() dans une boucle for et entraînerez un modèle par valeur du paramètre num_boost_round.

Ici, vous continuez à travailler avec le jeu de données Ames housing. Les variables explicatives sont dans le tableau X, et le vecteur cible est contenu dans y.

Cet exercice fait partie du cours

Extreme Gradient Boosting avec XGBoost

Afficher le cours

Instructions

  • Créez une DMatrix appelée housing_dmatrix à partir de X et y.
  • Créez un dictionnaire de paramètres nommé params, en indiquant la valeur appropriée pour "objective" ("reg:squarederror") et "max_depth" (fixez-le à 3).
  • Itérez sur num_rounds dans une boucle for et effectuez une validation croisée en 3 plis. À chaque itération, transmettez le nombre actuel d’itérations de boosting (curr_num_rounds) à xgb.cv() via l’argument num_boost_round.
  • Ajoutez la RMSE de la dernière itération de boosting pour chaque modèle XGBoost validé croisé à la liste final_rmse_per_round.
  • num_rounds et final_rmse_per_round ont été combinés avec zip puis convertis en DataFrame afin que vous puissiez visualiser facilement les performances du modèle à chaque itération de boosting. Cliquez sur "Soumettre la réponse" pour afficher les résultats !

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# Create the DMatrix: housing_dmatrix
housing_dmatrix = ____

# Create the parameter dictionary for each tree: params 
params = {"____":"____", "____":____}

# Create list of number of boosting rounds
num_rounds = [5, 10, 15]

# Empty list to store final round rmse per XGBoost model
final_rmse_per_round = []

# Iterate over num_rounds and build one model per num_boost_round parameter
for curr_num_rounds in num_rounds:

    # Perform cross-validation: cv_results
    cv_results = ____(dtrain=____, params=____, nfold=3, num_boost_round=____, metrics="rmse", as_pandas=True, seed=123)
    
    # Append final round RMSE
    ____.____(cv_results["test-rmse-mean"].tail().values[-1])

# Print the resultant DataFrame
num_rounds_rmses = list(zip(num_rounds, final_rmse_per_round))
print(pd.DataFrame(num_rounds_rmses,columns=["num_boosting_rounds","rmse"]))
Modifier et exécuter le code