Usare la regolarizzazione in XGBoost
Dopo aver visto un esempio di regolarizzazione l1 nel video, ora varierai la penalizzazione di regolarizzazione l2 - anche nota come "lambda" - e ne osserverai l'effetto sulle prestazioni complessive del modello sul dataset delle case di Ames.
Questo esercizio fa parte del corso
Extreme Gradient Boosting con XGBoost
Istruzioni dell'esercizio
- Crea la tua
DMatrixa partire daXeycome prima. - Crea un dizionario iniziale di parametri specificando
"objective"uguale a"reg:squarederror"e"max_depth"uguale a3. - Usa
xgb.cv()dentro un ciclofore varia in modo sistematico il valore di"lambda"passando l'attuale valore l2 (reg). - Aggiungi il valore di
"test-rmse-mean"dall'ultimo boosting round per ciascun modelloxgboostvalidato in cross-validation. - Premi "Invia risposta" per visualizzare i risultati. Cosa noti?
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Create the DMatrix: housing_dmatrix
housing_dmatrix = xgb.DMatrix(data=X, label=y)
reg_params = [1, 10, 100]
# Create the initial parameter dictionary for varying l2 strength: params
params = {"____":"____","____":____}
# Create an empty list for storing rmses as a function of l2 complexity
rmses_l2 = []
# Iterate over reg_params
for reg in reg_params:
# Update l2 strength
params["lambda"] = ____
# Pass this updated param dictionary into cv
cv_results_rmse = ____.____(dtrain=____, params=____, nfold=2, num_boost_round=5, metrics="rmse", as_pandas=True, seed=123)
# Append best rmse (final round) to rmses_l2
____.____(____["____"].tail(1).values[0])
# Look at best rmse per l2 param
print("Best rmse as a function of l2:")
print(pd.DataFrame(list(zip(reg_params, rmses_l2)), columns=["l2", "rmse"]))