Saltar al contenido

Conjuntos de aumento de gradiente basados ​​en histogramas en Python

28 de diciembre de 2020

El aumento de gradiente es un conjunto de algoritmos de árboles de decisión.

Puede ser una de las técnicas más populares para la clasificación estructurada (tabular) y los problemas de modelado predictivo de regresión, dado que funciona muy bien en una amplia gama de conjuntos de datos en la práctica.

Un problema importante del aumento de gradiente es que es lento entrenar el modelo. Esto es particularmente un problema cuando se usa el modelo en grandes conjuntos de datos con decenas de miles de ejemplos (filas).

El entrenamiento de los árboles que se agregan al conjunto se puede acelerar drásticamente al discretizar (agrupar) las variables de entrada continuas en unos pocos cientos de valores únicos. Los conjuntos de aumento de gradiente que implementan esta técnica y adaptan el algoritmo de entrenamiento en torno a las variables de entrada bajo esta transformación se denominan conjuntos de aumento de gradiente basados ​​en histogramas.

En este tutorial, descubrirá cómo desarrollar conjuntos de árboles de aumento de gradiente basados ​​en histogramas.

Después de completar este tutorial, sabrá:

  • El aumento de gradiente basado en histogramas es una técnica para entrenar árboles de decisión más rápidos que se utilizan en el conjunto de aumento de gradiente.
  • Cómo utilizar la implementación experimental del aumento de gradiente basado en histogramas en la biblioteca scikit-learn.
  • Cómo usar conjuntos de aumento de gradiente basados ​​en histogramas con las bibliotecas de terceros XGBoost y LightGBM.

Empecemos.

Cómo desarrollar conjuntos de aumento de gradiente basados ​​en histogramas

Cómo desarrollar conjuntos de aumento de gradiente basados ​​en histogramas
Foto de YoTuT, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en cuatro partes; son:

  1. Aumento de gradiente de histograma
  2. Aumento de gradiente de histograma con Scikit-Learn
  3. Aumento de gradiente de histograma con XGBoost
  4. Aumento de gradiente de histograma con LightGBM

Aumento de gradiente de histograma

El aumento de gradiente es un algoritmo conjunto de aprendizaje automático.

Impulsar se refiere a una clase de algoritmos de aprendizaje de conjuntos que agregan modelos de árbol a un conjunto de forma secuencial. Cada modelo de árbol agregado al conjunto intenta corregir los errores de predicción cometidos por los modelos de árbol ya presentes en el conjunto.

El aumento de gradiente es una generalización de algoritmos de impulso como AdaBoost a un marco estadístico que trata el proceso de entrenamiento como un modelo aditivo y permite el uso de funciones de pérdida arbitrarias, mejorando en gran medida la capacidad de la técnica. Como tal, los conjuntos de aumento de gradiente son la técnica de referencia para la mayoría de las tareas de modelado predictivo estructuradas (por ejemplo, datos tabulares).

Aunque el aumento de gradiente funciona muy bien en la práctica, los modelos pueden tardar en entrenarse. Esto se debe a que los árboles deben crearse y agregarse secuencialmente, a diferencia de otros modelos de conjunto, como el bosque aleatorio, donde los miembros del conjunto se pueden entrenar en paralelo, explotando múltiples núcleos de CPU. Como tal, se ha realizado un gran esfuerzo en técnicas que mejoran la eficiencia del algoritmo de entrenamiento de aumento de gradiente.

Dos bibliotecas notables que engloban muchas técnicas modernas de eficiencia para entrenar algoritmos de aumento de gradiente incluyen Extreme Gradient Boosting (XGBoost) y Light Gradient Boosting Machines (LightGBM).

Un aspecto del algoritmo de entrenamiento que se puede acelerar es la construcción de cada árbol de decisión, cuya velocidad está limitada por el número de ejemplos (filas) y el número de características (columnas) en el conjunto de datos de entrenamiento. Grandes conjuntos de datos, p. Ej. decenas de miles de ejemplos o más, pueden resultar en la construcción muy lenta de árboles como puntos de división en cada valor, ya que cada característica debe ser considerada durante la construcción de los árboles.

Si podemos reducir #data o #feature, podremos acelerar sustancialmente el entrenamiento de GBDT.

– LightGBM: un árbol de decisiones de aumento de gradientes altamente eficiente, 2017.

La construcción de árboles de decisión se puede acelerar significativamente reduciendo el número de valores para las características de entrada continua. Esto se puede lograr mediante la discretización o la agrupación de valores en un número fijo de depósitos. Esto puede reducir el número de valores únicos para cada característica de decenas de miles a unos pocos cientos.

Esto permite que el árbol de decisiones opere en el grupo ordinal (un número entero) en lugar de valores específicos en el conjunto de datos de entrenamiento. Esta aproximación burda de los datos de entrada a menudo tiene poco impacto en la habilidad del modelo, si no mejora la habilidad del modelo, y acelera dramáticamente la construcción del árbol de decisiones.

Además, se pueden utilizar estructuras de datos eficientes para representar el agrupamiento de los datos de entrada; por ejemplo, se pueden usar histogramas y el algoritmo de construcción de árboles se puede adaptar aún más para el uso eficiente de histogramas en la construcción de cada árbol.

Estas técnicas se desarrollaron originalmente a fines de la década de 1990 para desarrollar de manera eficiente árboles de decisión únicos en grandes conjuntos de datos, pero se pueden usar en conjuntos de árboles de decisión, como el aumento de gradiente.

Como tal, es común referirse a un algoritmo de aumento de gradiente que admite «histogramas”En las bibliotecas modernas de aprendizaje automático como aumento de gradiente basado en histograma.

En lugar de encontrar los puntos de división en los valores de características ordenados, el algoritmo basado en histogramas agrupa los valores de características continuas en contenedores discretos y utiliza estos contenedores para construir histogramas de características durante el entrenamiento. Dado que el algoritmo basado en histogramas es más eficiente tanto en el consumo de memoria como en la velocidad de entrenamiento, desarrollaremos nuestro trabajo sobre esta base.

– LightGBM: un árbol de decisiones de aumento de gradientes altamente eficiente, 2017.

Recomendado:  Tu búsqueda de restaurantes en Google ahora es más fácil

Ahora que estamos familiarizados con la idea de agregar histogramas a la construcción de árboles de decisión en el aumento de gradiente, revisemos algunas implementaciones comunes que podemos usar en nuestros proyectos de modelado predictivo.

Hay tres bibliotecas principales que apoyan la técnica; son Scikit-Learn, XGBoost y LightGBM.

Echemos un vistazo más de cerca a cada uno de ellos.

Nota: No estamos compitiendo con los algoritmos; en cambio, solo estamos demostrando cómo configurar cada implementación para usar el método de histograma y mantener constantes todos los demás hiperparámetros no relacionados en sus valores predeterminados.

Aumento de gradiente de histograma con Scikit-Learn

La biblioteca de aprendizaje automático scikit-learn proporciona una implementación experimental de aumento de gradiente que admite la técnica del histograma.

Específicamente, esto se proporciona en las clases HistGradientBoostingClassifier e HistGradientBoostingRegressor.

Para usar estas clases, debe agregar una línea adicional a su proyecto que indique que está feliz de usar estas técnicas experimentales y que su comportamiento puede cambiar con versiones posteriores de la biblioteca.

La documentación de scikit-learn afirma que estas implementaciones de aumento de gradiente basadas en histogramas son órdenes de magnitud más rápidas que la implementación predeterminada de aumento de gradiente proporcionada por la biblioteca.

Estos estimadores basados ​​en histogramas pueden ser órdenes de magnitud más rápidos que GradientBoostingClassifier y GradientBoostingRegressor cuando el número de muestras es mayor que decenas de miles de muestras.

– Aumento de gradiente basado en histogramas, Guía del usuario de Scikit-Learn.

Las clases se pueden usar como cualquier otro modelo de scikit-learn.

De forma predeterminada, el conjunto utiliza 255 contenedores para cada función de entrada continua, y esto se puede configurar a través de la opción «max_bins» argumento. Establecer esto en valores más pequeños, como 50 o 100, puede resultar en mejoras de eficiencia adicionales, aunque quizás a costa de alguna habilidad de modelo.

El número de árboles se puede configurar mediante el «max_iter”Argumento y el valor predeterminado es 100.

El siguiente ejemplo muestra cómo evaluar un algoritmo de aumento de gradiente de histograma en un conjunto de datos de clasificación sintético con 10,000 ejemplos y 100 características.

El modelo se evalúa mediante la validación cruzada estratificada repetida de k veces y se informa la precisión media en todos los pliegues y repeticiones.

La ejecución del ejemplo evalúa el rendimiento del modelo en el conjunto de datos sintéticos e informa la precisión de la clasificación de la desviación estándar y la media.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el algoritmo de aumento de gradiente de histograma de scikit-learn logra una precisión media de alrededor del 94,3 por ciento en el conjunto de datos sintéticos.

También podemos explorar el efecto del número de bins en el rendimiento del modelo.

El siguiente ejemplo evalúa el rendimiento del modelo con un número diferente de contenedores para cada característica de entrada continua de 50 a (aproximadamente) 250 en incrementos de 50.

El ejemplo completo se enumera a continuación.

La ejecución del ejemplo evalúa cada configuración, informa la precisión de la clasificación de la desviación estándar y la media a lo largo del camino y finalmente crea un gráfico de la distribución de puntuaciones.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que aumentar el número de bins puede disminuir la precisión media del modelo en este conjunto de datos.

Podríamos esperar que un aumento en el número de contenedores también requiera un aumento en el número de árboles (max_iter) para garantizar que el modelo pueda explorar y aprovechar de forma eficaz los puntos de división adicionales.

Es importante destacar que ajustar un conjunto donde los árboles usan 10 o 50 contenedores por variable es dramáticamente más rápido que 255 contenedores por variable de entrada.

Se crea una figura que compara la distribución en las puntuaciones de precisión para cada configuración utilizando diagramas de caja y bigotes.

En este caso, podemos ver que aumentar el número de bins en el histograma parece reducir la extensión de la distribución, aunque puede reducir el rendimiento medio del modelo.

Gráficos de caja y bigotes del número de contenedores para el conjunto de aumento de gradiente de histograma de Scikit-Learn

Gráficos de caja y bigotes del número de contenedores para el conjunto de aumento de gradiente de histograma de Scikit-Learn

Aumento de gradiente de histograma con XGBoost

Extreme Gradient Boosting, o XGBoost para abreviar, es una biblioteca que proporciona una implementación altamente optimizada del aumento de gradiente.

Una de las técnicas implementadas en la biblioteca es el uso de histogramas para las variables de entrada continuas.

La biblioteca XGBoost se puede instalar usando su administrador de paquetes favorito de Python, como Pip; por ejemplo:

Podemos desarrollar modelos XGBoost para usar con la biblioteca scikit-learn a través de las clases XGBClassifier y XGBRegressor.

El algoritmo de entrenamiento se puede configurar para utilizar el método de histograma configurando el «método_árbol«Argumento a»aprox.«, Y el número de contenedores se puede configurar mediante el»max_bin» argumento.

El siguiente ejemplo demuestra la evaluación de un modelo XGBoost configurado para usar el histograma o técnica aproximada para construir árboles con 255 contenedores por característica de entrada continua y 100 árboles en el modelo.

La ejecución del ejemplo evalúa el rendimiento del modelo en el conjunto de datos sintéticos e informa la precisión de la clasificación de la desviación estándar y la media.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el algoritmo de aumento de gradiente de histograma XGBoost logra una precisión media de alrededor del 95,7 por ciento en el conjunto de datos sintéticos.

Aumento de gradiente de histograma con LightGBM

Light Gradient Boosting Machine o LightGBM para abreviar es otra biblioteca de terceros como XGBoost que proporciona una implementación altamente optimizada de gradiente Boosting.

Es posible que haya implementado la técnica del histograma antes que XGBoost, pero XGBoost luego implementó la misma técnica, destacando el «eficiencia de aumento de gradiente”Competencia entre bibliotecas que impulsan el gradiente.

La biblioteca LightGBM se puede instalar usando su administrador de paquetes favorito de Python, como Pip; por ejemplo:

Podemos desarrollar modelos LightGBM para usar con la biblioteca scikit-learn a través de las clases LGBMClassifier y LGBMRegressor.

El algoritmo de entrenamiento usa histogramas por defecto. Los contenedores máximos por variable de entrada continua se pueden configurar mediante el botón «max_bin» argumento.

El siguiente ejemplo demuestra la evaluación de un modelo LightGBM configurado para usar el histograma o técnica aproximada para construir árboles con 255 contenedores por característica de entrada continua y 100 árboles en el modelo.

La ejecución del ejemplo evalúa el rendimiento del modelo en el conjunto de datos sintéticos e informa la precisión de la clasificación de la desviación estándar y la media.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el algoritmo de aumento de gradiente de histograma LightGBM logra una precisión media de alrededor del 94,2 por ciento en el conjunto de datos sintéticos.

Otras lecturas

Esta sección proporciona más recursos sobre el tema si está buscando profundizar.

Tutoriales

Documentos

API

Resumen

En este tutorial, descubrió cómo desarrollar conjuntos de árboles de aumento de gradiente basados ​​en histogramas.

Específicamente, aprendiste:

  • El aumento de gradiente basado en histogramas es una técnica para entrenar árboles de decisión más rápidos que se utilizan en el conjunto de aumento de gradiente.
  • Cómo utilizar la implementación experimental del aumento de gradiente basado en histogramas en la biblioteca scikit-learn.
  • Cómo usar conjuntos de aumento de gradiente basados ​​en histogramas con las bibliotecas de terceros XGBoost y LightGBM.

¿Tiene usted alguna pregunta?
Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.