Gradient boosting-maskiner

Övervakad inlärning i R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Hur gradient boosting fungerar

  1. Anpassa ett grunt träd $T_1$ till data: $M_1 = T_1$
Övervakad inlärning i R: Regression

Hur gradient boosting fungerar

  1. Anpassa ett grunt träd $T_1$ till data: $M_1 = T_1$
  2. Anpassa ett träd T_2 till residualerna. Hitta $\gamma$ så att $M_2 = M_1 + \gamma T_2$ ger bäst anpassning till data
Övervakad inlärning i R: Regression

Hur gradient boosting fungerar

Regularisering: inlärningshastighet $\eta \in(0,1)$

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

  • Större $\eta$: snabbare inlärning
  • Mindre $\eta$: lägre risk för överanpassning
Övervakad inlärning i R: Regression

Hur gradient boosting fungerar

  1. Anpassa ett grunt träd $T_1$ till data
    • $M_1 = T_1$
  2. Anpassa ett träd T_2 till residualerna.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Upprepa (2) tills stoppkriterie uppfylls

Slutmodell:

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

Övervakad inlärning i R: Regression

Korsvalidering för att motverka överanpassning

Träningsfelet minskar hela tiden, men testfelet gör det inte

Övervakad inlärning i R: Regression

Bästa praxis (med xgboost())

  1. Kör xgb.cv() med ett stort antal rundor (träd).
Övervakad inlärning i R: Regression

Bästa praxis (med xgboost())

  1. Kör xgb.cv() med ett stort antal rundor (träd).
  2. xgb.cv()$evaluation_log: registrerar uppskattat RMSE per runda.
    • Hitta antalet träd som minimerar uppskattat RMSE: $n_{best}$
Övervakad inlärning i R: Regression

Bästa praxis (med xgboost())

  1. Kör xgb.cv() med ett stort antal rundor (träd).
  2. xgb.cv()$evaluation_log: registrerar uppskattat RMSE per runda.
    • Hitta antalet träd som minimerar uppskattat RMSE: $n_{best}$
  3. Kör xgboost() med nrounds = $n_{best}$
Övervakad inlärning i R: Regression

Exempel: Cykeluthyrningsmodell

Förbered data först

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():

  • Indata: as.matrix(bikesJan.treat)
  • Utfall: bikesJan$cnt
Övervakad inlärning i R: Regression

Träna en modell med 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)

Viktiga parametrar till xgb.cv() och xgboost()

  • data: indata som matris; label: utfall
  • objective: för regression – "reg:squarederror"
  • nrounds: maximalt antal träd att anpassa
  • eta: inlärningshastighet
  • max_depth: maximalt djup för enskilda träd
  • nfold (endast xgb.cv()): antal folds för korsvalidering
Övervakad inlärning i R: Regression

Hitta rätt antal träd

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Övervakad inlärning i R: Regression

Kör xgboost() för slutmodellen

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Övervakad inlärning i R: Regression

Prediktera med en xgboost()-modell

Förbered februaridata och gör prediktioner

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

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

Modellernas prestanda på februaridata

Modell RMSE
Kvasipoisson 69,3
Slumpmässiga skogar 67,15
Gradient boosting 54,0
Övervakad inlärning i R: Regression

Visualisera resultaten

Prediktioner kontra faktiska cykeluthyrningar, februari

Prediktioner och timvisa cykeluthyrningar, februari

Övervakad inlärning i R: Regression

Nu kör vi en övning!

Övervakad inlärning i R: Regression

Preparing Video For Download...