Bepaal het juiste aantal trees voor een gradient boosting machine
In deze oefening ga je een gradient boosting-model klaarzetten om het aantal gehuurde fietsen per uur te voorspellen op basis van het weer en het type en tijdstip van de dag. Je traint het model op gegevens uit de maand juli.
De gegevens van juli zijn al ingeladen. Onthoud dat bikesJuly.treat de uitkomstkolom niet meer bevat, dus die moet je halen uit de onbehandelde data: bikesJuly$cnt.
Je gebruikt het xgboost-pakket om het random forest-model te fitten. De functie xgb.cv() (docs) gebruikt cross-validatie om de out-of-sample leermis fout te schatten terwijl elke nieuwe tree aan het model wordt toegevoegd. Het juiste aantal trees voor het eindmodel is het aantal dat de holdout-RMSE minimaliseert.
Voor deze oefening zijn de belangrijkste argumenten van de xgb.cv()-aanroep:
data: een numerieke matrix.label: vector met uitkomsten (ook numeriek).nrounds: het maximale aantal rondes (trees om te bouwen).nfold: het aantal folds voor de cross-validatie. 5 is een goed aantal.objective:"reg:squarederror"voor continue uitkomsten.eta: de learning rate.max_depth: maximale diepte van trees.early_stopping_rounds: stop na zoveel rondes zonder verbetering.verbose:FALSEom stil te blijven.
Deze oefening maakt deel uit van de cursus
Supervised Learning in R: Regressie
Oefeninstructies
- Vul de lege plekken in om
xgb.cv()op de behandelde trainingsdata uit te voeren; ken de output toe aan de variabelecv.- Gebruik
as.matrix()om het behandelde data frame naar een matrix om te zetten. - Gebruik 50 rondes en 5-fold cross-validatie.
- Zet
early_stopping_roundsop 5. - Zet
etaop 0.75,max_depthop 5.
- Gebruik
- Haal de data frame
evaluation_loguitcven ken die toe aan de variabeleelog. Elke rij van deevaluation_logkomt overeen met een extra tree, dus het rijnummer geeft het aantal trees in het model aan. - Vul de lege plekken in om het aantal trees te krijgen met de minimumwaarde van de kolommen
train_rmse_meanentest_rmse_mean.which.min()(docs) geeft de index terug van de minimumwaarde in een vector.- Hoeveel trees heb je nodig?
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)