CommencezCommencez gratuitement

Ajuster le nombre d'itérations de boosting

Commençons l'ajustement des paramètres en observant comment le nombre d'itérations de boosting (le nombre d'arbres construits) influence la performance hors échantillon de votre modèle XGBoost. Vous utiliserez xgb.cv() dans une boucle for et construirez un modèle par valeur du paramètre num_boost_round.

Ici, vous continuez à travailler avec l'ensemble de données sur le logement d'Ames. Les variables explicatives se trouvent dans le tableau X, et le vecteur cible est contenu dans y.

Cette activité fait partie du cours

Amorçage de gradient avancé avec XGBoost

Voir le cours

Instructions de l’exercice

  • Créez une DMatrix nommée housing_dmatrix à partir de X et y.
  • Créez un dictionnaire de paramètres nommé params, en y passant la "objective" appropriée ("reg:squarederror") et "max_depth" (réglez-la à 3).
  • Parcourez num_rounds dans une boucle for et effectuez une validation croisée à 3 volets. À chaque itération, transmettez à xgb.cv() le nombre courant d'itérations de boosting (curr_num_rounds) comme 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 (zip) et convertis en DataFrame pour que vous puissiez voir facilement la performance du modèle à chaque itération de boosting. Cliquez sur "Soumettre la réponse" pour voir les résultats !

Exercice interactif pratique

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

# 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