ÎncepețiÎncepe gratuit

Ajustarea numărului de runde de boosting

Să începem reglarea parametrilor analizând cum influențează numărul de runde de boosting (adică numărul de arbori construiți) performanța modelului XGBoost pe date nevăzute. Vei folosi xgb.cv() într-o buclă for și vei construi câte un model pentru fiecare valoare a parametrului num_boost_round.

Vei continua să lucrezi cu setul de date Ames housing. Caracteristicile sunt disponibile în array-ul X, iar vectorul țintă se află în y.

Acest exercițiu face parte din cursul

Gradient Boosting Extrem cu XGBoost

Vezi cursul

Instrucțiuni pentru exercițiu

  • Creează un DMatrix numit housing_dmatrix din X și y.
  • Creează un dicționar de parametri numit params, specificând "objective" corespunzător ("reg:squarederror") și "max_depth" (setează-l la 3).
  • Iterează peste num_rounds într-o buclă for și efectuează validare încrucișată cu 3 fold-uri. La fiecare iterație, transmite numărul curent de runde de boosting (curr_num_rounds) către xgb.cv() ca argument pentru num_boost_round.
  • Adaugă RMSE-ul rundei finale de boosting pentru fiecare model XGBoost validat încrucișat în lista final_rmse_per_round.
  • num_rounds și final_rmse_per_round au fost combinate cu zip și convertite într-un DataFrame, astfel încât să poți vedea cu ușurință cum performează modelul la fiecare rundă de boosting. Apasă Trimite răspunsul pentru a vedea rezultatele!

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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"]))
Editează și rulează codul