Arbres de décision à boosting de gradient

Tout comme le bagging et le boosting, le boosting de gradient est une méthodologie appliquée à un autre algorithme de machine learning. De manière informelle, l'amélioration de gradient implique deux types de modèles:

  • un modèle de machine learning "faible" (généralement un arbre de décision).
  • un modèle de machine learning "solide", composé de plusieurs modèles faibles.

Lors du boosting de gradient, un nouveau modèle faible est entraîné à chaque étape pour prédire l'erreur du modèle performant actuellement appelé (pseudo-réponse). Nous verrons l'erreur plus tard. Pour le moment, supposons que l'erreur est la différence entre la prédiction et une étiquette régressive. Le modèle faible (c'est-à-dire l'"erreur") est ensuite ajouté au modèle fort avec un signe négatif afin de réduire l'erreur du modèle performant.

Le boosting de gradient est itératif. Chaque itération appelle la formule suivante:

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

où :

  • $F_i$ est le modèle performant à l'étape $i$.
  • $f_i$ est le modèle faible à l'étape $i$.

Cette opération se répète jusqu'à ce qu'un critère d'arrêt soit rempli, tel qu'un nombre maximal d'itérations ou si le modèle (fort) commence à surappréhender comme mesuré sur un ensemble de données de validation distinct.

Prenons l'exemple du boosting de gradient sur un ensemble de données de régression simple où:

  • L'objectif est de prédire $y$ à partir de $x$.
  • Le modèle fort est initialisé pour être une constante nulle: $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

Appliquons ce code à l'ensemble de données suivant:

Un graphique de vérité terrain pour une caractéristique, x et son étiquette, y. L'intrigue est une série d'onde sinusoïdale légèrement humide.

Figure 25. Ensemble de données régressif synthétique avec une caractéristique numérique.

 

Voici trois graphiques après la première itération de l'algorithme de boosting du gradient:

Trois graphiques. Le premier graphique montre la prédiction du modèle puissant, qui est une ligne droite de pente de 0 et d'ordonnée à 0. Le deuxième graphique montre l'erreur du modèle puissant, qui est une série d'ondes sinusoïdales. Le troisième graphique montre la prédiction du modèle faible, qui est un ensemble d'ondes carrées.

Figure 26. Trois graphiques après la première itération.

 

Notez les points suivants dans la figure 26:

  • Le premier graphique montre les prédictions du modèle puissant, qui est toujours égal à 0.
  • Le deuxième graphique montre l'erreur, c'est-à-dire l'étiquette du modèle faible.
  • Le troisième graphique montre le modèle faible.

Le premier modèle faible apprend une représentation grossière de l'étiquette et se concentre principalement sur la partie gauche de l'espace de caractéristiques (la partie avec la plus grande variation, et donc le plus grand nombre d'erreurs pour le modèle incorrect constant).

Voici les mêmes graphiques pour une autre itération de l'algorithme:

Trois graphiques. Le premier graphique montre la prédiction du modèle puissant, qui est l'inverse de celui du modèle faible de la figure précédente. Le deuxième graphique montre l'erreur du modèle fort, qui est un ensemble bruyant d'ondes sinusoïdales. Le troisième graphique montre la prédiction du modèle faible, qui est constitué de quelques vagues.

Figure 27. Trois graphiques après la deuxième itération.

 

Notez les points suivants dans la figure 27:

  • Le modèle performant contient désormais la prédiction du modèle faible de l'itération précédente.
  • La nouvelle erreur du modèle puissant est un peu plus petite.
  • La nouvelle prédiction du modèle faible se concentre désormais sur la partie droite de l'espace des caractéristiques.

Nous exécutons l'algorithme pour huit itérations supplémentaires:

Les graphiques montrent que le modèle fort se rapproche progressivement de la vérité terrain, tandis que la prédiction du modèle faible s'affaiblit progressivement.

Figure 28. Trois graphiques après la troisième et la dixième itération.

 

Dans la figure 28, notez que la prédiction du modèle fort commence à ressembler au tracé de l'ensemble de données.

Ces figures illustrent l'algorithme de boosting de gradient utilisant les arbres de décision comme des apprenants faibles. Cette combinaison est appelée arbres de décision à boosting de gradient (décision).

Les graphiques précédents suggèrent l'essence de l'optimiseur de gradient. Toutefois, cet exemple ne présente pas les deux opérations réelles suivantes:

  • Rétrécissement
  • Optimisation des valeurs feuille avec une étape de la méthode Newton

Réduire

Le modèle faible $f_i$ est multiplié par une petite valeur $\nu$ (par exemple, $\nu = 0,1$) avant d'être ajouté au modèle fort $F_i$. Cette petite valeur est appelée shrinkage. En d'autres termes, au lieu de chaque itération à l'aide de la formule suivante:

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

Chaque itération utilise la formule suivante:

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

La réduction du boosting de gradient est comparable au taux d'apprentissage des réseaux de neurones. La soustraction contrôle la vitesse d'apprentissage du modèle performant, ce qui permet de limiter le surapprentissage. En d'autres termes, une valeur de réduction inférieure à 0,0 réduit le surapprentissage plus qu'une valeur de réduction proche de 1,0.

Dans notre code ci-dessus, le rétrécissement serait implémenté comme suit:

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