Cada vez que trabajo con xgboost, a menudo hago mi propia búsqueda de parámetros homebrew, pero puedes hacerlo con el paquete caret, como KrisP que acabo de mencionar.
- Signo de intercalación
Consulte esta respuesta en Cross Validated para obtener una explicación exhaustiva sobre cómo usar el paquete caret para la búsqueda de hiperparámetros en xgboost.
¿Cómo ajustar los hiperparámetros de los árboles xgboost?
- Búsqueda de cuadrícula personalizada
A menudo comienzo con algunas suposiciones basadas en las diapositivas de Owen Zhang sobre consejos para la ciencia de datos P. 14
Aquí puede ver que en su mayoría necesitará ajustar el muestreo de filas, el muestreo de columnas y tal vez la profundidad máxima del árbol. Así es como hago una búsqueda personalizada de muestreo de filas y columnas para un problema en el que estoy trabajando en este momento:
searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1),
colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100
#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)
rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){
#Extract Parameters to test
currentSubsampleRate <- parameterList[["subsample"]]
currentColsampleRate <- parameterList[["colsample_bytree"]]
xgboostModelCV <- xgb.cv(data = DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE,
metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
"objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,
"subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)
xvalidationScores <- as.data.frame(xgboostModelCV)
#Save rmse of the last iteration
rmse <- tail(xvalidationScores$test.rmse.mean, 1)
return(c(rmse, currentSubsampleRate, currentColsampleRate))
})
Y combinado con algo de magia ggplot2 usando los resultados de esa función de aplicación, puede trazar una representación gráfica de la búsqueda.
En esta gráfica, los colores más claros representan un error menor y cada bloque representa una combinación única de muestreo de columna y muestreo de fila. Entonces, si desea realizar una búsqueda adicional de say eta (o profundidad de árbol), terminará con una de estas gráficas para cada parámetro eta probado.
Veo que tiene una métrica de evaluación diferente (RMPSE), solo conéctela en la función de validación cruzada y obtendrá el resultado deseado. Además de eso, no me preocuparía demasiado por ajustar los otros parámetros porque hacerlo no mejorará demasiado el rendimiento, al menos no tanto en comparación con pasar más tiempo diseñando características o limpiando los datos.
- Otros
La búsqueda aleatoria y la selección de parámetros bayesianos también son posibles, pero aún no he realizado / encontrado una implementación de ellos.
Aquí hay una buena introducción a la optimización bayesiana de hiperparámetros por Max Kuhn, creador de caret.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html
rBayesianOptimization
paquete hace que la implementación de BO sea bastante sencillaPuede usar el paquete de intercalación para realizar una búsqueda de espacio de hiperparámetro, ya sea a través de una búsqueda de cuadrícula o mediante una búsqueda aleatoria .
fuente
Grid, Random, Bayesian y PSO ... etc.
Cuando trabajas con XGBoost, todo lo anterior no importa, porque XGB es realmente rápido, por lo que puedes usar Grid con muchos hiperparámetros hasta que encuentres tu solución.
Una cosa que puede ayudarlo: use un método aproximado, siempre me da el error ms bajo.
fuente