IniziaInizia gratis

Ottimizzare il numero di boosting rounds

Iniziamo con il tuning dei parametri osservando come il numero di boosting rounds (il numero di alberi che costruisci) influisca sulle prestazioni out-of-sample del tuo modello XGBoost. Userai xgb.cv() all'interno di un ciclo for e costruirai un modello per ciascun valore del parametro num_boost_round.

Qui continuerai a lavorare con il dataset Ames housing. Le feature sono disponibili nell'array X, e il vettore target è contenuto in y.

Questo esercizio fa parte del corso

Extreme Gradient Boosting con XGBoost

Visualizza il corso

Istruzioni dell'esercizio

  • Crea un DMatrix chiamato housing_dmatrix a partire da X e y.
  • Crea un dizionario di parametri chiamato params, passando l'"objective" appropriato ("reg:squarederror") e "max_depth" (impostalo a 3).
  • Itera su num_rounds in un ciclo for ed esegui una cross-validation a 3 fold. A ogni iterazione del ciclo, passa il numero corrente di boosting rounds (curr_num_rounds) a xgb.cv() come argomento di num_boost_round.
  • Aggiungi l'RMSE dell'ultimo boosting round per ciascun modello XGBoost validato incrociatamente alla lista final_rmse_per_round.
  • num_rounds e final_rmse_per_round sono stati zippati e convertiti in un DataFrame così puoi vedere facilmente come il modello si comporta con ciascun boosting round. Premi "Invia risposta" per vedere i risultati!

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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"]))
Modifica ed esegui il codice