Машины градиентного бустинга

Обучение с учителем в R: регрессия

Nina Zumel and John Mount

Win-Vector, LLC

Как работает градиентный бустинг

  1. Обучите неглубокое дерево $T_1$ на данных: $M_1 = T_1$
Обучение с учителем в R: регрессия

Как работает градиентный бустинг

  1. Обучите неглубокое дерево $T_1$ на данных: $M_1 = T_1$
  2. Обучите дерево T_2 на остатках. Найдите $\gamma$ так, чтобы $M_2 = M_1 + \gamma T_2$ наилучшим образом аппроксимировало данные
Обучение с учителем в R: регрессия

Как работает градиентный бустинг

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

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

  • Большее $\eta$: более быстрое обучение
  • Меньшее $\eta$: меньший риск переобучения
Обучение с учителем в R: регрессия

Как работает градиентный бустинг

  1. Обучите неглубокое дерево $T_1$ на данных
    • $M_1 = T_1$
  2. Обучите дерево T_2 на остатках.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Повторяйте шаг (2) до выполнения условия остановки

Итоговая модель:

$$ 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
Квазипуассон 69,3
Случайный лес 67,15
Градиентный бустинг 54,0
Обучение с учителем в R: регрессия

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

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

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

Обучение с учителем в R: регрессия

Давайте потренируемся!

Обучение с учителем в R: регрессия

Preparing Video For Download...