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
Instructions
- Créez une
DMatrixappeléehousing_dmatrixà partir deXety. - 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_roundsdans une boucleforet 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’argumentnum_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_roundsetfinal_rmse_per_roundont été combinés aveczippuis 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"]))