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
Pokyny k cvičení
- Z
XayvytvořDMatrixs názvemhousing_dmatrix. - Vytvoř slovník parametrů
paramsa zadej příslušný"objective"("reg:squarederror") a"max_depth"(nastav na3). - Iteruj přes
num_roundsve smyčcefora proveď 3-fold křížovou validaci. V každé iteraci předej aktuální počet boosting rounds (curr_num_rounds) funkcixgb.cv()jako argumentnum_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_roundsafinal_rmse_per_roundbyly 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"]))