Najdi správný počet stromů pro gradient boosting machine
V tomto cvičení se připravíš na sestavení modelu gradient boosting, který bude předpovídat počet vypůjčených kol za hodinu v závislosti na počasí, typu dne a denní době. Model natrénuješ na datech z července.
Julová data jsou předem načtena. Nezapomeň, že bikesJuly.treat už neobsahuje sloupec s výstupní proměnnou – ten musíš načíst z neupravených dat: bikesJuly$cnt.
K natrénování modelu použiješ balíček xgboost. Funkce xgb.cv() (docs) využívá křížovou validaci k odhadu chyby na nových datech s každým přidaným stromem. Optimální počet stromů pro finální model je ten, při kterém je RMSE na validační sadě nejnižší.
Pro toto cvičení jsou klíčové následující argumenty funkce xgb.cv():
data: numerická matice.label: vektor výstupních hodnot (také numerický).nrounds: maximální počet kol (stromů k natrénování).nfold: počet skupin pro křížovou validaci. Hodnota 5 je dobrá volba.objective:"reg:squarederror"pro spojité výstupní proměnné.eta: rychlost učení.max_depth: maximální hloubka stromů.early_stopping_rounds: po tolika kolech bez zlepšení se trénování zastaví.verbose:FALSEpro tichý režim.
Toto cvičení je součástí kurzu
Supervised Learning in R: Regression
Pokyny k cvičení
- Doplň chybějící části a spusť
xgb.cv()na upravených trénovacích datech; výsledek ulož do proměnnécv.- Pomocí
as.matrix()převeď upravený datový rámec na matici. - Použij 50 kol a 5násobnou křížovou validaci.
- Nastav
early_stopping_roundsna 5. - Nastav
etana 0.75 amax_depthna 5.
- Pomocí
- Načti datový rámec
evaluation_logzcva ulož ho do proměnnéelog. Každý řádekevaluation_logodpovídá jednomu přidanému stromu, takže číslo řádku ti říká, kolik stromů model obsahuje. - Doplň chybějící části pro nalezení počtu stromů s minimální hodnotou sloupců
train_rmse_meanatest_rmse_mean.- Funkce
which.min()(docs) vrátí index minimální hodnoty ve vektoru. - Kolik stromů tedy potřebuješ?
- Funkce
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# Run xgb.cv
cv <- xgb.cv(data = ____,
label = ___,
nrounds = ___,
nfold = ___,
objective = "reg:squarederror",
eta = ___,
max_depth = ___,
early_stopping_rounds = ___,
verbose = FALSE # silent
)
# Get the evaluation log
elog <- ___
# Determine and print how many trees minimize training and test error
elog %>%
summarize(ntrees.train = ___, # find the index of min(train_rmse_mean)
ntrees.test = ___) # find the index of min(test_rmse_mean)