Začněte nyníZačněte zdarma

Ladění počtu boosting rounds

Začneme ladění parametrů tím, že zjistíme, jak počet boosting rounds (tedy počet stromů, které model sestaví) ovlivňuje výkon tvého XGBoost modelu na neviděných datech. Použiješ xgb.cv() uvnitř smyčky for a pro každou hodnotu parametru num_boost_round sestavíš jeden model.

Budeme pokračovat s datasetem Ames housing. Příznaky jsou dostupné v poli X, cílový vektor je uložen v y.

Toto cvičení je součástí kurzu

Extreme Gradient Boosting with XGBoost

Zobrazit kurz

Pokyny k cvičení

  • Z X a y vytvoř DMatrix s názvem housing_dmatrix.
  • Vytvoř slovník parametrů params a zadej příslušný "objective" ("reg:squarederror") a "max_depth" (nastav na 3).
  • Iteruj přes num_rounds ve smyčce for a proveď 3-fold křížovou validaci. V každé iteraci předej aktuální počet boosting rounds (curr_num_rounds) funkci xgb.cv() jako argument num_boost_round.
  • Přidej výslednou hodnotu RMSE posledního boosting round pro každý křížově validovaný XGBoost model do seznamu final_rmse_per_round.
  • num_rounds a final_rmse_per_round byly zkombinovány metodou zip a převedeny do DataFrame, abys snadno viděl/a, jak si model vede v každém boosting round. Klikni na 'Submit Answer' a prohlédni si výsledky!

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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"]))
Upravit a spustit kód