Tengo una clase de datos desequilibrados y quiero ajustar los hiperparámetros del trenzado reforzado usando xgboost.
Preguntas
- ¿Hay un equivalente de gridsearchcv o randomsearchcv para xgboost?
- Si no, ¿cuál es el enfoque recomendado para ajustar los parámetros de xgboost?
machine-learning
cross-validation
xgboost
boosting
GeorgeOfTheRF
fuente
fuente

xgboost(max.depth)oxgb.train(max_depth)? ¿Xgboost usa inconsistentemente punto vs guión bajo para el parámetro en diferentes lugares? ¿O están convertidos?Respuestas:
Dado que la interfaz de
xgboostincaretha cambiado recientemente, aquí hay un script que proporciona un tutorial completamente comentado sobre el usocaretpara ajustarxgboosthiperparámetros.Para esto, utilizaré los datos de entrenamiento de la competencia de Kaggle "Give Me Some Credit" .
1. Ajustar un
xgboostmodeloEn esta sección, nosotros:
xgboostmodelo con hiperparámetros arbitrariosxgb.cv)Aquí hay un código para hacer esto.
Así es como se ve el AUC de prueba versus entrenamiento:
2. Búsqueda de hiperparámetros usando
trainPara la búsqueda de hiperparámetros, realizamos los siguientes pasos:
data.framecon combinaciones únicas de parámetros para los que queremos modelos entrenados.Aquí hay un código que muestra cómo hacer esto.
Por último, puede crear un diagrama de burbujas para el AUC sobre las variaciones de
etaymax_depth:fuente
xgboostparámetros ahora existe, en particular el soporte paragammaes nuevo. Aquí hay una lista completa de los parámetros admitidos.scale_pose_weightpara clasificación desequilibrada. ¿Puede proporcionar detalles sobre cómo hacerlo? ¡Gracias!scale_pos_weightahora está documentado en la documentación del parámetro .scale_pos_weightno es un parámetro de ajuste de intercalación, pero puede compararlo manualmente. En mi caso, usar el peso tuvo poco efecto (clasificación binaria,> 20% de resultados positivos)El paquete Caret ha incorporado xgboost.
Salida de muestra
Un inconveniente que veo es que otros parámetros de xgboost como la submuestra, etc., no son compatibles con caret actualmente.
Editar
Gamma, colsample_bytree, min_child_weight y subsample, etc. ahora se pueden ajustar directamente (junio de 2017) utilizando Caret. Simplemente agréguelos en la parte de la cuadrícula del código anterior para que funcione. Gracias usεr11852 por resaltarlo en el comentario.
fuente
caretahora (-2017 febrero) soporta parámetros adicionales paragamma,colsample_bytree,min_child_weightysubsample. (Así que efectivamente puede sintonizar casi todo - tiempo dado)Sé que esta es una vieja pregunta, pero uso un método diferente de los anteriores. Utilizo la función BayesianOptimization del paquete Bayesian Optimization para encontrar parámetros óptimos. Para hacer esto, primero cree pliegues de validación cruzada, luego cree una función
xgb.cv.bayesque tenga como parámetros los hiperparámetros de impulso que desea cambiar. En este ejemplo estoy sintonizandomax.depth, min_child_weight, subsample, colsample_bytree, gamma. Luego llamaxgb.cva esa función con los hiperparámetros establecidos en los parámetros de entrada dexgb.cv.bayes. Luego llamaBayesianOptimizationcon losxgb.cv.bayesrangos deseados de los hiperparámetros de refuerzo.init_pointses el número de modelos iniciales con hiperparámetros tomados al azar de los rangos especificados, yn_iteres el número de rondas de modelos después de los puntos iniciales. La función genera todos los parámetros de refuerzo y el AUC de prueba.fuente
Esta es una pregunta anterior, pero pensé que compartiría cómo ajusto los parámetros de xgboost. Originalmente pensé que usaría caret para esto, pero recientemente encontré un problema para manejar todos los parámetros, así como los valores faltantes. También estaba considerando escribir un ciclo iterativo a través de diferentes combinaciones de parámetros, pero quería que se ejecutara en paralelo y requeriría demasiado tiempo. El uso de gridSearch del paquete NMOF proporcionó lo mejor de ambos mundos (todos los parámetros, así como el procesamiento paralelo). Aquí hay un código de ejemplo para la clasificación binaria (funciona en Windows y Linux):
fuente