Gradient boosting machines

Кероване навчання в R: регресія

Nina Zumel and John Mount

Win-Vector, LLC

Як працює Gradient Boosting

  1. Навчіть неглибоке дерево $T_1$ на даних: $M_1 = T_1$
Кероване навчання в R: регресія

Як працює Gradient Boosting

  1. Навчіть неглибоке дерево $T_1$ на даних: $M_1 = T_1$
  2. Навчіть дерево T_2 на залишках. Знайдіть $\gamma$ так, щоб $M_2 = M_1 + \gamma T_2$ було найкращою апроксимацією даних
Кероване навчання в R: регресія

Як працює Gradient Boosting

Регуляризація: швидкість навчання $\eta \in(0,1)$

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

  • Більше $\eta$: швидше навчання
  • Менше $\eta$: менший ризик перенавчання
Кероване навчання в R: регресія

How Gradient Boosting Works

  1. Fit a shallow tree $T_1$ to the data
    • $M_1 = T_1$
  2. Fit a tree T_2 to the residuals.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Repeat (2) until stopping condition met

Final Model:

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

Кероване навчання в R: регресія

Крос-валідація проти перенавчання

Помилка на тренуванні зменшується, але тестова — ні

Кероване навчання в R: регресія

Найкраща практика (з xgboost())

  1. Запустіть xgb.cv() з великою кількістю раундів (дерев).
Кероване навчання в R: регресія

Найкраща практика (з xgboost())

  1. Запустіть xgb.cv() з великою кількістю раундів (дерев).
  2. xgb.cv()$evaluation_log: зберігає оцінений RMSE для кожного раунду.
    • Знайдіть кількість дерев, що мінімізує RMSE: $n_{best}$
Кероване навчання в R: регресія

Найкраща практика (з xgboost())

  1. Запустіть xgb.cv() з великою кількістю раундів (дерев).
  2. xgb.cv()$evaluation_log: зберігає оцінений RMSE для кожного раунду.
    • Знайдіть кількість дерев, що мінімізує RMSE: $n_{best}$
  3. Запустіть xgboost(), встановивши nrounds = $n_{best}$
Кероване навчання в R: регресія

Приклад: модель прокату велосипедів

Спершу підготуйте дані

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

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

Для xgboost():

  • Вхідні дані: as.matrix(bikesJan.treat)
  • Ціль: bikesJan$cnt
Кероване навчання в R: регресія

Навчання моделі з 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)

Ключові параметри xgb.cv() і xgboost()

  • data: вхідні дані як матриця ; label: ціль
  • objective: для регресії — "reg:squarederror"
  • nrounds: макс. кількість дерев для навчання
  • eta: швидкість навчання
  • max_depth: макс. глибина окремих дерев
  • nfold (лише xgb.cv()): кількість фолдів для крос-валідації
Кероване навчання в R: регресія

Знайдіть оптимальну кількість дерев

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Кероване навчання в R: регресія

Запустіть xgboost() для фінальної моделі

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Кероване навчання в R: регресія

Прогноз з моделлю xgboost()

Підготуйте дані за лютий і зробіть прогноз

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

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

Якість моделі на даних лютого

Модель RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
Кероване навчання в R: регресія

Візуалізація результатів

Прогнози vs фактичний прокат велосипедів, лютий

Прогнози та погодинний прокат велосипедів, лютий

Кероване навчання в R: регресія

Давайте потренуємось!

Кероване навчання в R: регресія

Preparing Video For Download...