¿Cuál es una explicación amable de GradientBoost?

La idea GradientBoost es entrenar múltiples modelos débiles, en el que cada modelo debe ajustarse al residuo de su anterior. (Veremos residual == gradiente negativo)

  • Tenga en cuenta que esto es muy diferente de AdaBoost , que ajusta la ponderación de los datos “clasificados incorrectamente” de la ronda anterior al entrenar el modelo actual.

Cómo funciona GradientBoost, desde un punto de vista residual :

1, entrenar [matemática] f_1 (x) [/ matemática] para que se ajuste a [matemática] y [/ matemática],

donde [math] y [/ math] puede ser una etiqueta para la clasificación (p. ej., género) o algún número para la regresión (p. ej., edad).

El error de ajuste (residual) es [matemática] e_1 = y -f_1 (x) [/ matemática]. Más adelante veremos que [math] y -f_1 (x) [/ math] es similar a este gradiente, [math] d \ text {Loss} (y, f) / df [/ math]

2, ahora entrene [math] f_2 (x) [/ math] para ajustar [math] e_1 [/ math], el residuo de la iteración 1.

Esto significa hacer que [math] f_2 (x) [/ math] esté lo más cerca posible de [math] e_1 [/ math], por ejemplo, en una función de pérdida cuadrada, para minimizar esta pérdida [math] L = (f_2 (x ) -e_1) ^ 2 [/ matemáticas]

3, repita el paso anterior, obtenemos [math] f_3 (x) [/ math] para ajustar el residual [math] e_2 [/ math], [math] f_4 (x) [/ math] para el residual [math] e_3 [/ matemáticas], …

4, Suma los modelos: [matemáticas] F (x) = f_1 (x) + \ cdots + f_4 (x) [/ matemáticas] (digamos que solo entrenamos 4 modelos débiles y los combinamos). Este es nuestro modelo final, y la pérdida final / total es [matemática] e_4 [/ matemática], que es mucho más pequeña que [matemática] e_1 [/ matemática], aparentemente.

(En realidad, cierta literatura dice que esta iteración debería continuar hasta que el residuo sea casi ruido blanco. Si no es ruido blanco , entonces debe haber alguna información estadística. Al usar esta información, debería haber otra iteración, en la que una nueva el modelo débil debe ser entrenado y agregado. Tiene sentido.)

¿Dónde está “gradiente”?

Para [matemática] L = (tf) ^ 2 [/ matemática] donde [matemática] t [/ matemática] significa objetivo apropiado ([matemática] t = y [/ matemática] para el bucle 1, [matemática] t = e_1 [/ math] para el bucle 2, [math] t = e_2 [/ math] para el bucle 3, etc …), el gradiente de [math] L [/ math] contra [math] f [/ math] es [math] (tf ) [/ math], que se ajusta exactamente a los residuos.

En otras palabras, en iteraiton 2 estamos tratando de usar el modelo [math] f_2 (x) [/ math] para ajustar el gradiente calculado a partir del modelo 1. Esto tiene sentido. Este procedimiento intenta hacer que el error de ajuste total disminuya a lo largo de la curva de pérdida total .

En otras palabras, también tenemos opciones al elegir nuestro nuevo objetivo de ajuste (en la iteración [matemática] i [/ matemática]):

  • ajustando el residual
  • ajustando el gradiente (negativo)

No son tan diferentes. El ajuste de cualquiera de ellos significa que el error de ajuste total disminuye.

Ahora, ¿por qué elegimos gradiente en lugar de residual? La respuesta corta es que para algunas (tal vez muchas) funciones de pérdida, el gradiente le presta menos atención a los datos atípicos.

Aparentemente, [math] L = (tf) ^ 2 [/ math] se preocupa mucho por los datos atípicos, por ejemplo:

Por lo tanto, en el sentido de tratar con datos atípicos, usar gradiente es mejor que residual.

El gradiente de pérdida de Huber puede limitarse a un umbral. En otras palabras, al usar el gradiente como objetivo de ajuste, la atención del modelo a los valores atípicos tiene un límite (en comparación con el residual)

Referencia : http://www.ccs.neu.edu/home/vip/…

La respuesta que Abhishek Ghose le dio a ¿Qué es una explicación intuitiva de Gradient Boosting?

Tanto los artículos que vincula tienen descripciones bien escritas, por lo que le animo a que pase un poco más de tiempo allí, pero seguiré y agregaré mis pensamientos si eso ayuda.

Las discrepancias matemáticas no importan aquí: este es un meta-algoritmo , por lo que la función objetivo puede diferir. Las fórmulas que está viendo son diferentes y, de hecho, las ecuaciones son para diferentes aspectos del algoritmo.

Esta es la forma en que pienso sobre impulsar:

  1. Crea un clasificador (un algoritmo de predicción ajustado).
  2. Reponde sus datos de entrenamiento en función de la pérdida de cada observación (valores reales menos los pronosticados).
  3. Recrea el clasificador con los datos de entrenamiento modificados.
  4. Repetir.
  5. Al final, combine sus clasificadores para votar sobre los nuevos datos de entrada. Para cada nueva observación, la predicción es una función de los votos (posiblemente ponderados).

Avísame si eso no está claro. Nuevamente, si desea los detalles de la implementación, todo está en los documentos, escritos por personas que han pasado horas pensando en explicarlo 🙂