Post Top Ad

Your Ad Spot

martes, 18 de agosto de 2020

Una guía para comprender las máquinas de aumento de gradiente: Lightgbm y Xgboost

En el pasado, he usado y ajustado modelos sin saber lo que hacen. La mayoría de las veces he tenido éxito en esto porque la mayoría de ellos tenían solo algunos parámetros que necesitaban ajustes, como la tasa de aprendizaje, no. de iteraciones, alfa o lambda y es fácil adivinar cómo podrían afectar al modelo.

Entonces, cuando me encontré con LightGBM y XGBoost durante un desafío de Kaggle, pensé en hacer lo mismo con ellos también. Me resultó bastante complicado entender la teoría detrás de ellos, así que traté de usarlos como cajas negras.

Pero pronto descubrí que no puedo. Es porque tienen una cantidad ENORME de hiperparámetros ... ¡que pueden hacer o deshacer su modelo! Para colmo, su configuración predeterminada a menudo no es la óptima. Entonces, para usar el modelo de manera efectiva, tuve que obtener al menos una comprensión de alto nivel de lo que representa cada parámetro y comprender cuáles podrían ser los más importantes.

El motivo de este artículo

Mi objetivo es brindarle ese conocimiento rápido, de alto nivel y práctico de las máquinas de aumento de gradiente (GBM) y hacer que comprenda el aumento de gradiente a través de LightGBM y XGBoost De esta manera, podrá saber qué está sucediendo en el algoritmo, qué parámetros debe modificar para mejorarlo e ir directamente a implementarlos en su propio análisis.

Es genial si desea saber más sobre la teoría y las matemáticas detrás del aumento de gradiente. Primero, déjeme explicarle qué es el aumento de gradiente y luego señalar algunos recursos excelentes para comprender la teoría y las matemáticas detrás de GBM utilizando los parámetros de XGBoost y LightGBM.

¿Qué es el impulso?

Impulsar se refiere a un grupo de algoritmos que transforma a un alumno débil en alumnos fuertes.
Los algoritmos de impulso se clasifican en: 
  • Aumento de gradiente
  • XGBoost
  • AdaBoost etc.

¿Qué es el aumento de gradiente en el aprendizaje automático? 

El aumento de gradiente es una técnica de aprendizaje automático para problemas de regresión y clasificación que construye un modelo de predicción en forma de un conjunto de modelos de predicción débiles.

Elementos en el algoritmo de aumento de gradiente

Básicamente, el algoritmo de aumento de gradiente implica tres elementos:
  • Una función de pérdida para optimizar.
  • Alumno débil para hacer predicciones.
  • Un modelo aditivo para agregar estudiantes débiles para minimizar la función de pérdida.
En el artículo, " Un maestro de Kaggle explica el aumento de gradiente ", el autor cita a su compañero Kaggler, Mike Kim dice:
Mi único objetivo es aumentar el gradiente sobre mí mismo de ayer. Y repetir esto todos los días con un espíritu invencible.
Con cada día que pasa, nuestro objetivo es mejorarnos centrándonos en los errores de ayer.
¿Y sabes qué? - ¡Los GBM también lo hacen!

Un conjunto de predictores

Los GBM lo hacen creando un conjunto de predictores. Cada uno de esos predictores se construye secuencialmente enfocándose en los errores del anterior.

¿Qué es un conjunto?

Es simplemente un grupo de elementos vistos como un todo y no individualmente.

Ahora, volviendo a la explicación ...

Un GBM básicamente crea muchos predictores individuales y cada uno de ellos intenta predecir la etiqueta verdadera. Luego, da su predicción final promediando todas esas predicciones individuales (tenga en cuenta, sin embargo, que no es un promedio simple sino un promedio ponderado).

P- "Promedio de las predicciones hechas por muchos predictores" ... ¡eso suena como Random Forest!
  • Eso es, de hecho, un método de conjunto. Y los bosques aleatorios y las máquinas de aumento de gradiente son solo 2 tipos de métodos de conjunto.
Una diferencia importante entre los dos es que los predictores utilizados en el bosque aleatorio son independientes entre sí, mientras que los que se utilizan en las máquinas de aumento de gradiente se construyen secuencialmente, donde cada uno intenta mejorar los errores cometidos por su predecesor.

Debería comprobar el concepto de embolsado y refuerzo. Entonces, mira esta explicación rápida para hacer eso.
P:  Bien, entonces, ¿cómo decide el algoritmo el número de predictores para poner en el conjunto?
  • No es asi. Hacemos. Y eso nos lleva a nuestro primer parámetro importante, n_estimators: pasamos el número de predictores que queremos que el GBM construya dentro del parámetro n_estimators. El número predeterminado es 100.
Entonces, hablemos ahora de estos predictores individuales.
En teoría, estos predictores pueden ser cualquier regresor o clasificador, pero en la práctica, los árboles de decisión dan los mejores resultados.
La API sklearn para LightGBM proporciona un parámetro-boosting_type  y la API  para XGBoost tiene un refuerzo de parámetros para cambiar este algoritmo predictor. Puede elegir entre: gbdt, dart, goss, rf (LightGBM) o gbtree, gblinear o dart (XGBoost).  Sin embargo, tenga en cuenta que un árbol de decisiones, casi siempre, supera a las otras opciones por un margen bastante grande. Lo bueno es que es la configuración predeterminada para este parámetro; para que no tenga que preocuparse por eso.]

Creando predictores débiles

También queremos que estos predictores sean débiles Un predictor débil es simplemente un modelo de predicción que funciona mejor que la adivinación aleatoria.
P: Espera un segundo ... eso parece al revés. ¿No queremos tener predictores sólidos que puedan hacer buenas conjeturas? 
  • No Queremos que los predictores individuales sean débiles para que el conjunto general se vuelva fuerte. Esto se debe a que cada predictor se centrará en las observaciones de que el anterior se equivocó. Cuando usamos un predictor débil, estas observaciones mal etiquetadas tienden a tener alguna información que se puede aprender y que el próximo predictor puede aprender. Mientras que si el predictor ya fuera fuerte, es probable que las observaciones mal etiquetadas sean solo ruido o matices de esos datos de muestra. En tal caso, el modelo simplemente se sobreajustará a los datos de entrenamiento. 
También tenga en cuenta que si los predictores son demasiado débiles, es posible que ni siquiera sea posible construir un conjunto fuerte a partir de ellos.
Ahora volvamos a la creación de un predictor débil ... parece una buena área para hiperparámetros .
Estos son los parámetros que necesitamos ajustar para hacer los predictores correctos (que son árboles de decisión):
  • max_depth  (tanto XGBoost como LightGBM) :  proporciona la profundidad máxima que puede tener cada árbol de decisión. Un valor menor significa un predictor más débil.
  • min_split_gain (LightGBM), gamma (XGBoost): Reducción de pérdida mínima requerida para hacer una partición adicional en un nodo hoja del árbol. Un valor más bajo resultará en árboles más profundos.
  • num_leaves (LightGBM): máximo de hojas de árboles para los estudiantes básicos. Un valor más alto da como resultado árboles más profundos.
  • min_child_samples  (LightGBM): Número mínimo de datos necesarios en un niño (hoja). Según los documentos de LightGBM, este es un parámetro muy importante para evitar el sobreajuste.
Nota:  Estos también son los parámetros que puede ajustar para controlar el sobreajuste.
El subárbol marcado en rojo tiene un nodo hoja con 1 dato en él. Entonces, ese subárbol no se puede generar como 1 <`min_child_samples` para el caso anterior

Submuestreo

Incluso después de hacer todo esto, podría suceder que algunos árboles del conjunto estén altamente correlacionados.
P: Disculpe, ¿qué quiere decir con árboles altamente correlacionados?
  • Me refiero a árboles de decisión que son similares en estructura debido a divisiones similares basadas en las mismas características. Esto significa que el conjunto en su conjunto almacenará menos cantidad de información de la que podría haber almacenado si los árboles fueran diferentes. Por eso queremos que nuestros árboles tengan la menor correlación posible.
Para combatir este problema, submuestras las filas y columnas de datos antes de cada iteración y entrenamos el árbol en esta submuestra. Estos son los parámetros relevantes a tener en cuenta:
  • submuestra (tanto XGBoost como LightGBM): Esto especifica la fracción de filas a considerar en cada etapa de submuestreo. De forma predeterminada, se establece en 1, lo que significa que no hay submuestreo.
  • colsample_bytree (tanto XGBoost como LightGBM): esto especifica la fracción de columnas a considerar en cada etapa de submuestreo. De forma predeterminada, se establece en 1, lo que significa que no hay submuestreo.
  • subsample_freq (LightGBM): Esto especifica que el ensacado debe realizarse después de cada k iteraciones. De forma predeterminada, se establece en 0. Por lo tanto, asegúrese de establecerlo en un valor distinto de cero si desea habilitar el submuestreo.
Eso es. Ahora tiene una buena descripción general de toda la historia de cómo funciona un GBM. Hay 2 parámetros más importantes que no pude encajar en la historia. Entonces, aquí están:
  • learning_rate (tanto XGBoost como LightGBM): también se denomina contracción. El efecto de usarlo es que el aprendizaje se ralentiza, lo que a su vez requiere que se agreguen más árboles al conjunto. Esto le da al modelo un efecto de regularización.
  • class_weight (LightGBM): este parámetro es extremadamente importante para tareas de clasificación de clases múltiples cuando tenemos clases desequilibradas. Recientemente participé en una competencia de Kaggle en la que simplemente establecer el valor de este parámetro en equilibrado hizo que mi solución saltara del 50% superior de la tabla de clasificación al 10% superior.
Puede consultar la API de sklearn para LightGBM aquí y la de XGBoost aquí .

Encontrar el mejor conjunto de hiperparámetros

Puede utilizar RandomizedSearchCV de sklearn para encontrar un buen conjunto de hiperparámetros. Buscará aleatoriamente en un subconjunto de todas las combinaciones posibles de los hiperparámetros y devolverá el mejor conjunto posible de hiperparámetros (o al menos algo parecido al mejor).
Pero si desea ir aún más lejos, puede mirar alrededor del conjunto de hiperparámetros que devuelve usando GridSearchCV. La búsqueda de cuadrícula entrenará el modelo utilizando todas las combinaciones de hiperparámetros posibles y devolverá el mejor conjunto. Tenga en cuenta que, dado que intenta todas las combinaciones posibles, su ejecución puede resultar costosa.

¿Dónde puedes usar estos algoritmos?

Son buenos para modelar eficazmente cualquier tipo de datos tabulares estructurados. Las utilizan múltiples soluciones ganadoras de las competiciones de Kaggle. Aquí hay una lista de competiciones de Kaggle en las que se utilizó LightGBM en el modelo ganador.
Son más simples de implementar que muchas otras técnicas de regresión apiladas y también dan mejores resultados fácilmente.
Kaggle
Hay otra clase de conjuntos de árboles denominados Bosques aleatorios. Si bien los GBM son un tipo de algoritmo de refuerzo, este es un algoritmo de embolsado ( ¿revisó el enlace sobre embolsado y refuerzo que mencioné anteriormente? ). Entonces, a pesar de implementarse utilizando árboles de decisión como los GBM, los bosques aleatorios son muy diferentes de ellos. Los bosques aleatorios son geniales porque generalmente le darán un resultado suficientemente bueno con la configuración de parámetros predeterminada, a diferencia de XGBoost y LightGBM, que requieren ajuste. Pero una vez ajustados, es mucho más probable que XGBoost y LightGBM funcionen mejor.
El siguiente diagrama es la muestra de bosques aleatorios
muestra de bosques aleatorios
Bien. ¡Ahora ya sabe todo sobre los parámetros que necesita para usar XGBoost o LightGBM con éxito para modelar su conjunto de datos!
Antes de terminar, aquí hay algunos enlaces que puede seguir para comprender la teoría y las matemáticas detrás del aumento de gradiente (en el orden de mi preferencia): 
  • “Cómo explicar el aumento de gradiente” por  Terrance Parr  y  Jeremy Howard
    Esta es una serie de artículos muy extensa, completa y excelente que intenta explicar el concepto a personas sin conocimientos previos de matemáticas o la teoría detrás de él.
  • "Un maestro de Kaggle explica el aumento de gradiente" por  Ben Gorman
    Una introducción muy intuitiva al aumento de gradiente. ( PD: Es el mismo artículo que me dio la cita que usé al principio )
  • "Una introducción suave al algoritmo de aumento de gradiente para el aprendizaje automático" por  Jason Brownlee
    Tiene un poco de historia, muchos enlaces para seguir y una explicación suave sin matemáticas (!).

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas