Gradient Boosted-Entscheidungsbäume

Wie das Bagging und Boosting ist das Gradient Boosting eine Methode, die auf einen anderen Algorithmus für maschinelles Lernen angewendet wird. Beim Gradienten-Boosting gibt es zwei Arten von Modellen:

  • Ein ML-Modell, das normalerweise einen Entscheidungsbaum darstellt.
  • ML-Modell, das aus mehreren schwachen Modellen besteht.

Beim Gradienten-Boosting wird bei jedem Schritt ein neues schwaches Modell trainiert, um den Fehler des aktuellen starken Modells (das als Pseudoantwort bezeichnet wird) vorherzusagen. Später erhalten Sie weitere Informationen zu Fehlern. Vorerst ist der Fehler „Fehler“ der Unterschied zwischen der Vorhersage und einem regressiven Label. Das schwache Modell (d. h. der "error") wird dem starken Modell dann mit einem negativen Vorzeichen hinzugefügt, um den Fehler des starken Modells zu reduzieren.

Das Gradient Boosting ist iterativ. Bei jeder Iteration wird die folgende Formel aufgerufen:

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

wobei

  • $F_i$ ist das überzeugende Modell in Schritt $i$.
  • $f_i$ ist das schwache Modell in Schritt $i$.

Dieser Vorgang wird wiederholt, bis ein Stoppkriterium erfüllt ist, z. B. eine maximale Anzahl von Iterationen oder ob sich das (starke) Modell gemäß einem separaten Validierungs-Dataset überschneidet.

Die Gradientenverstärkung für ein einfaches Regressions-Dataset veranschaulicht Folgendes:

  • Das Ziel besteht darin, $y$ von $x$ vorherzusagen.
  • Das starke Modell wird als Nullkonstante festgelegt: $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:

Eine Darstellung der Ground Truth für ein Element, x, und dessen Label, y. Das Diagramm ist eine Reihe

etwas gedämpfter Sinuswellen.

Abbildung 25. Ein synthetisches regressives Dataset mit einem numerischen Feature.

 

Hier sind drei Diagramme nach der ersten Iteration des Gradient-Boosting-Algorithmus:

Drei Parzellen. Das erste Diagramm zeigt die Vorhersage des starken Modells, bei dem es sich um eine gerade Linie von Neigung 0 und y-Achsenabschnitt 0 handelt. Das zweite Diagramm zeigt den Fehler des starken Modells, bei dem es sich um eine Reihe von Sinuswellen handelt. Das dritte Diagramm zeigt die Vorhersage des schwachen Modells, bei dem es sich um eine Gruppe quadratischer Wellen handelt.

Abbildung 26. Drei Sätze 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 ist.
  • Das zweite Diagramm zeigt den Fehler – das Label des schwachen Modells.
  • Das dritte Diagramm zeigt das schwache Modell.

Das erste schwache Modell lernt eine grobe Darstellung des Labels und konzentriert sich hauptsächlich auf den linken Teil des Merkmalsbereichs (den Teil mit den meisten Abweichungen und damit den meisten Fehler für das konstant falsche Modell).

Im Folgenden sehen Sie dieselben Darstellungen für eine weitere Iteration des Algorithmus:

Drei Parzellen. Das erste Diagramm zeigt die Vorhersage des starken Modells, das eine Kehrseite der Vorhersage des schwachen Modells aus der vorherigen Abbildung ist. Das zweite Diagramm zeigt den Fehler des starken Modells, bei dem es sich um einen lauten Sinuswellen handelt. Das dritte Diagramm zeigt die Vorhersage des schwachen Modells, bei dem es sich um ein paar quadratische Wellen handelt.

Abbildung 27. Drei Sätze nach der zweiten Iteration.

 

Beachten Sie Folgendes zu den Diagrammen in Abbildung 27:

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

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

Die Diagramme zeigen, dass das starke Modell der Ground Truth schrittweise immer mehr näher kommt, während die Vorhersage des schwachen Modells nach und nach immer schwächer wird.

Abbildung 28: Drei Sätze nach der dritten Iteration und der zehnten Iteration.

 

Beachten Sie in Abbildung 28, dass die Vorhersage eines starken Modells der Grafik des Datasets ähnelt.

Diese Zahlen veranschaulichen den Gradienten-Boosting-Algorithmus, bei dem Entscheidungsbäume als schwache Lerner verwendet werden. Diese Kombination wird als Gradient Boosted (Entscheidungsbaum) bezeichnet.

Die vorhergehenden Grafiken deuten darauf hin, dass das Farbverlauf-Boosting essentiell ist. In diesem Beispiel fehlen jedoch die folgenden beiden realen Vorgänge:

  • Verkleinerung
  • Blattwerte mit einem Schritt der Newtons-Methode optimieren

Verkleinerung

Das schwache Modell $f_i$ wird mit einem kleinen Wert $\nu$ (z. B. $\nu = 0.1$) multipliziert, bevor er dem starken Modell $F_i$ hinzugefügt wird. Dieser kleine Wert wird als Shrinkage bezeichnet. Anders ausgedrückt: Verwenden Sie anstelle der einzelnen Iterationen die folgende Formel:

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

Für jede Iteration wird die folgende Formel verwendet:

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

Die Verkleinerung beim Gradienten-Boosting entspricht der Lernrate in neuronalen Netzwerken. Durch die Verkleinerung wird gesteuert, wie schnell das starke Modell lernt, was eine Überanpassung verhindert. Das bedeutet, dass ein Verkleinerungswert, der näher bei 0,0 liegt, eine Verengung reduziert, als einen Verkleinerungswert, der näher bei 1,0 liegt.

In unserem Code oben würde die Verkleinerung folgendermaßen implementiert:

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