Gradient boosting machines

Supervised Learning in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Jak funguje gradient boosting

  1. Přizpůsobte mělký strom $T_1$ datům: $M_1 = T_1$
Supervised Learning in R: Regression

Jak funguje gradient boosting

  1. Přizpůsobte mělký strom $T_1$ datům: $M_1 = T_1$
  2. Přizpůsobte strom T_2 reziduálům. Najděte $\gamma$ tak, aby $M_2 = M_1 + \gamma T_2$ nejlépe odpovídal datům
Supervised Learning in R: Regression

Jak funguje gradient boosting

Regularizace: rychlost učení $\eta \in(0,1)$

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

  • Větší $\eta$: rychlejší učení
  • Menší $\eta$: nižší riziko přetrénování
Supervised Learning in R: Regression

Jak funguje gradient boosting

  1. Přizpůsobte mělký strom $T_1$ datům
    • $M_1 = T_1$
  2. Přizpůsobte strom T_2 reziduálům.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Opakujte krok (2) do splnění podmínky zastavení

Výsledný model:

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

Supervised Learning in R: Regression

Křížová validace jako ochrana před přetrénováním

Chyba na trénovacích datech klesá, ale na testovacích nikoliv

Supervised Learning in R: Regression

Doporučený postup (s xgboost())

  1. Spusťte xgb.cv() s velkým počtem kol (stromů).
Supervised Learning in R: Regression

Doporučený postup (s xgboost())

  1. Spusťte xgb.cv() s velkým počtem kol (stromů).
  2. xgb.cv()$evaluation_log: zaznamenává odhadované RMSE pro každé kolo.
    • Najděte počet stromů minimalizující odhadované RMSE: $n_{best}$
Supervised Learning in R: Regression

Doporučený postup (s xgboost())

  1. Spusťte xgb.cv() s velkým počtem kol (stromů).
  2. xgb.cv()$evaluation_log: zaznamenává odhadované RMSE pro každé kolo.
    • Najděte počet stromů minimalizující odhadované RMSE: $n_{best}$
  3. Spusťte xgboost() s nastavením nrounds = $n_{best}$
Supervised Learning in R: Regression

Příklad: Model půjčovny kol

Nejprve připravte data

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

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

Pro xgboost():

  • Vstupní data: as.matrix(bikesJan.treat)
  • Výstup: bikesJan$cnt
Supervised Learning in R: Regression

Trénování modelu pomocí xgboost() / xgb.cv()

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

Hlavní vstupy pro xgb.cv() a xgboost()

  • data: vstupní data jako matice; label: výstup
  • objective: pro regresi – "reg:squarederror"
  • nrounds: maximální počet stromů
  • eta: rychlost učení
  • max_depth: maximální hloubka stromů
  • nfold (pouze xgb.cv()): počet foldů pro křížovou validaci
Supervised Learning in R: Regression

Nalezení optimálního počtu stromů

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

Spuštění xgboost() pro výsledný model

nrounds <- 78

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

Predikce pomocí modelu xgboost()

Připravte únorová data a proveďte predikci

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

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

Výkonnost modelů na únorových datech

Model RMSE
Quasipoisson 69,3
Random forests 67,15
Gradient Boosting 54,0
Supervised Learning in R: Regression

Vizualizace výsledků

Predikce vs. skutečné výpůjčky kol, únor

Predikce a hodinové výpůjčky kol, únor

Supervised Learning in R: Regression

Pojďme si procvičit!

Supervised Learning in R: Regression

Preparing Video For Download...