Finde die richtige Anzahl an Bäumen für eine Gradient-Boosting-Machine
In dieser Übung bereitest du dich darauf vor, ein Gradient-Boosting-Modell zu bauen, das die stündlich ausgeliehenen Fahrräder in Abhängigkeit vom Wetter sowie von Art und Tageszeit vorhersagt. Du trainierst das Modell mit Daten aus dem Monat Juli.
Die Juli-Daten sind bereits geladen. Denk daran: bikesJuly.treat enthält die Zielvariable nicht mehr, du musst sie daher aus den unbehandelten Daten holen: bikesJuly$cnt.
Du verwendest das Paket xgboost, um das Random-Forest-Modell zu fitten. Die Funktion xgb.cv() (docs) nutzt Kreuzvalidierung, um den Out-of-Sample-Lernfehler zu schätzen, während jeder neue Baum zum Modell hinzugefügt wird. Die passende Anzahl an Bäumen für das finale Modell ist die Anzahl, die die Holdout-RMSE minimiert.
Für diese Übung sind die wichtigsten Argumente beim Aufruf von xgb.cv():
data: eine numerische Matrix.label: Vektor der Zielwerte (ebenfalls numerisch).nrounds: die maximale Anzahl an Runden (zu bauende Bäume).nfold: die Anzahl der Folds für die Kreuzvalidierung. 5 ist ein guter Wert.objective:"reg:squarederror"für stetige Zielgrößen.eta: die Lernrate.max_depth: maximale Tiefe der Bäume.early_stopping_rounds: nach so vielen Runden ohne Verbesserung wird abgebrochen.verbose:FALSE, um keine Ausgaben zu erhalten.
Diese Übung ist Teil des Kurses
<Kurs>Überwachtes Lernen in R: Regression</Kurs>Übungsanweisungen
- Fülle die Lücken, um
xgb.cv()auf den behandelten Trainingsdaten auszuführen; weise die Ausgabe der Variablencvzu.- Verwende
as.matrix(), um den behandelten Data Frame in eine Matrix zu konvertieren. - Nutze 50 Runden und 5-fache Kreuzvalidierung.
- Setze
early_stopping_roundsauf 5. - Setze
etaauf 0.75,max_depthauf 5.
- Verwende
- Hole den Data Frame
evaluation_logauscvund weise ihn der Variablenelogzu. Jede Zeile desevaluation_logentspricht einem zusätzlichen Baum, die Zeilennummer gibt also die Anzahl der Bäume im Modell an. - Fülle die Lücken, um die Anzahl der Bäume mit dem Minimalwert der Spalten
train_rmse_meanundtest_rmse_meanzu ermitteln.which.min()(docs) gibt den Index des Minimalwerts in einem Vektor zurück.- Wie viele Bäume brauchst du?
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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)