Diskussion über Überanpassung in xgboost


20

Mein Setup ist wie folgt:

Ich folge den Richtlinien in "Applied Predictive Modeling". Daher habe ich korrelierte Merkmale gefiltert und erhalte am Ende Folgendes:

  • 4900 Datenpunkte im Trainingssatz und 1600 Datenpunkte im Testsatz.
  • Ich habe 26 Funktionen und das Ziel ist eine kontinuierliche Variable.

Ich wende eine 5-fache Kreuzvalidierung an, um Modelle mit dem caretPaket zu trainieren . Wenn ich ein MARS-Modell anwende, erhalte ich einen mittleren absoluten Fehler (MAE) von ca. 4 sowohl auf dem Trainingssatz als auch auf dem Testsatz.

Wenn ich jedoch xgboost (entweder den Baumalgorithmus oder den linearen) anwende, erhalte ich ungefähr 0,32 (!) Für das Trainingsset und 2,4 für das Testset.

Wenn der Testfehler also das 8-fache des Trainingsfehlers ist, würde ich sagen: Ich habe die Trainingsdaten überanpasset. Trotzdem bekomme ich beim Test sowieso einen kleineren Fehler.

Ich benutze die folgenden Parameter bei xgboost:

  • nrounds = 1000und eta = 0.01(zunehmende Runden und abnehmende Eta könnten helfen, aber mir geht der Speicher aus und die Laufzeit ist zu lang)
  • max_depth = 16: wenn ich andere Beiträge mit dem Standardwert 6 vergleiche, sieht das groß aus, aber das Problem ist ziemlich komplex - vielleicht ist 16 in diesem Fall nicht zu groß.
  • colsample_bytree = 0.7, subsample = 0.8und min_child_weight = 5: dabei versuche ich overfit zu reduzieren.

Wenn ich max_depth reduziere, rücken Zug und Testfehler näher zusammen, aber es gibt immer noch eine große Lücke und der Testfehler ist größer (etwas über 3).

Mit dem linearen Booster erhalte ich auf optimalen Parametern ungefähr den gleichen Zug- und Testfehler:

  • lambda = 90 und alpha = 0: durch Kreuzvalidierung gefunden, sollte Lambda eine Überanpassung verhindern.
  • colsample_bytree = 0.8, subsample = 0.8und min_child_weight = 5: dabei versuche ich overfit zu reduzieren.

Ich habe das Gefühl, dass xgboost immer noch überarbeitet ist - aber der Trainingsfehler und soweit ich im Echtzeittest sehen kann (ich habe die xgboost-Modelle und ein Ensemble davon in der Realität seit 4 Tagen verwendet), sieht ok aus (der Fehler ist) größer als der Testfehler, aber es gibt im wirklichen Leben mehr Unsicherheit über die Vorhersage von Merkmalen und anderen Variablen.

Was denkst du: Kann ich Overfit akzeptieren, wenn (wenn dies möglich ist) die Leistung im wirklichen Leben überlegen ist? Neigt xgboost in meiner Umgebung zur Überanpassung?

Antworten:


34

Ist die Überanpassung so schlecht, dass Sie kein Modell auswählen sollten, das eine Überanpassung durchführt, obwohl der Testfehler geringer ist? Nein, aber Sie sollten eine Begründung für die Auswahl haben.

Dieses Verhalten ist nicht auf XGBoost beschränkt. Es ist ein roter Faden bei allen Techniken des maschinellen Lernens. Finden des richtigen Kompromisses zwischen Unter- und Überanpassung. Die formale Definition ist der Bias-Varianz-Kompromiss (Wikipedia) .

Der Bias-Varianz-Kompromiss

Das Folgende ist eine Vereinfachung des Bias-Varianz-Kompromisses, um die Wahl Ihres Modells zu rechtfertigen.

  • Wir sagen, dass ein Modell eine hohe Verzerrung aufweist, wenn es nicht in der Lage ist, die Informationen in den Daten vollständig zu nutzen. Es ist zu stark auf allgemeine Informationen angewiesen, z. B. auf den häufigsten Fall, den Mittelwert der Antwort oder wenige leistungsfähige Funktionen. Verzerrungen können von falschen Annahmen herrühren, beispielsweise wenn angenommen wird, dass die Variablen normalverteilt sind oder das Modell linear ist.

  • Wir sagen, dass ein Modell eine hohe Varianz aufweist, wenn es zu viele Informationen aus den Daten verwendet. Es stützt sich auf Informationen, die nur in dem ihm vorgelegten Trainingssatz relevant sind, der sich nicht gut genug verallgemeinert. In der Regel ändert sich das Modell stark, wenn Sie den Trainingssatz ändern, daher der Name "Hohe Varianz".

Diese Definitionen sind den Definitionen von Unter- und Überanpassung sehr ähnlich. Diese Definitionen sind jedoch oft zu vereinfacht, um Gegensätze zu sein, wie in

  • Das Modell passt nicht, wenn sowohl der Trainings- als auch der Testfehler hoch sind. Dies bedeutet, dass das Modell zu einfach ist.
  • Das Modell ist überpassend, wenn der Testfehler höher als der Trainingsfehler ist. Dies bedeutet, dass das Modell zu komplex ist.

Diese Vereinfachungen sind natürlich hilfreich, da sie bei der Auswahl der richtigen Komplexität des Modells helfen. Sie übersehen jedoch einen wichtigen Punkt, nämlich die Tatsache, dass (fast) jedes Modell sowohl eine Verzerrungs- als auch eine Varianzkomponente aufweist. Die Beschreibung der Unteranpassung / Überanpassung sagt Ihnen, dass Sie zu viel Voreingenommenheit / zu viel Varianz haben, aber (fast) immer beides .

Wenn Sie weitere Informationen über den Bias-Varianz-Kompromiss wünschen, stehen Ihnen bei Google viele hilfreiche Visualisierungen und gute Ressourcen zur Verfügung. Jedes Lehrbuch zum maschinellen Lernen enthält einen Abschnitt über den Kompromiss zwischen Bias und Varianz. Hier einige

  • Eine Einführung in das statistische Lernen und Elemente des statistischen Lernens (hier verfügbar) .
  • Mustererkennung und maschinelles Lernen, von Christopher Bishop.
  • Maschinelles Lernen: Eine probabilistische Perspektive, von Kevin Murphy.

Außerdem ist Scott Fortmann-Roes Verständnis des Bias-Varianz-Kompromisses ein netter Blog-Beitrag, der mir beim Erfassen geholfen hat .

Anwendung auf Ihr Problem

Sie haben also zwei Modelle,

MAE trainierenTesten Sie MAEMARS4.04.0Geringe Varianz, höhere Vorspannung,XGBoost0,32.4Höhere Varianz, geringere Vorspannung,

und Sie müssen eine auswählen. Dazu müssen Sie definieren, was ein besseres Modell ist. Die Parameter, die in Ihre Entscheidungen einbezogen werden sollten, sind die Komplexität und die Leistung des Modells.

  • Wie viele "Einheiten" Komplexität möchten Sie gegen eine "Einheit" Leistung eintauschen?
    • Mehr Komplexität ist mit höherer Varianz verbunden. Wenn Sie möchten, dass sich Ihr Modell gut auf einen Datensatz verallgemeinert, der sich ein wenig von dem unterscheidet, auf den Sie trainiert haben, sollten Sie weniger Komplexität anstreben.
    • Wenn Sie ein Modell wünschen, das Sie leicht verstehen können, können Sie dies auf Kosten der Leistung tun, indem Sie die Komplexität des Modells verringern.
    • Wenn Sie die beste Leistung für einen Datensatz anstreben, den Sie wissen, aus demselben generativen Prozess stammt wie Ihr Trainingssatz, können Sie die Komplexität manipulieren, um Ihren Testfehler zu optimieren und als Metrik zu verwenden. Dies geschieht, wenn Ihr Trainingssatz zufällig aus einem größeren Satz ausgewählt wird und Ihr Modell auf diesen Satz angewendet wird. Dies ist beispielsweise bei den meisten Kaggle-Wettbewerben der Fall.

Das Ziel hier ist nicht, ein Modell zu finden, das "nicht überpasst". Es ist das Modell zu finden, das den besten Bias-Varianz-Kompromiss aufweist. In diesem Fall würde ich argumentieren, dass die durch das XGBoost-Modell erzielte Verringerung der Verzerrung gut genug ist, um die Zunahme der Varianz zu rechtfertigen.

Was kannst du tun

Sie können dies jedoch wahrscheinlich besser tun, indem Sie die Hyperparameter anpassen.

  • Die Anzahl der Runden zu erhöhen und die Lernrate zu verringern, ist eine Möglichkeit. Etwas "Seltsames" an der Steigungsanhebung ist, dass das Ausführen weit über den Punkt hinaus, an dem der Trainingsfehler Null erreicht hat, den Testfehler noch zu verbessern scheint (wie hier diskutiert: Ist tiefer besser nur, wenn flach gut ist? ). Sie können versuchen, Ihr Modell in Ihrem Datensatz ein wenig länger zu trainieren, nachdem Sie die anderen Parameter eingestellt haben.

  • Die Tiefe der Bäume, die Sie anbauen, ist ein sehr guter Ausgangspunkt. Sie müssen beachten, dass Sie für jede Tiefeneinheit die doppelte Anzahl der zu konstruierenden Blätter erhalten. Wenn Sie Bäume der Größe zwei anstatt der Größe 16 züchten würden, würde es dauern1/214der ganzen Zeit! Sie sollten versuchen, mehr kleinere Bäume zu züchten. Der Grund dafür ist, dass die Tiefe des Baums den Grad der Merkmalsinteraktion darstellen sollte . Dies mag Jargon sein, aber wenn Ihre Features einen Interaktionsgrad von 3 aufweisen (grob gesagt: Eine Kombination von 4 Features ist nicht leistungsfähiger als eine Kombination von 3 dieser Features + dem vierten), wachsen Bäume mit einer Größe von mehr als 3 schädlich. Zwei Bäume der Tiefe drei haben mehr Generalisierungskraft als ein Baum der Tiefe vier. Dies ist ein ziemlich kompliziertes Konzept, auf das ich im Moment nicht näher eingehen werde, aber Sie können diese Sammlung von Papieren zunächst prüfen . Beachten Sie auch, dass tiefe Bäume zu einer hohen Varianz führen!

  • Die Verwendung von Unterabtastungen, die als Absacken bezeichnet werden , ist sehr hilfreich , um die Varianz zu verringern. Wenn Ihre einzelnen Bäume eine hohe Varianz aufweisen, werden die Bäume durch Absacken gemittelt, und der Durchschnitt weist eine geringere Varianz auf als einzelne Bäume. Wenn Sie nach dem Einstellen der Tiefe Ihrer Bäume immer noch eine hohe Varianz feststellen, versuchen Sie, die Unterabtastung zu erhöhen (dh den Anteil der verwendeten Daten zu verringern). Die Unterabtastung des Merkmalsraums erreicht ebenfalls dieses Ziel.


1
Man sollte nicht "Danke" sagen, aber für diese lange und interessante Antwort möchte ich "Danke" sagen. Ich hatte bereits einige Kenntnisse über einige der Dinge, die Sie schreiben, aber das war wirklich gut zusammengestellt. Ich werde einige Ihrer Referenzen durchgehen, neue Bäume züchten und vielleicht mit einem Kommentar zurückkommen. Vorerst: Danke! Groß!
Ric

Der Link zur Interaktionsseite stat.columbia.edu/~jakulin/Int ist wirklich toll!
Ric

Ich habe deinen Rat befolgt und die Tiefe der Bäume auf 3 begrenzt, habe aber 1200 Minuten gebraucht und die Ergebnisse fühlen sich großartig an: sehr schnelle Berechnungen, Unterschied zwischen Zug und Test reduziert und immer noch auf einem guten Niveau. Der Rest der Geschichte ist hier: stats.stackexchange.com/questions/205858/…
Ric
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.