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:FALSEpara no mostrar mensajes.
Este ejercicio forma parte del curso
Aprendizaje supervisado en R: Regresión
Instrucciones del ejercicio
- Rellena los huecos para ejecutar
xgb.cv()sobre los datos tratados de entrenamiento; asigna la salida a la variablecv.- Usa
as.matrix()para convertir el data frame tratado a matriz. - Usa 50 rondas y validación cruzada de 5 particiones.
- Establece
early_stopping_roundsen 5. - Establece
etaen 0.75 ymax_depthen 5.
- Usa
- Obtén el data frame
evaluation_logdecvy asígnalo a la variableelog. Cada fila deevaluation_logcorresponde 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_meanytest_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)