Gradient Boosting Machines

Überwachtes Lernen in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

So funktioniert Gradient Boosting

  1. Passe einen flachen Baum $T_1$ an die Daten an: $M_1 = T_1$
Überwachtes Lernen in R: Regression

So funktioniert Gradient Boosting

  1. Passe einen flachen Baum $T_1$ an die Daten an: $M_1 = T_1$
  2. Passe einen Baum $T_2$ an die Residuen an. Finde $\gamma$ so, dass $M_2 = M_1 + \gamma T_2$ die beste Anpassung an die Daten ist
Überwachtes Lernen in R: Regression

So funktioniert Gradient Boosting

Regularisierung: Lernrate $\eta \in(0,1)$

$$ M_2 = M_1 + \eta \gamma T_2 $$

  • Größeres $\eta$: schnelleres Lernen
  • Kleineres $\eta$: geringeres Overfitting-Risiko
Überwachtes Lernen in R: Regression

So funktioniert Gradient Boosting

  1. Passe einen flachen Baum $T_1$ an die Daten an
    • $M_1 = T_1$
  2. Passe einen Baum $T_2$ an die Residuen an.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Wiederhole (2), bis die Stoppbedingung erfüllt ist

Endgültiges Modell:

$$ M = M_1 + \eta \sum \gamma_i T_i $$

Überwachtes Lernen in R: Regression

Cross-Validation gegen Overfitting

Trainingsfehler sinkt weiter, Testfehler nicht

Überwachtes Lernen in R: Regression

Best Practice (mit xgboost())

  1. Führe xgb.cv() mit vielen Runden (Bäumen) aus.
Überwachtes Lernen in R: Regression

Best Practice (mit xgboost())

  1. Führe xgb.cv() mit vielen Runden (Bäumen) aus.
  2. xgb.cv()$evaluation_log: protokolliert die geschätzte RMSE je Runde.
    • Finde die Baumanzahl mit minimaler RMSE: $n_{best}$
Überwachtes Lernen in R: Regression

Best Practice (mit xgboost())

  1. Führe xgb.cv() mit vielen Runden (Bäumen) aus.
  2. xgb.cv()$evaluation_log: protokolliert die geschätzte RMSE je Runde.
    • Finde die Baumanzahl mit minimaler RMSE: $n_{best}$
  3. Führe xgboost() aus und setze nrounds = $n_{best}$
Überwachtes Lernen in R: Regression

Beispiel: Bike-Rental-Modell

Zuerst die Daten vorbereiten

treatplan <- designTreatmentsZ(bikesJan, vars)
newvars <- treatplan$scoreFrame %>%
     filter(code %in% c("clean", "lev")) %>%
     use_series(varName)

bikesJan.treat <- prepare(treatplan, bikesJan, varRestriction = newvars)

Für xgboost():

  • Eingabedaten: as.matrix(bikesJan.treat)
  • Zielvariable: bikesJan$cnt
Überwachtes Lernen in R: Regression

Ein Modell mit xgboost() / xgb.cv() trainieren

cv <- xgb.cv(data = as.matrix(bikesJan.treat), label = bikesJan$cnt,
              objective = "reg:squarederror",
              nrounds = 100, nfold = 5, eta = 0.3, max_depth = 6)

Wichtige Inputs für xgb.cv() und xgboost()

  • data: Eingabedaten als Matrix ; label: Zielvariable
  • objective: für Regression – "reg:squarederror"
  • nrounds: maximale Anzahl zu fitten Bäume
  • eta: Lernrate
  • max_depth: maximale Tiefe einzelner Bäume
  • nfold (nur xgb.cv()): Anzahl Folds fürs Cross-Validation
Überwachtes Lernen in R: Regression

Die richtige Anzahl Bäume finden

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Überwachtes Lernen in R: Regression

xgboost() fürs Endmodell ausführen

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Überwachtes Lernen in R: Regression

Mit einem xgboost()-Modell vorhersagen

Februar-Daten vorbereiten und vorhersagen

bikesFeb.treat <- prepare(treatplan, bikesFeb, varRestriction = newvars)

bikesFeb$pred <- predict(model, as.matrix(bikesFeb.treat))

Modellgüte auf Februar-Daten

Model RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
Überwachtes Lernen in R: Regression

Ergebnisse visualisieren

Vorhersagen vs. tatsächliche Bike-Verleihzahlen, Februar

Vorhersagen und stündliche Bike-Verleihzahlen, Februar

Überwachtes Lernen in R: Regression

Lass uns üben!

Überwachtes Lernen in R: Regression

Preparing Video For Download...