23 votos

Cómo evitar el sobreajuste en el modelo XGBoost

Imagen de la curva ROC en datos de entrenamiento y prueba

Estoy intentando clasificar datos de un conjunto de datos de 35K puntos y 12 características

En primer lugar, he dividido los datos en datos de entrenamiento y prueba para validación cruzada.

Después de la validación cruzada, he construido un modelo XGBoost utilizando los siguientes parámetros:

n_estimators = 100

max_depth=4

scale_pos_weight = 0.2 ya que los datos están desequilibrados (85% clase positiva)

El modelo está sobreajustando los datos de entrenamiento. ¿Qué se puede hacer para evitar el sobreajuste?

28voto

usεr11852 Puntos 5514

XGBoost (y otras rutinas de máquinas de aumento de gradiente también) tiene una serie de parámetros que se pueden ajustar para evitar el sobreajuste. Mencionaré algunos de los más obvios. Por ejemplo, podemos cambiar:

  • la proporción de características utilizadas (es decir, columnas utilizadas); colsample_bytree. Las proporciones más bajas evitan el sobreajuste.
  • la proporción de instancias de entrenamiento utilizadas (es decir, filas utilizadas); subsample. Las proporciones más bajas evitan el sobreajuste.
  • la profundidad máxima de un árbol; max_depth. Valores más bajos evitan el sobreajuste.
  • la reducción mínima de la pérdida requerida para realizar una división adicional; gamma. Valores más grandes evitan el sobreajuste.
  • la tasa de aprendizaje de nuestro GBM (es decir, cuánto actualizamos nuestra predicción con cada árbol sucesivo); eta. Valores más bajos evitan el sobreajuste.
  • la suma mínima del peso de la instancia necesaria en una hoja, en ciertas aplicaciones esto se relaciona directamente con el número mínimo de instancias necesarias en un nodo; min_child_weight. Valores más grandes evitan el sobreajuste.

Esta lista no es exhaustiva y recomendaría encarecidamente consultar la documentación de XGBoost para obtener información sobre otros parámetros. Tenga en cuenta que tratar de evitar el sobreajuste podría llevar a subajuste, donde regularizamos demasiado y no logramos aprender información relevante. En ese sentido, uno podría considerar el uso de un conjunto de validación separado o simplemente validación cruzada (a través de xgboost.cv() por ejemplo) para monitorear el progreso del GBM a medida que se realizan más iteraciones (es decir, se agregan aprendices base). De esa manera, los problemas de sobreajuste potencial pueden detectarse temprano. Esto se relaciona estrechamente con el uso de detención temprana como una forma de regularización; XGBoost ofrece un argumento early_stopping_rounds que es relevante en este caso.

Finalmente, también señalaría que el desequilibrio de clases reportado (85-15) no es realmente grave. Usar el valor predeterminado scale_pos_weight de 1 probablemente sea adecuado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X