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. Le boosting de gradient implique, deux types de modèles:

  • un « faible » de ML, généralement un arbre de décision.
  • un « fort » de machine learning, qui repose sur plusieurs modèles de ML des modèles de ML.

Lors du boosting de gradient, un nouveau modèle faible est entraîné à chaque pas pour prédire "erreur" du modèle fort actuel (appelé pseudo-réponse). Nous détaillerons le mot clé "error" plus tard. Pour l'instant, supposons que "erreur" est la différence entre la prédiction et une étiquette régressive. Le modèle faible (c'est-à-dire l'erreur) est puis nous l'ajoutons au modèle fort avec un signe négatif pour réduire l'erreur efficace.

L'amélioration de gradient est itérative. Chaque itération appelle la formule suivante:

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

où :

  • $F_i$ est le modèle puissant à 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'une valeur maximale d'itérations ou si le modèle (fort) commence à surapprentissage, tel que mesuré 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é comme 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:

Tracé de la vérité terrain pour une caractéristique, x, et son étiquette, y. L'intrigue est un
série de sinus légèrement amortis
les vagues.

<ph type="x-smartling-placeholder"></ph> Figure 25. Ensemble de données synthétique régressif avec une caractéristique numérique

 

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

Trois tracés. Le premier graphe représente la prédiction du modèle fort, c&#39;est-à-dire
une ligne droite de pente 0 et d&#39;intersection avec l&#39;axe Y 0. Le deuxième tracé 
montre l&#39;erreur de
le modèle fort, qui est une série d&#39;ondes sinusoïdales. Le troisième tracé 
montre les
du modèle faible, c&#39;est-à-dire un ensemble de carrés
les vagues.

<ph type="x-smartling-placeholder"></ph> Figure 26. Trois tracés après la première itération.

 

Notez les points suivants à propos des tracés de la Figure 26:

  • Le premier graphique montre les prédictions du modèle fiable, qui est actuellement toujours 0.
  • Le deuxième graphique montre l'erreur, qui est l'étiquette du modèle faible.
  • Le troisième graphe montre le modèle faible.

Le premier modèle faible apprend une représentation grossière de l'étiquette, se concentre sur la partie gauche de l'espace des caractéristiques (la partie qui présente le plus de variations, et donc le plus grand nombre d'erreurs pour un mauvais modèle constant).

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

Trois tracés. Le premier graphe représente la prédiction du modèle fort, c&#39;est-à-dire
est l&#39;inverse du tracé de prédiction du modèle faible à partir du précédent
Figure : Le deuxième graphique montre l&#39;erreur du modèle robuste, qui est un bruit
ensemble d&#39;ondes sinusoïdales. Le troisième graphe représente la prédiction du modèle faible,
sont deux ou trois carrés
les vagues.

<ph type="x-smartling-placeholder"></ph> Figure 27. Trois tracés après la deuxième itération.

 

Notez les points suivants à propos des tracés de la Figure 27:

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

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

Les tracés montrent que le modèle fort se rapproche progressivement de la vérité terrain
tandis que les prédictions du modèle faible deviennent progressivement
s&#39;affaiblissent.

<ph type="x-smartling-placeholder"></ph> Figure 28. Trois tracés après la troisième et la dixième itération.

 

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

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

Les tracés précédents suggèrent l'essence de l'optimisation du gradient. Toutefois, il manque les deux opérations réelles suivantes:

  • Le rétrécissement
  • Optimisation des valeurs feuilles avec une étape de la méthode de Newton

Rétrécissement

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 s'appelle la rétrécissement. En d'autres termes, au lieu d'utiliser chaque itération comme suit, formule:

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

Chaque itération utilise la formule suivante:

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

Le rétrécissement lors de l'augmentation de gradient est analogue au taux d'apprentissage dans les réseaux de neurones. Le rétrécissement contrôle la vitesse d'apprentissage du modèle fort, ce qui permet de limiter surapprentissage. En d'autres termes, une valeur de rétrécissement proche de 0,0 réduit davantage le surapprentissage qu'une valeur de rétrécissement proche de 1,0.

Dans notre code ci-dessus, la réduction serait implémentée comme suit:

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