Hallo, alle miteinander
Ich bin Yusuke Ono, ein Tester in JMP Japan.
Es scheint mir, dass bei Verwendung der k-fachen Validierung die vorhergesagten Werte manchmal sehr verrauscht werden. Bitte sehen Sie den Screenshot unten. Dies ist eine grafische Darstellung der vorhergesagten Werte für ein Modell mit einer X-Variablen. Die 5-fache Validierung wird verwendet.

Ich möchte vorschlagen, dass wir vorhergesagte Werte einfach wie folgt berechnen.
(0 + :Name( "y Predictor FoldA==1" ) + :Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) + :Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
Die aktuelle Vorhersageformel lautet wie folgt.
If( :N Val > 0,
(0 + :Name( "FoldA==1" ) * :Name( "y Predictor FoldA==1" ) + :Name( "FoldA==2" )
* :Name( "y Predictor FoldA==2" ) + :Name( "FoldA==3" ) *
:Name( "y Predictor FoldA==3" ) + :Name( "FoldA==4" ) *
:Name( "y Predictor FoldA==4" ) + :Name( "FoldA==5" ) *
:Name( "y Predictor FoldA==5" )) / :N Val,
(0 + (1 - :Name( "FoldA==1" )) * :Name( "y Predictor FoldA==1" ) + (1 -
:Name( "FoldA==2" )) * :Name( "y Predictor FoldA==2" ) + (1 -
:Name( "FoldA==3" )) * :Name( "y Predictor FoldA==3" ) + (1 -
:Name( "FoldA==4" )) * :Name( "y Predictor FoldA==4" ) + (1 -
:Name( "FoldA==5" )) * :Name( "y Predictor FoldA==5" )) / :N Trn
);
Könnten Sie mir bitte Ihre Meinung sagen?
Schritte zur Reproduktion dieses Phänomens
(1) Führen Sie das folgende Skript aus, um einen Beispieldatensatz zu erstellen.
Names Default To Here(1);
Random Reset(111111111);
n = 10000;
x = J(n, 1, Random Uniform(-10, 10));
y = Sin(x) + J(n, 1, Random Normal());
As Table(x||y,<<COLUMN names=""></COLUMN>
(2) Wählen [Add-Ins] > [XGBoost] > [K-Fold-Spalten erstellen] .
2-1. Geben Sie "1" für ein [Anzahl der zu erstellenden K-Fold-Spalten] .
2-2. Geben Sie "y" an [Y, Antwort] .
2-3. Klicken [Gehen] .
(3) Führen Sie das folgende Skript aus.
XGBoost(
Y( :y ), X( :x ),
Validation( :FoldA ),
Fit( max_depth( 3 ), alpha( 10 ), lambda( 10 ), iterations( 50 ) ),
);
(4) Wählen [Vorhersageformel speichern] im Menü des roten Dreiecks am Umriss "Modell 1".
(5) Führen Sie das folgende Skript aus, um die gespeicherten vorhergesagten Werte anzuzeigen.
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y Predictor ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
(6) Führen Sie das folgende Skript aus, um die Handlung meines Vorschlags zu sehen.
New Column( "My Suggestion",
Formula(
(:Name( "y Predictor FoldA==1" ) +
:Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) +
:Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
)
);
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :My Suggestion ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
Die angehängte Datentabelle enthält diese Ergebnisse. Führen Sie die Tabellenskripte aus, um die Diagramme anzuzeigen.
Vielen Dank für Ihre Meinung im Voraus.
Dies sind gute Fragen an Yusuke. Wenn wir den Gesamtprozess in zwei Hauptschritte aufteilen, müssen wir zunächst ein oder mehrere vernünftige XGBoost-Modelle bestimmen. Für diese k-fache Kreuzvalidierung oder ähnliches ist von unschätzbarem Wert. Zweitens werden Vorhersagen getroffen, und dies wird in Vorhersagen zu den aktuellen Trainingsdaten und zu neuen Testdaten unterteilt. Bei Vorhersagen zu den Trainingsdaten führt die Verwendung eines Modells, das mit denselben Daten trainiert wurde, zu Vorhersagen, die normalerweise überpasst und unrealistisch gut sind. Daher sind Vorhersagen außerhalb der Falz am sinnvollsten. Bei neuen Testdaten ist die Mittelung der Vorhersagen aller Modelle, bei denen diese Daten nicht erkannt wurden, gut, wie Sie vorgeschlagen haben. (Das Add-In führt dies bereits für alle Zeilen aus, für die Y fehlt.) Es ist auch in Ordnung, eine anschließende endgültige Anpassung an die vollständigen Daten ohne Validierung unter Verwendung von Parametern durchzuführen, die durch Kreuzvalidierung ermittelt wurden. Ich habe die Erfahrung gemacht, dass die Vorhersagen aus der Mittelung des k-fachen ("Bagging") und denen aus einer vollständigen Datenanpassung tendenziell sehr ähnlich sind, obwohl Sie sie sogar mitteln könnten, zum Beispiel 0,5 * (eingesackte k-fache Vorhersagen) + 0,5 * (Vorhersagen aus vollständiger Datenanpassung). Ich denke nicht, dass es sich lohnt, zu versuchen, das "Beste" unter den k-fachen Modellanpassungen zu finden, da sie betrieblich gleichwertig sind und Sie das Risiko einer Überanpassung mit einer solchen Auswahl eingehen.
Danke für deine Antwort, Russ.
Ich verstehe jetzt, dass diese falschen Vorhersagen von JMPs XGBoost zur Bewertung von Modellen, zur Erkennung von Ausreißern und zur Erstellung von Ensemblemodellen verwendet werden können.
Ich denke, es gibt verschiedene Möglichkeiten, endgültige Vorhersagemodelle zu erstellen, wenn wir die k-Kreuzvalidierung verwenden.
- Passen Sie ein Modell mit ausgewählten Optimierungsparametern für alle Daten an. (
- Durchschnittliche k Modelle. (
- Verwenden Sie nur das "beste" Modell unter k Modellen.
Denken Sie, dass die erste Methode normalerweise besser ist als die zweite und die dritte, um ein endgültiges Vorhersagemodell zu erhalten?
Vielen Dank an Yusuke für die Frage und die sehr schöne Beschreibung, wie man sie mit JSL reproduziert. Sie haben einen wichtigen Unterschied zwischen der Funktionsweise des Add-Ins bei der Berechnung vorhergesagter Werte im Vergleich zu anderen Vorhersagemodellierungsplattformen in JMP festgestellt. Die Vorhersagen aus dem Add-In sind "out-of-fold", dh jeder vorhergesagte Wert wird nur aus Modellanpassungen berechnet, die diese Beobachtung ausschließen.
Nehmen Sie als Beispiel das 5-fache Basic und nehmen Sie an, dass die erste Zeile in den Daten dem 3-fachen zugeordnet ist. Das Add-In passt für fünf Modelle, wobei jede Falte nacheinander herausgehalten wird. Der vorhergesagte Wert für diese erste Reihe basiert jedoch nur auf der dritten Anpassung, die Falte 3 ausschließt. Eine ähnliche Logik wird für alle Zeilen verwendet. Warum das? Mehrere Gründe:
1. Die Out-of-Fold-Vorhersagen bieten eine realistische Einschätzung der Leistung des Modells für zukünftige, unsichtbare Daten. Tatsächlich basieren alle Ausgabestatistiken und Grafiken mit der Bezeichnung "Validierung" auf den falschen Vorhersagen. Wie Sie bemerkt haben, kann die Variabilität dieser Vorhersagen viel größer sein als Vorhersagen, die mit "In-Fold" -Daten berechnet wurden, dh wenn dieselben Daten für Training und Vorhersage verwendet werden.
2. Die Spalte "Out-of-Fold-Vorhersage" ist eine hervorragende Möglichkeit, nach Ausreißern und Fehlern zu suchen, die das Modell möglicherweise im gesamten Trainingssatz gemacht hat. K-Fold ist insofern schön, als jede Beobachtung genau einmal durchgeführt wird und wir daher für jede Zeile eine Out-of-Fold-Vorhersage haben.
3. Die Out-of-Fold-Vorhersage-Spalte kann verwendet werden, um ähnliche Spalten zu erstellen, die aus anderen guten Modellen erstellt wurden. Dies kann durch einfache Mittelwertbildung oder durch Verwendung der nicht gefalteten Spalten als neue Prädiktoren in einem Modell der zweiten Ebene in einer Technik erfolgen, die häufig als "Stapeln" bezeichnet wird. Das Modell der zweiten Ebene ist in der Regel einfacher als Modelle der ersten Ebene, z. B. ein Lasso-Modell aus Generalized Regression oder sogar ein anderes XGBoost-Modell mit geringerer Tiefe. Gestapelte Ensemble-Modelle weisen tendenziell eine bessere Vorhersageleistung auf als alle Modelle der ersten Ebene.
Um die von Ihnen vorgeschlagenen einfachen trainingsbasierten Vorhersagen zu erhalten, besteht eine gute Möglichkeit darin, ein neues XGBoost-Modell ohne angegebene Validierungsspalte anzupassen. Eine andere verwandte Möglichkeit besteht darin, eine Kopie der Datentabelle zu erstellen, alle Y-Werte auf fehlend zu setzen und sie mit den Originaldaten zu verketten. Die Vorhersagen in diesem Fall für die Zeilen mit fehlenden Ys sind der Durchschnitt der Vorhersagen über alle angepassten Modelle, eine Technik, die als "Absacken" bezeichnet wird.
Abschließend wollte ich erwähnen, dass die komplexe Formel, die Sie anzeigen, das Ergebnis der Abdeckung aller Fälle ist. Wenn beispielsweise in einer Zeile in den Originaldaten ein Y fehlt, möchten wir die eingesackte Vorhersage für alle Modelle verwenden.