Gradient boosting machines

Aprendizado Supervisionado em R: Regressão

Nina Zumel and John Mount

Win-Vector, LLC

Como funciona o Gradient Boosting

  1. Ajuste uma árvore rasa $T_1$ aos dados: $M_1 = T_1$
Aprendizado Supervisionado em R: Regressão

Como funciona o Gradient Boosting

  1. Ajuste uma árvore rasa $T_1$ aos dados: $M_1 = T_1$
  2. Ajuste uma árvore $T_2$ aos resíduos. Encontre $\gamma$ tal que $M_2 = M_1 + \gamma T_2$ seja o melhor ajuste aos dados
Aprendizado Supervisionado em R: Regressão

Como funciona o Gradient Boosting

Regularização: taxa de aprendizado $\eta \in(0,1)$

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

  • $\eta$ maior: aprendizado mais rápido
  • $\eta$ menor: menos risco de overfit
Aprendizado Supervisionado em R: Regressão

Como funciona o Gradient Boosting

  1. Ajuste uma árvore rasa $T_1$ aos dados
    • $M_1 = T_1$
  2. Ajuste uma árvore $T_2$ aos resíduos.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Repita (2) até atender ao critério de parada

Modelo final:

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

Aprendizado Supervisionado em R: Regressão

Validação cruzada para evitar overfit

O erro de treino segue caindo, mas o erro de teste não

Aprendizado Supervisionado em R: Regressão

Boas práticas (com xgboost())

  1. Rode xgb.cv() com um número grande de rodadas (árvores).
Aprendizado Supervisionado em R: Regressão

Boas práticas (com xgboost())

  1. Rode xgb.cv() com um número grande de rodadas (árvores).
  2. xgb.cv()$evaluation_log: registra o RMSE estimado em cada rodada.
    • Encontre o número de árvores que minimiza o RMSE estimado: $n_{best}$
Aprendizado Supervisionado em R: Regressão

Boas práticas (com xgboost())

  1. Rode xgb.cv() com um número grande de rodadas (árvores).
  2. xgb.cv()$evaluation_log: registra o RMSE estimado em cada rodada.
    • Encontre o número de árvores que minimiza o RMSE estimado: $n_{best}$
  3. Rode xgboost(), definindo nrounds = $n_{best}$
Aprendizado Supervisionado em R: Regressão

Exemplo: modelo de aluguel de bikes

Primeiro, prepare os dados

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

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

Para xgboost():

  • Dados de entrada: as.matrix(bikesJan.treat)
  • Variável-alvo: bikesJan$cnt
Aprendizado Supervisionado em R: Regressão

Treinando um modelo com 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)

Principais entradas de xgb.cv() e xgboost()

  • data: dados de entrada como matriz ; label: alvo
  • objective: para regressão - "reg:squarederror"
  • nrounds: número máximo de árvores a ajustar
  • eta: taxa de aprendizado
  • max_depth: profundidade máxima das árvores
  • nfold (apenas xgb.cv()): número de folds na validação cruzada
Aprendizado Supervisionado em R: Regressão

Encontrar o número ideal de árvores

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Aprendizado Supervisionado em R: Regressão

Rodar xgboost() para o modelo final

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Aprendizado Supervisionado em R: Regressão

Prever com um modelo xgboost()

Prepare os dados de fevereiro e faça previsões

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

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

Desempenho do modelo em fevereiro

Model RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
Aprendizado Supervisionado em R: Regressão

Visualizar os resultados

Previsões vs. aluguéis reais de bikes, fevereiro

Previsões e aluguéis horários de bikes, fevereiro

Aprendizado Supervisionado em R: Regressão

Vamos praticar!

Aprendizado Supervisionado em R: Regressão

Preparing Video For Download...