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
Instructions de l’exercice
- Créez une
DMatrixnomméehousing_dmatrixà partir deXety. - 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_roundsdans une boucleforet 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 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 (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"]))