Máquinas de gradient boosting

Aprendizaje supervisado en R: Regresión

Nina Zumel and John Mount

Win-Vector, LLC

Cómo funciona Gradient Boosting

  1. Ajusta un árbol poco profundo $T_1$ a los datos: $M_1 = T_1$
Aprendizaje supervisado en R: Regresión

Cómo funciona Gradient Boosting

  1. Ajusta un árbol poco profundo $T_1$ a los datos: $M_1 = T_1$
  2. Ajusta un árbol $T_2$ a los residuos. Busca $\gamma$ tal que $M_2 = M_1 + \gamma T_2$ sea el mejor ajuste a los datos
Aprendizaje supervisado en R: Regresión

Cómo funciona Gradient Boosting

Regularización: tasa de aprendizaje $\eta \in(0,1)$

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

  • $\eta$ mayor: aprende más rápido
  • $\eta$ menor: menos riesgo de sobreajuste
Aprendizaje supervisado en R: Regresión

Cómo funciona Gradient Boosting

  1. Ajusta un árbol poco profundo $T_1$ a los datos
    • $M_1 = T_1$
  2. Ajusta un árbol $T_2$ a los residuos.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Repite (2) hasta cumplir la condición de parada

Modelo final:

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

Aprendizaje supervisado en R: Regresión

Validación cruzada para evitar sobreajuste

El error de entrenamiento sigue bajando, pero el de prueba no

Aprendizaje supervisado en R: Regresión

Mejores prácticas (con xgboost())

  1. Ejecuta xgb.cv() con un número grande de rondas (árboles).
Aprendizaje supervisado en R: Regresión

Mejores prácticas (con xgboost())

  1. Ejecuta xgb.cv() con un número grande de rondas (árboles).
  2. xgb.cv()$evaluation_log: registra el RMSE estimado por ronda.
    • Encuentra el número de árboles que minimiza el RMSE estimado: $n_{best}$
Aprendizaje supervisado en R: Regresión

Mejores prácticas (con xgboost())

  1. Ejecuta xgb.cv() con un número grande de rondas (árboles).
  2. xgb.cv()$evaluation_log: registra el RMSE estimado por ronda.
    • Encuentra el número de árboles que minimiza el RMSE estimado: $n_{best}$
  3. Ejecuta xgboost(), estableciendo nrounds = $n_{best}$
Aprendizaje supervisado en R: Regresión

Ejemplo: modelo de alquiler de bicis

Primero, prepara los datos

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

  • Datos de entrada: as.matrix(bikesJan.treat)
  • Variable objetivo: bikesJan$cnt
Aprendizaje supervisado en R: Regresión

Entrenar un modelo con 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)

Entradas clave para xgb.cv() y xgboost()

  • data: datos de entrada como matriz ; label: objetivo
  • objective: para regresión - "reg:squarederror"
  • nrounds: número máximo de árboles a ajustar
  • eta: tasa de aprendizaje
  • max_depth: profundidad máxima de cada árbol
  • nfold (solo xgb.cv()): número de particiones para validación cruzada
Aprendizaje supervisado en R: Regresión

Encuentra el número adecuado de árboles

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Aprendizaje supervisado en R: Regresión

Ejecuta xgboost() para el 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)
Aprendizaje supervisado en R: Regresión

Predecir con un modelo de xgboost()

Prepara los datos de febrero y predice

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

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

Rendimiento del modelo en los datos de febrero

Modelo RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
Aprendizaje supervisado en R: Regresión

Visualiza los resultados

Predicciones vs. alquileres reales de bicis, febrero

Predicciones y alquileres por hora, febrero

Aprendizaje supervisado en R: Regresión

¡Vamos a practicar!

Aprendizaje supervisado en R: Regresión

Preparing Video For Download...