Gradient Boosted-Entscheidungsbäume

Wie das Bagging und Boosting ist auch das Gradient-Boosting eine Methode, die zusätzlich zum einen anderen ML-Algorithmus. Informell umfasst das Gradient-Boosting zwei Arten von Modellen:

  • ein „schwaches“ ML-Modells, das in der Regel ein Entscheidungsbaum ist.
  • ein „starkes“ Modell für maschinelles Lernen, das aus mehreren schwachen Modelle.

Beim Gradienten-Boosting wird in jedem Schritt ein neues schwaches Modell trainiert, "Fehler" des aktuellen starken Modells (das als Pseudoantwort bezeichnet wird). „Fehler“ . Vorerst nehmen wir an, ist der Unterschied zwischen die Vorhersage und ein regressives Label. Das schwache Modell (d. h. der „Fehler“) ist wird dem starken Modell dann mit einem negativen Vorzeichen hinzugefügt, um den Fehlerwert starkes Modell haben.

Das Gradientenverstärkung ist iterativ. Jede Iteration ruft die folgende Formel auf:

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

Dabei gilt:

  • $F_i$ ist das starke Modell bei Schritt $i$.
  • $f_i$ ist das schwache Modell bei Schritt $i$.

Dieser Vorgang wird wiederholt, bis ein Stoppkriterium erfüllt ist, z. B. ein Maximum oder die Überanpassung des (starken) Modells beginnt, gemessen an einem separaten Validierungs-Dataset.

Das Gradienten-Boosting wird nun an einem einfachen Regressions-Dataset veranschaulicht. Dabei gilt:

  • Ziel ist es, $y$ von $x$ vorherzusagen.
  • Das starke Modell wird mit einer Null-Konstante initialisiert: $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

Wenden wir diesen Code auf das folgende Dataset an:

Ein Diagramm der Grundwahrheit für ein Merkmal x und dessen Beschriftung y. Die Handlung ist eine
Reihe von etwas gedämpftem Sinus
Wellen.

<ph type="x-smartling-placeholder"></ph> Abbildung 25. Synthetisches regressives Dataset mit einem numerischen Merkmal.

 

Hier sind drei Diagramme nach der ersten Iteration des Gradienten-Boostings Algorithmus:

Drei Diagramme. Das erste Diagramm zeigt die Vorhersage des starken Modells,
eine gerade Linie mit Steigung 0 und y-Achsenabschnitt 0. Das zweite Diagramm zeigt den Fehler
das starke Modell, also eine Reihe von Sinuswellen. Das dritte Diagramm zeigt
Vorhersage des schwachen Modells, also einer Menge von Quadraten
Wellen.

<ph type="x-smartling-placeholder"></ph> Abbildung 26: Drei Diagramme nach der ersten Iteration.

 

Beachten Sie Folgendes zu den Diagrammen in Abbildung 26:

  • Das erste Diagramm zeigt die Vorhersagen des starken Modells, das derzeit immer 0.
  • Das zweite Diagramm zeigt den Fehler, also die Bezeichnung des schwachen Modells.
  • Das dritte Diagramm zeigt das schwache Modell.

Das erste schwache Modell lernt eine grobe Darstellung der Beschriftung, konzentriert sich auf den linken Teil des Feature-Bereichs (den Teil mit der größten Variation, und somit den meisten Fehler für das ständig falsche Modell).

Im Folgenden sehen Sie die gleichen Diagramme für eine weitere Iteration des Algorithmus:

Drei Diagramme. Das erste Diagramm zeigt die Vorhersage des starken Modells,
den Kehrwert der Vorhersage des schwachen Modells aus dem vorherigen
Abbildung. Das zweite Diagramm zeigt den Fehler des starken Modells,
Gruppe von Sinuswellen. Das dritte Diagramm zeigt die Vorhersage des schwachen Modells,
sind ein paar Quadrate
Wellen.

<ph type="x-smartling-placeholder"></ph> Abbildung 27. Drei Diagramme nach der zweiten Iteration.

 

Beachten Sie Folgendes zu den Diagrammen in Abbildung 27:

  • Das starke Modell enthält nun die Vorhersage des schwachen Modells des vorherigen Iteration.
  • Der neue Fehler des starken Modells ist etwas kleiner.
  • Die neue Vorhersage des schwachen Modells konzentriert sich nun auf den rechten Teil des Feature-Bereich.

Wir führen den Algorithmus für acht weitere Iterationen aus:

Die Diagramme zeigen, dass das starke Modell der Grundwahrheit allmählich näher kommt.
während die Vorhersage des schwachen Modells
schwächer werden.

<ph type="x-smartling-placeholder"></ph> Abbildung 28: Drei Diagramme nach der dritten und der zehnten Iteration.

 

Beachten Sie in Abbildung 28, dass die Vorhersage eines starken Modells beginnt, der Diagramm des Datasets.

Diese Abbildungen veranschaulichen den Gradienten-Boosting-Algorithmus unter Verwendung von Entscheidungsbäumen als schwache Lernende. Diese Kombination wird als Gradienten-Booster-Baum (Entscheidungsbaum) bezeichnet.

Die vorherigen Diagramme deuten auf den Kern des Gradient-Boostings hin. Dieses im Beispiel fehlen die folgenden zwei realen Operationen:

  • Die Schrumpfung
  • Optimierung von Blattwerten mit einem Schritt der Newton-Methode

Schrumpfung

Das schwache Modell $f_i$ wird mit einem kleinen Wert $\nu$ multipliziert (z. B. $\nu = 0,1$), bevor sie zum starken Modell $F_i$ hinzugefügt werden. Dieser kleine Wert wird als Shrinkage. Anders ausgedrückt: Statt jeder Iteration mit Formel:

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

Jede Iteration verwendet die folgende Formel:

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

Die Verringerung des Gradient-Boosting ist analog zur Lernrate in neuronalen Netzwerken. Die Schrumpfung steuert, wie schnell das starke Modell lernt, Überanpassung. Das heißt, ein Schrumpfwert näher an 0,0 reduziert die Überanpassung stärker. als ein Schrumpfwert näher an 1,0.

In unserem Code oben würde die Verkleinerung wie folgt implementiert werden:

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