Árboles de decisión impulsados por gradientes

Al igual que el ensamble y el boosting, el boosting del gradiente es una metodología que se aplica otro algoritmo de aprendizaje automático. Informalmente, el potenciador de gradientes implica hay dos tipos de modelos:

  • un "débil" de aprendizaje automático, que suele ser un árbol de decisión.
  • un estado "fuerte" de aprendizaje automático, que consta de varios factores e implementar modelos automáticamente.

En la potenciación de gradiente, en cada paso, se entrena un nuevo modelo débil para predecir la "error" del modelo sólido actual (que se denomina seudorespuesta). Detallaremos el “error” más adelante. Por ahora, supón que hay “error” es la diferencia entre la predicción y una etiqueta regresiva. El modelo débil (es decir, el “error”) es y luego se agrega al modelo sólido con un signo negativo para reducir el error de modelo sólido.

El boosting de gradientes es iterativo. Cada iteración invoca la siguiente fórmula:

\[ F_{i+1} = F_i - f_i \]

Donde:

  • $F_i$ es el modelo fuerte del paso $i$.
  • $f_i$ es el modelo débil en el paso $i$.

Esta operación se repite hasta que se cumple un criterio de detención, como una cantidad máxima cantidad de iteraciones o si el modelo (sólido) comienza a sobreajustarse según una medición conjunto de datos de validación independiente.

Veamos el aumento del gradiente en un conjunto de datos de regresión simple en el que se ilustra lo siguiente:

  • El objetivo es predecir $y$ a partir de $x$.
  • El modelo sólido se inicializa para ser una constante de cero: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

Apliquemos este código en el siguiente conjunto de datos:

Un diagrama de verdad fundamental para un atributo x y su etiqueta, y. La trama es un
serie de seno ligeramente humedecido
olas.

Figura 25. Es un conjunto de datos regresión sintético con un atributo numérico.

 

Aquí hay tres diagramas después de la primera iteración del boosting de gradiente algoritmo:

Tres diagramas. El primer diagrama muestra la predicción del modelo sólido, que es
una línea recta con la pendiente 0 y la intersección y con 0. El segundo diagrama muestra el error de
el modelo sólido, que es una serie de ondas sinusoidales. El tercer diagrama muestra el
predicción del modelo débil, que es un conjunto de
olas.

Figura 26. Tres diagramas después de la primera iteración.

 

Observa lo siguiente sobre los diagramas de la Figura 26:

  • El primer diagrama muestra las predicciones del modelo sólido, que actualmente es siempre es 0.
  • El segundo diagrama muestra el error, que es la etiqueta del modelo débil.
  • El tercer diagrama muestra el modelo débil.

El primer modelo débil aprende una representación general de la etiqueta y, sobre todo, se centra en la parte izquierda del espacio de atributos (la parte con más variación, y, por lo tanto, la mayor cantidad de errores para el modelo incorrecto constante).

A continuación, se muestran los mismos diagramas para otra iteración del algoritmo:

Tres diagramas. El primer diagrama muestra la predicción del modelo sólido, que es
una inversa del diagrama de la predicción del modelo débil del modelo anterior
Figura. El segundo diagrama muestra el error del modelo sólido, que es un modelo ruidoso
conjunto de ondas sinusoidales. El tercer diagrama muestra la predicción del modelo débil, que
es un par de imágenes cuadradas
olas.

Figura 27. Tres diagramas después de la segunda iteración.

 

Observa lo siguiente sobre los diagramas de la Figura 27:

  • El modelo sólido ahora contiene la predicción del modelo débil del iteración anterior.
  • El error nuevo del modelo sólido es un poco menor.
  • La nueva predicción del modelo débil ahora se enfoca en la parte derecha del espacio de atributos.

Ejecutamos el algoritmo durante 8 iteraciones más:

Los diagramas muestran que el modelo fuerte se está acercando gradualmente a la verdad fundamental.
mientras que la predicción
del modelo débil se convierte gradualmente
son más débiles.

Figura 28. Tres diagramas después de la tercera y la décima iteración.

 

En la Figura 28, observa que la predicción de un modelo sólido comienza a parecerse el diagrama del conjunto de datos.

Estas figuras ilustran el algoritmo de boosting del gradiente usando árboles de decisión como como débiles. Esta combinación se denomina árboles con boosting del gradiente (decisión).

Los diagramas anteriores sugieren la esencia del boosting del gradiente. Sin embargo, este ejemplo carece de las siguientes dos operaciones reales:

  • La reducción
  • La optimización de los valores de la hoja con un paso del método de Newton

Contraer

El modelo débil $f_i$ se multiplica por un valor pequeño $\nu$ (por ejemplo, $\nu = 0.1$) antes de agregarse al modelo fuerte $F_i$. Este pequeño valor se denomina la reducción. En otras palabras, en lugar de usar cada iteración con el siguiente comando Fórmula:

\[ F_{i+1} = F_i - f_i \]

Cada iteración usa la siguiente fórmula:

\[ F_{i+1} = F_i - \nu f_i \]

La reducción en el boosting de gradientes es análoga a la tasa de aprendizaje en las redes neuronales. La reducción controla la velocidad de aprendizaje del modelo fuerte, lo que ayuda a limitar el sobreajuste. Es decir, un valor de reducción cercano a 0.0 reduce más el sobreajuste que un valor de reducción cercano a 1.0.

En nuestro código anterior, la reducción se implementaría de la siguiente manera:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions