XGBoost es una implementación poderosa y popular del algoritmo de conjunto de aumento de gradiente.
Un aspecto importante en la configuración de modelos XGBoost es la elección de la función de pérdida que se minimiza durante el entrenamiento del modelo.
los función de pérdida deben coincidir con el tipo de problema de modelado predictivo, de la misma manera, debemos elegir las funciones de pérdida adecuadas en función de los tipos de problemas con redes neuronales de aprendizaje profundo.
En este tutorial, descubrirá cómo configurar las funciones de pérdida para los modelos de conjuntos XGBoost.
Después de completar este tutorial, sabrá:
- Especificar las funciones de pérdida que se utilizan al entrenar conjuntos XGBoost es un paso fundamental, al igual que las redes neuronales.
- Cómo configurar las funciones de pérdida de XGBoost para tareas de clasificación binarias y de clases múltiples.
- Cómo configurar las funciones de pérdida de XGBoost para tareas de modelado predictivo de regresión.
Empecemos.
Descripción general del tutorial
Este tutorial se divide en tres partes; son:
- Funciones XGBoost y Loss
- XGBoost Loss para clasificación
- XGBoost Loss for Regression
Funciones XGBoost y Loss
Extreme Gradient Boosting, o XGBoost para abreviar, es una implementación eficiente de código abierto del algoritmo de aumento de gradiente. Como tal, XGBoost es un algoritmo, un proyecto de código abierto y una biblioteca de Python.
Fue desarrollado inicialmente por Tianqi Chen y fue descrito por Chen y Carlos Guestrin en su artículo de 2016 titulado «XGBoost: A Scalable Tree Boosting System».
Está diseñado para ser computacionalmente eficiente (por ejemplo, rápido de ejecutar) y altamente efectivo, quizás más efectivo que otras implementaciones de código abierto.
XGBoost admite una variedad de diferentes problemas de modelado predictivo, sobre todo clasificación y regresión.
XGBoost se entrena minimizando la pérdida de una función objetiva frente a un conjunto de datos. Como tal, la elección de la función de pérdida es un hiperparámetro crítico y está directamente relacionado con el tipo de problema que se está resolviendo, al igual que las redes neuronales de aprendizaje profundo.
La implementación permite especificar la función objetivo mediante el «objetivo”Se utilizan hiperparámetros y valores predeterminados sensibles que funcionan en la mayoría de los casos.
Sin embargo, sigue habiendo cierta confusión por parte de los principiantes sobre qué función de pérdida utilizar al entrenar modelos XGBoost.
Veremos más de cerca cómo configurar la función de pérdida para XGBoost en este tutorial.
Antes de comenzar, configuremos.
XGBoost se puede instalar como una biblioteca independiente y se puede desarrollar un modelo XGBoost utilizando la API scikit-learn.
El primer paso es instalar la biblioteca XGBoost si aún no está instalada. Esto se puede lograr usando el administrador de paquetes pip python en la mayoría de las plataformas; por ejemplo:
A continuación, puede confirmar que la biblioteca XGBoost se instaló correctamente y se puede utilizar ejecutando el siguiente script.
# comprobar la versión de xgboost importar xgboost imprimir(xgboost.__versión__) |
La ejecución del script imprimirá su versión de la biblioteca XGBoost que ha instalado.
Tu versión debe ser igual o superior. De lo contrario, debe actualizar su versión de la biblioteca XGBoost.
Es posible que tenga problemas con la última versión de la biblioteca. No es tu culpa.
A veces, la versión más reciente de la biblioteca impone requisitos adicionales o puede ser menos estable.
Si tiene errores al intentar ejecutar el script anterior, le recomiendo cambiar a la versión 1.0.1 (o inferior). Esto se puede lograr especificando la versión a instalar en el comando pip, de la siguiente manera:
sudo pip install xgboost == 1.0.1 |
Si ve un mensaje de advertencia, puede ignorarlo con seguridad por ahora. Por ejemplo, a continuación se muestra un ejemplo de un mensaje de advertencia que puede ver y puede ignorar:
FutureWarning: pandas.util.testing está en desuso. En su lugar, utilice las funciones de la API pública en pandas.testing. |
Si necesita instrucciones específicas para su entorno de desarrollo, consulte el tutorial:
La biblioteca XGBoost tiene su propia API personalizada, aunque usaremos el método a través de las clases contenedoras de scikit-learn: XGBRegressor y XGBClassifier. Esto nos permitirá utilizar el conjunto completo de herramientas de la biblioteca de aprendizaje automático scikit-learn para preparar datos y evaluar modelos.
Ambos modelos operan de la misma manera y toman los mismos argumentos que influyen en cómo se crean y agregan los árboles de decisión al conjunto.
Para obtener más información sobre cómo utilizar la API de XGBoost con scikit-learn, consulte el tutorial:
A continuación, echemos un vistazo más de cerca a cómo configurar la función de pérdida para XGBoost en problemas de clasificación.
XGBoost Loss para clasificación
Las tareas de clasificación implican predecir una etiqueta o probabilidad para cada clase posible, dada una muestra de entrada.
Hay dos tipos principales de tareas de clasificación con etiquetas mutuamente excluyentes: clasificación binaria que tiene dos etiquetas de clase y clasificación de varias clases que tiene más de dos etiquetas de clase.
- Clasificación binaria: Tarea de clasificación con dos etiquetas de clase.
- Clasificación de clases múltiples: Tarea de clasificación con más de dos etiquetas de clase.
Para obtener más información sobre los diferentes tipos de tareas de clasificación, consulte el tutorial:
XGBoost proporciona funciones de pérdida para cada uno de estos tipos de problemas.
Es típico en el aprendizaje automático entrenar un modelo para predecir la probabilidad de pertenencia a una clase para tareas de probabilidad y si la tarea requiere etiquetas de clase nítidas para posprocesar las probabilidades predichas (por ejemplo, usar argmax).
Este enfoque se usa cuando se entrena redes neuronales de aprendizaje profundo para la clasificación y también se recomienda cuando se usa XGBoost para la clasificación.
La función de pérdida utilizada para predecir probabilidades de problemas de clasificación binaria es «binario: logístico«Y la función de pérdida para predecir probabilidades de clase para problemas de varias clases es»multi: softprob“.
- «multi: logístico“: Función de pérdida XGBoost para clasificación binaria.
- «multi: softprob“: Función de pérdida XGBoost para clasificación de clases múltiples.
Estos valores de cadena se pueden especificar mediante el «objetivo”Hiperparámetro al configurar su modelo XGBClassifier.
Por ejemplo, para clasificación binaria:
... # definir el modelo de clasificación binaria modelo = Clasificador XGB(objetivo=‘binario: logístico’) |
Y, para clasificación de clases múltiples:
... # definir el modelo para la clasificación de clases múltiples modelo = Clasificador XGB(objetivo=‘binario: softprob’) |
Es importante destacar que si no especifica el «objetivo«Hiperparámetro, el Clasificador XGB elegirá automáticamente una de estas funciones de pérdida según los datos proporcionados durante el entrenamiento.
Podemos hacer esto concreto con un ejemplo trabajado.
El siguiente ejemplo crea un conjunto de datos de clasificación binario sintético, se ajusta a un Clasificador XGB en el conjunto de datos con hiperparámetros predeterminados, luego imprime la configuración del objetivo del modelo.
# ejemplo de elección automática de la función de pérdida para clasificación binaria desde sklearn.conjuntos de datos importar make_classification desde xgboost importar Clasificador XGB # definir conjunto de datos X, y = make_classification(n_samples=1000, n_features=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # definir el modelo modelo = Clasificador XGB() # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver que el modelo elige automáticamente una función de pérdida para la clasificación binaria.
Alternativamente, podemos especificar el objetivo y ajustar el modelo, confirmando que se utilizó la función de pérdida.
# ejemplo de especificación manual de la función de pérdida para clasificación binaria desde sklearn.conjuntos de datos importar make_classification desde xgboost importar Clasificador XGB # definir conjunto de datos X, y = make_classification(n_samples=1000, n_features=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # definir el modelo modelo = Clasificador XGB(objetivo=‘binario: logístico’) # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver el modelo utilizado para especificar una función de pérdida para la clasificación binaria.
Repitamos este ejemplo en un conjunto de datos con más de dos clases. En este caso, tres clases.
El ejemplo completo se enumera a continuación.
# ejemplo de elección automática de la función de pérdida para clasificación de clases múltiples desde sklearn.conjuntos de datos importar make_classification desde xgboost importar Clasificador XGB # definir conjunto de datos X, y = make_classification(n_samples=1000, n_features=20, n_informativo=15, n_redundante=5, estado_aleatorio=1, n_clases=3) # definir el modelo modelo = Clasificador XGB() # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver que el modelo eligió automáticamente una función de pérdida para la clasificación de clases múltiples.
Alternativamente, podemos especificar manualmente la función de pérdida y confirmar que se usó para entrenar el modelo.
# ejemplo de especificación manual de la función de pérdida para clasificación de clases múltiples desde sklearn.conjuntos de datos importar make_classification desde xgboost importar Clasificador XGB # definir conjunto de datos X, y = make_classification(n_samples=1000, n_features=20, n_informativo=15, n_redundante=5, estado_aleatorio=1, n_clases=3) # definir el modelo modelo = Clasificador XGB(objetivo=«multi: softprob») # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver el modelo utilizado para especificar una función de pérdida para la clasificación de clases múltiples.
Por último, existen otras funciones de pérdida que puede utilizar para la clasificación, que incluyen: «binario: logitraw» y «binario: bisagra«Para clasificación binaria y»multi: softmax”Para clasificación de clases múltiples.
Puedes ver una lista completa aquí:
A continuación, echemos un vistazo a las funciones de pérdida de XGBoost para la regresión.
XGBoost Loss for Regression
La regresión se refiere a problemas de modelado predictivo donde se predice un valor numérico dada una muestra de entrada.
Aunque predecir una probabilidad suena como un problema de regresión (es decir, una probabilidad es un valor numérico), generalmente no se considera un problema de modelado predictivo de tipo regresión.
La función objetivo XGBoost que se utiliza al predecir valores numéricos es la «reg: squarederror» función de pérdida.
- «Reg: squarederror»: Función de pérdida para problemas de modelado predictivo de regresión.
Este valor de cadena se puede especificar mediante el «objetivo«Hiperparámetro al configurar su XGBRegressor modelo.
Por ejemplo:
... # definir el modelo de regresión modelo = XGBRegressor(objetivo=‘reg: squarederror’) |
Es importante destacar que si no especifica el «objetivo«Hiperparámetro, el XGBRegressor elegirá automáticamente esta función objetivo por usted.
Podemos hacer esto concreto con un ejemplo trabajado.
El siguiente ejemplo crea un conjunto de datos de regresión sintético, se ajusta a un XGBRegressor en el conjunto de datos, luego imprime la configuración del objetivo del modelo.
# ejemplo de elección automática de la función de pérdida para regresión desde sklearn.conjuntos de datos importar hacer_regresión desde xgboost importar XGBRegressor # definir conjunto de datos X, y = hacer_regresión(n_samples=1000, n_features=20, n_informativo=15, ruido=0,1, estado_aleatorio=7) # definir el modelo modelo = XGBRegressor() # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver que el modelo elige automáticamente una función de pérdida para la regresión.
Alternativamente, podemos especificar el objetivo y ajustar el modelo, confirmando que se utilizó la función de pérdida.
# ejemplo de especificación manual de la función de pérdida para regresión desde sklearn.conjuntos de datos importar hacer_regresión desde xgboost importar XGBRegressor # definir conjunto de datos X, y = hacer_regresión(n_samples=1000, n_features=20, n_informativo=15, ruido=0,1, estado_aleatorio=7) # definir el modelo modelo = XGBRegressor(objetivo=‘reg: squarederror’) # encajar en el modelo modelo.encajar(X, y) # resumir la función de pérdida del modelo imprimir(modelo.objetivo) |
Al ejecutar el ejemplo, el modelo se ajusta al conjunto de datos e imprime la configuración de la función de pérdida.
Podemos ver que el modelo utilizó la función de pérdida especificada para la regresión.
Por último, existen otras funciones de pérdida que puede utilizar para la regresión, que incluyen: «reg: squarelogerror«,»reg: logístico«,»reg: pseudohubererror«,»reg: gamma«, y «reg: tweedie“.
Puedes ver una lista completa aquí:
Otras lecturas
Esta sección proporciona más recursos sobre el tema si desea profundizar.
Tutoriales
API
Resumen
En este tutorial, descubrió cómo configurar funciones de pérdida para modelos de conjuntos XGBoost.
Específicamente, aprendiste:
- Especificar las funciones de pérdida que se utilizan al entrenar conjuntos XGBoost es un paso crítico al igual que las redes neuronales.
- Cómo configurar las funciones de pérdida de XGBoost para tareas de clasificación binarias y de clases múltiples.
- Cómo configurar las funciones de pérdida de XGBoost para tareas de modelado predictivo de regresión.
¿Tiene usted alguna pregunta?
Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.