Gradientenverstärkung - extreme Vorhersagen gegenüber Vorhersagen nahe 0,5


7

Angenommen, Sie trainieren zwei verschiedene Gradient Boosting Classifier-Modelle für zwei verschiedene Datensätze. Sie verwenden eine einmalige Kreuzvalidierung und zeichnen die Histogramme der Vorhersagen auf, die die beiden Modelle ausgeben. Die Histogramme sehen folgendermaßen aus: Geben Sie hier die Bildbeschreibung ein

und das:

Geben Sie hier die Bildbeschreibung ein

In einem Fall sind die Vorhersagen (für Sätze außerhalb der Stichprobe / Validierung) meist extrem (nahe 0 und 1), und in dem anderen Fall liegen die Vorhersagen nahe bei 0,5.

Was kann, wenn überhaupt, aus jedem Diagramm abgeleitet werden? Wie könnte man den Unterschied erklären? Kann etwas über den Datensatz / die Funktionen / das Modell gesagt werden?

Mein Bauchgefühl ist, dass im ersten Fall die Funktionen die Daten besser erklären, damit das Modell besser zu den Daten passt (und möglicherweise überpasst, aber nicht unbedingt - die Leistung der Validierungs- / Testsätze könnte immer noch gut sein, wenn die Funktionen erklären die Daten tatsächlich gut). Im zweiten Fall erklären die Funktionen die Daten nicht gut und daher passt das Modell nicht zu genau zu den Daten. Die Leistung der beiden Modelle könnte jedoch in Bezug auf Präzision und Rückruf immer noch gleich sein. Wäre das richtig?

Antworten:


9

Ich habe ein kurzes Drehbuch vorbereitet, um zu zeigen, was meiner Meinung nach die richtige Intuition sein sollte.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import ensemble
from sklearn.model_selection import train_test_split


def create_dataset(location, scale, N):
    class_zero = pd.DataFrame({
        'x': np.random.normal(location, scale, size=N),
        'y': np.random.normal(location, scale, size=N),
        'C': [0.0] * N
    })

    class_one = pd.DataFrame({
        'x': np.random.normal(-location, scale, size=N),
        'y': np.random.normal(-location, scale, size=N),
        'C': [1.0] * N
    })
    return class_one.append(class_zero, ignore_index=True)

def preditions(values):
    X_train, X_test, tgt_train, tgt_test = train_test_split(values[["x", "y"]], values["C"], test_size=0.5, random_state=9)
    clf = ensemble.GradientBoostingRegressor()
    clf.fit(X_train, tgt_train)
    y_hat = clf.predict(X_test)
    return y_hat

N = 10000
scale = 1.0
locations = [0.0, 1.0, 1.5, 2.0]

f, axarr = plt.subplots(2, len(locations))
for i in range(0, len(locations)):
    print(i)
    values = create_dataset(locations[i], scale, N)

    axarr[0, i].set_title("location: " + str(locations[i]))

    d = values[values.C==0]
    axarr[0, i].scatter(d.x, d.y, c="#0000FF", alpha=0.7, edgecolor="none")
    d = values[values.C==1]
    axarr[0, i].scatter(d.x, d.y, c="#00FF00", alpha=0.7, edgecolor="none")

    y_hats = preditions(values)
    axarr[1, i].hist(y_hats, bins=50)
    axarr[1, i].set_xlim((0, 1))

Was das Skript macht:

  • Es werden unterschiedliche Szenarien erstellt, in denen die beiden Klassen zunehmend voneinander getrennt werden. Ich könnte hier eine formalere Definition dafür geben, aber ich denke, Sie sollten die Intuition verstehen
  • Es passt einen GBM-Regressor an die Testdaten an und gibt die vorhergesagten Werte aus, die die Test-X-Werte dem trainierten Modell zuführen

Das erstellte Diagramm zeigt, wie die generierten Daten in jedem Szenario aussehen, und zeigt die Verteilung der vorhergesagten Werte. Die Interpretation: mangelnde Trennbarkeit führt dazu, dass das vorhergesagte bei oder um 0,5 liegt.y

All dies zeigt die Intuition, ich denke, es sollte nicht schwer sein, dies formeller zu beweisen, obwohl ich von einer logistischen Regression ausgehen würde - das würde die Mathematik definitiv einfacher machen.

Abbildung 1


BEARBEITEN 1

Ich vermute im Beispiel ganz links, wo die beiden Klassen nicht trennbar sind, wenn Sie die Parameter des Modells so einstellen, dass sie zu den Daten passen (z. B. tiefe Bäume, große Anzahl von Bäumen und Merkmalen, relativ hohe Lernrate), würden Sie immer noch erhalten das Modell, um extreme Ergebnisse vorherzusagen, richtig? Mit anderen Worten, die Verteilung der Vorhersagen zeigt an, wie genau das Modell den Daten entsprach.

Nehmen wir an, wir haben einen super tiefen Baumentscheidungsbaum. In diesem Szenario würden wir die Verteilung der Vorhersagewerte bei 0 und 1 sehen. Wir würden auch einen geringen Trainingsfehler sehen. Wir können den Trainingsfehler beliebig klein machen, wir könnten diese tiefe Baumüberanpassung bis zu dem Punkt haben, an dem jedes Blatt des Baums einem Datenpunkt im Zugsatz entspricht und jeder Datenpunkt im Zugsatz einem Blatt im Baum entspricht. Es wäre die schlechte Leistung auf dem Testsatz eines Modells, die auf dem Trainingssatz sehr genau ist, ein deutliches Zeichen für eine Überanpassung. Beachten Sie, dass ich in meinem Diagramm die Vorhersagen auf dem Testsatz präsentiere, sie sind viel informativer.

Ein zusätzlicher Hinweis: Lassen Sie uns mit dem Beispiel ganz links arbeiten. Trainieren wir das Modell an allen Datenpunkten der Klasse A in der oberen Hälfte des Kreises und an allen Datenpunkten der Klasse B in der unteren Hälfte des Kreises. Wir hätten ein sehr genaues Modell mit einer Verteilung der Vorhersagewerte bei 0 und 1. Die Vorhersagen auf dem Testsatz (alle Punkte der Klasse A im unteren Halbkreis und Punkte der Klasse B im oberen Halbkreis) wären ebenfalls Peaking bei 0 und 1 - aber sie wären völlig falsch. Dies ist eine böse "kontroverse" Trainingsstrategie. Zusammenfassend lässt sich sagen: Die Verteilung hängt vom Grad der Trennbarkeit ab, aber es kommt nicht wirklich darauf an.


Ich vermute im Beispiel ganz links, wo die beiden Klassen nicht trennbar sind, wenn Sie die Parameter des Modells so einstellen, dass sie zu den Daten passen (z. B. tiefe Bäume, große Anzahl von Bäumen und Merkmalen, relativ hohe Lernrate), würden Sie immer noch erhalten das Modell, um extreme Ergebnisse vorherzusagen, richtig? Mit anderen Worten, die Verteilung der Vorhersagen zeigt an, wie genau das Modell den Daten entsprach.
Rinspy

1

Zuerst würde ich vorschlagen, einen Datensatz anstelle von zwei zu verwenden, um die Vorhersagen der Ausgabewahrscheinlichkeit zu untersuchen. Der Grund ist einfach: Wenn wir die Daten ändern, weiß niemand, was passieren wird. Wie in @ IcannotFixThis Antwort demonstriert, hat genau dasselbe Modell eine andere Wahrscheinlichkeitsausgabe, wenn sich die Daten von überlappend zu trennbarer ändern.


Wenn wir darauf bestehen, aus den begrenzten Informationen über zwei verschiedene Datensätze zu sprechen, können wir nur sagen, dass "extreme Vorhersagen" bedeuten, dass das Modell überpasst / die Daten für das Modell zu "einfach" sind


1

Die Vorhersagen hängen normalerweise von Ihrem Modell ab. Entscheidungsbäume liefern im Allgemeinen ziemlich "kalibrierte" Ergebnisse, die fast als Wahrscheinlichkeit interpretiert werden können. Einige wie SVM zum Beispiel nicht. Dies hängt aber auch stark von Über- / Unteranpassung ab. Oder auf die Anzahl der Funktionen (nein, es muss nicht unbedingt "besser" sein). Wenn dies eine Klasse ist, ist die erste wahrscheinlich überpasst.

Aber das Wichtigste zuerst: Wo ist deine andere Klasse? Bei Ihren Vorhersagen sollten Sie immer beide Klassen (mit unterschiedlichen Farben) zeichnen. Aus den Vorhersagen einer Klasse kann man nicht zu viel sagen.

Wenn Sie die Leistung messen und Rückschlüsse darauf ziehen möchten, wie viel aus den Funktionen gelernt wird, verwenden Sie eine Punktzahl wie ROC AUC, bei der die Reihenfolge der Ereignisse und nicht die Verteilung von Bedeutung ist. Wenn Sie mit Verteilungen arbeiten möchten, können Sie sich die Wahrscheinlichkeitskalibrierungsmethoden ansehen (oder lesen, welche Klassifikatoren ohnehin gute Kalibrierungen liefern). Sie sind nicht perfekt, sondern zielen darauf ab, die Vorhersagen in Wahrscheinlichkeiten umzuwandeln (und geben der Ausgabe daher eine Bedeutung ).


0

Das erste Szenario kann auf eine Überanpassung der Trainingsdaten zurückzuführen sein. Die Leistung innerhalb und außerhalb der Stichprobe hängt auch davon ab, welche Bewertungsmetrik Sie verwenden (oder auf das Problem anwendbar sind). Überprüfen Sie neben dem Vergleich der Metriken auch die Verwirrungsmatrizen, um die Fehlklassifizierungen zu überprüfen.

Die Verwendung von Metriken wie Logloss und die Einführung von Regularisierungsparametern könnte eine weitere Option sein. ( Siehe XGBoost - Ermöglicht das Hinzufügen von Alpha- und Beta-Regularisierungsparametern.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.