EmpezarEmpieza gratis

Encuentra el número adecuado de árboles para un gradient boosting machine

En este ejercicio, te prepararás para construir un modelo de gradient boosting para predecir el número de bicicletas alquiladas en una hora en función del tiempo y del tipo y momento del día. Entrenarás el modelo con datos del mes de julio.

Los datos de julio ya están precargados. Recuerda que bikesJuly.treat ya no tiene la columna de salida, así que debes obtenerla de los datos sin tratar: bikesJuly$cnt.

Usarás el paquete xgboost para ajustar el modelo de random forest. La función xgb.cv() (docs) utiliza validación cruzada para estimar el error de aprendizaje fuera de muestra a medida que se añade cada nuevo árbol al modelo. El número adecuado de árboles para el modelo final es aquel que minimiza el RMSE de validación.

Para este ejercicio, los argumentos clave de la llamada a xgb.cv() son:

  • data: una matriz numérica.
  • label: vector de resultados (también numérico).
  • nrounds: el número máximo de rondas (árboles a construir).
  • nfold: el número de particiones para la validación cruzada. 5 es un buen valor.
  • objective: "reg:squarederror" para salidas continuas.
  • eta: la tasa de aprendizaje.
  • max_depth: profundidad máxima de los árboles.
  • early_stopping_rounds: tras este número de rondas sin mejora, se detiene.
  • verbose: FALSE para no mostrar mensajes.

Este ejercicio forma parte del curso

Aprendizaje supervisado en R: Regresión

Ver curso

Instrucciones del ejercicio

  • Rellena los huecos para ejecutar xgb.cv() sobre los datos tratados de entrenamiento; asigna la salida a la variable cv.
    • Usa as.matrix() para convertir el data frame tratado a matriz.
    • Usa 50 rondas y validación cruzada de 5 particiones.
    • Establece early_stopping_rounds en 5.
    • Establece eta en 0.75 y max_depth en 5.
  • Obtén el data frame evaluation_log de cv y asígnalo a la variable elog. Cada fila de evaluation_log corresponde a un árbol adicional, por lo que el número de fila indica el número de árboles del modelo.
  • Rellena los huecos para obtener el número de árboles con el valor mínimo de las columnas train_rmse_mean y test_rmse_mean.
    • which.min() (docs) devuelve el índice del valor mínimo en un vector.
    • ¿Cuántos árboles necesitas?

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
Editar y ejecutar código