LoslegenKostenlos starten

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>
Kurs ansehen

Übungsanweisungen

  • Fülle die Lücken, um xgb.cv() auf den behandelten Trainingsdaten auszuführen; weise die Ausgabe der Variablen cv zu.
    • Verwende as.matrix(), um den behandelten Data Frame in eine Matrix zu konvertieren.
    • Nutze 50 Runden und 5-fache Kreuzvalidierung.
    • Setze early_stopping_rounds auf 5.
    • Setze eta auf 0.75, max_depth auf 5.
  • Hole den Data Frame evaluation_log aus cv und weise ihn der Variablen elog zu. Jede Zeile des evaluation_log entspricht 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_mean und test_rmse_mean zu 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)
Code bearbeiten und ausführen