Ajuste eficiente de los parámetros de XGBoostHola @russ_wolfinger ,
He estado trabajando en la construcción de modelos con XGBoost y comparándolos con otros modelos de árbol y modelos que no son de árbol, como NN, entre otros. Estoy haciendo un enfoque similar a Nate y reteniendo una parte de mi conjunto de datos original (en una tabla de datos completamente diferente) y luego uso la plataforma de comparación de modelos para ver qué tan bien se comparan estos modelos entre sí con el conjunto de datos de prueba.
Descubro que XGBoost no está funcionando tan bien en el conjunto de datos de prueba como hubiera esperado. Encuentro que el bosque bootstrap hace un mejor trabajo en la actualidad. He comparado el valor predeterminado y lo que sigue como el mejor resultado de una tabla de ajuste para un XGBoost optimizado. Puede ser que no esté ajustando muy bien el ajuste, así que me pregunto si hay una forma más eficiente de ajustar el ajuste ya que hay tantos parámetros diferentes que se pueden modificar.
Revisé los ejemplos y leí la documentación en línea a la que se hace referencia en la ayuda en PDF, pero no hay mucha descripción para obtener ayuda práctica cuando se trata de ajustar el modelo. Como nota, estoy usando la validación de retención única y no la validación cruzada de k-fold. ¿Es mejor construir primero un modelo muy complejo que podría sobreajustarse ligeramente y luego podarlo con los otros parámetros para hacerlo más conservador?
DS
Re: ajuste eficiente de los parámetros de XGBoostHola @russ_wolfinger ,
Gracias por la información actualizada. Probé lo mejor que pude la salida de un árbol potenciado optimizado y un bosque de arranque contra XGBoost, después de ajustar XGBoost cerca de las otras plataformas que pude y las salidas estaban bien correlacionadas. ¡No exacto, pero muy cerca!
Seguir el procedimiento en el enlace que publiqué anteriormente realmente ha ayudado a abordar un modelo mejor ajustado.
En un par de otras cosas de retroalimentación:
1. Recientemente entendí lo que hace "Eliminar modelos mostrados" debajo de "Comparar", que es como dice, pero no estaba claro si una casilla no estaba marcada, la mantendría. Esta ha sido una forma útil de eliminar posibles ajustes después de ordenar la tabla de datos por la validación R ^ 2.
2. Me he dado cuenta de que al ejecutar un diseño de ajuste, es importante asegurarse de que la primera columna tenga los mismos valores fijos que las columnas Mín / Máx o esté en algún punto intermedio (si se modifica) para que funcione correctamente. Ha habido un par de veces que estaba ajustando otro valor, por ejemplo, min_child_weight, y había ingresado valores fijos para las iteraciones (digamos Min / Max 150), pero el valor de la primera columna se dejó en 100. Cuando este es el caso, mantiene las iteraciones en 100, no en 150. Yo pensaría que si el mínimo / máximo se estableciera en los mismos valores, la primera columna debería extraer ese valor y volver a completarlo como lo hace usando la tabla de ajuste para los parámetros no fijos. En el siguiente ejemplo, estaba ajustando max_depth y min_child_weight, pero tuve un par de casos en los que dejé iteraciones en 100, aunque el mínimo / máximo se estableció en 387. Tuve que volver manualmente y cambiarlo a 387 para que se calcule correctamente.

¡Gracias!,
DS
Re: ajuste eficiente de los parámetros de XGBoostHola @DS ,
Gracias por continuar con esto. Recientemente encontré y solucioné un par de problemas con los metadatos de fórmulas que actualmente pueden estar afectando negativamente los resultados de XGBoost en la plataforma de comparación de modelos. Estas y varias actualizaciones más estarán disponibles en JMP Pro 16 Early Adopter que saldrá en un par de meses. Mientras tanto, puede probar algunas comparaciones básicas con la plataforma Boosted Tree directamente en su tabla JMP.
Los siguientes parámetros se asignan directamente entre Boosted Tree y XGBoost:
- Número de capas <-> iteraciones
- Divisiones por árbol <-> max_depth
- Tasa de aprendizaje <-> tasa_de_aprendizaje
- División de tamaño mínimo <-> min_child_weight
- Frecuencia de muestreo de filas <-> submuestreo
- Tasa de muestreo de columna <-> colsample_bytree
Puede ayudar un poco más cambiar el parámetro avanzado grow_policy de XGBoost a "lossguide". Como indica, intente ajustar y guardar predicciones de dos modelos similares y luego grafique las predicciones entre sí. Deben estar altamente correlacionados.
La Tabla de diseño de ajuste en Opciones avanzadas es como adivinó. Debe configurar una tabla JMP separada con nombres de columna que coincidan exactamente con los nombres de los parámetros de XGBoost y luego escribir manualmente el nombre de esta tabla JMP en el cuadro de parámetros. Puede crear la tabla desde cero manualmente o hacer clic con el botón derecho en la tabla de comparación de modelos> Guardar como tabla de datos para comenzar. Esto permite la especificación de diseños arbitrarios en todos los parámetros, pero solo se ha probado ligeramente en este punto, así que asegúrese de verificar los resultados con cuidado.
Re: ajuste eficiente de los parámetros de XGBoostHola @russ_wolfinger ,
Gracias por la información. Encontré que esta publicación es bastante útil, al menos para pasar por un ejemplo directo y un enfoque iterativo paso a paso para ajustar XGBoost.
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
Mi situación particular tiene alrededor de 3500 filas de entrenamiento y 1000 filas de prueba. Como se mencionó anteriormente, mis filas de prueba están en una tabla de datos separada que concateno a la primera y luego comparo los modelos; esto es para descubrir qué modelo realmente predice mejor en un conjunto de datos no utilizados. Además, divido las 3500 filas de entrenamiento en 80/20 filas de entrenamiento / validación, estratificadas por mi salida Y que estoy modelando.
Trabajaré a través de algunos esquemas de ajuste diferentes para ver qué funciona mejor. Pero, una cosa que me gustaría hacer es verificar que XGBoost pueda darme el "mismo" resultado que, por ejemplo, el bosque de arranque. ¿Es posible tomar los parámetros del bosque de arranque o del árbol impulsado y convertirlos a la configuración adecuada en XGBoost? En principio, XGBoost debería dar casi el mismo resultado, pero mucho más rápido. Intenté leer algunas publicaciones sobre cómo hacer esto, pero todavía estoy luchando con cómo traducir la configuración en las otras plataformas a XGBoost.
¿Es posible que la plataforma de comparación del modelo evalúe el modelo XGBoost de manera diferente?
Algunas preguntas más aclaratorias:
¿Hay alguna forma de determinar la cantidad de árboles de la plataforma XGBoost? ¿Es este el campo "iteraciones"?
¿Podemos "alimentar" la plataforma con nuestra propia mesa de diseño de tuning? Debajo de Opciones avanzadas, hay un campo con ese nombre, pero está vacío. Si tenemos nuestra propia tabla de afinación, ¿podemos ingresar el nombre allí?
Gracias,
DS
Re: ajuste eficiente de los parámetros de XGBoostHola @DS , Muchas gracias por el comentario. Hay algunos métodos manuales decentes para realizar ajustes. Intenté buscar en Google "tuning xgboost" y los primeros enlaces parecen razonables. Estos pueden considerarse un poco más un arte que una ciencia, pero ayudan a iluminar lo que hace cada parámetro y crean una intuición general sobre cómo funciona XGBoost.
Tengo curiosidad por conocer su configuración en caso de que tenga la oportunidad de compartirla o publicarla. En las muchas comparaciones que he hecho, así como en situaciones competitivas como Kaggle, he descubierto que XGBoost funciona mejor. Las ganancias de rendimiento tienden a ser más fuertes a medida que aumenta el tamaño del conjunto de datos.
Parece que estás haciendo una división clásica de entrenamiento-validación-prueba. Podría valer la pena ejecutar este procedimiento varias veces con diferentes divisiones para determinar qué tan estables son sus estimaciones de rendimiento.
Una ventaja de k-fold es que obtiene un predictor "empaquetado" sobre los ajustes del modelo k, y casi siempre funcionará mejor que un solo modelo entrenado en una parte de los datos. Un enfoque alternativo es realizar ajustes con cualquier enfoque de validación que desee y luego hacer un ajuste final al final utilizando todos los datos de entrenamiento + validación.