Zurechnung vor oder nach der Aufteilung in Zug und Test?


18

Ich habe einen Datensatz mit N ~ 5000 und ungefähr 1/2, der auf mindestens einer wichtigen Variablen fehlt. Die Hauptanalysemethode sind Cox-proportionale Gefahren.

Ich plane mehrere Anrechnungen. Ich werde mich auch in einen Zug und ein Test-Set aufteilen.

Sollte ich die Daten aufteilen und dann separat unterstellen oder unterstellen und dann aufteilen?

Wenn es darauf ankommt, werde ich PROC MIin verwenden SAS.


2
50% fehlende Werte für eine entscheidende Variable? Pfui. Warum erstellen Sie nicht eine Fehlende Kategorie für die Variable, anstatt sie zu unterstellen?
RobertF

Bei keiner Variablen fehlen 50%, aber bei mindestens einer fehlt etwa 50%. Außerdem sind sie ununterbrochen, so dass ein "Fehlen" die Dinge durcheinander bringen würde.
Peter Flom - Wiedereinsetzung von Monica

Ah. Ich werde nervös, wenn ich Anrechnungen mache. Ich frage mich, welche Vorteile es hat, eine kontinuierliche Variable mit 50% unterstellten Werten im Vergleich zur Konvertierung des Kontingents zu haben. variabel bis kategorisch mit einer "Fehlenden" Kategorie plus genug Fächer, um das Verhalten der nicht fehlenden Werte zu erfassen?
RobertF

Ich mag es nicht, kontinuierliche Variablen zu bündeln.
Peter Flom - Reinstate Monica

Antworten:


20

Sie sollten sich vor der Vorverarbeitung oder der Eingabe aufteilen.

Die Aufteilung zwischen Training und Test-Set ist ein Versuch, die Situation zu reproduzieren, in der Sie über frühere Informationen verfügen und ein Modell erstellen, das Sie anhand zukünftiger, noch unbekannter Informationen testen werden: Das Training-Set ersetzt die Vergangenheit und das Test-Set der Ort der Zukunft, so dass Sie Ihr trainiertes Modell nur einmal testen können.

Unter Berücksichtigung der Vergangenheit / Zukunft-Analogie bedeutet dies alles, was Sie tun, um Ihre Daten vorab zu verarbeiten oder zu verarbeiten, z. B. das Eingeben fehlender Werte, die Sie allein auf dem Trainingssatz durchführen sollten. Sie können sich dann merken, was Sie mit Ihrem Trainingssatz gemacht haben, wenn Ihr Testsatz auch eine Vorverarbeitung oder eine Eingabe erfordert, sodass Sie dies bei beiden Sätzen auf die gleiche Weise tun.

Aus Kommentaren hinzugefügt: Wenn Sie die Testdaten verwenden, um die Trainingsdaten zu beeinflussen, werden die Testdaten zum Erstellen Ihres Modells verwendet, sodass es sich nicht mehr um Testdaten handelt und kein fairer Test Ihres Modells bereitgestellt wird. Sie riskieren eine Überanpassung, und um dies zu verhindern, haben Sie die Testdaten an erster Stelle getrennt


Wenn Sie sagen "Sie tun es auf beiden Sätzen auf die gleiche Weise", meinen Sie damit: "Verwenden Sie dieselbe Methode, um fehlende Daten im Testsatz zu unterstellen, aber NICHT dieselben Daten"?
timwiz

@colorlace Verwenden Sie die Vergangenheit / Zukunft-Analogie. Sie haben das Trainingsset in der Vergangenheit verwendet und einige Werte unterstellt. Sie erhalten jetzt den Testsatz für die Zukunft und möchten einige seiner Werte unterstellen. Sie werden vermutlich die gleiche Methode anwenden, die zuvor auf die Testdaten angewendet wurde (obwohl Sie die Möglichkeit haben, das zu übernehmen, was Sie aus den Trainingsdaten gelernt haben)
Henry,

Wenn Sie "die Möglichkeit haben, das, was Sie aus den Trainingsdaten gelernt haben, einzubeziehen", wie unterscheidet sich das davon, dass Sie vor der Eingabe einfach nicht aufteilen.
Timwiz

1
@colorlace: dieser letzte Punkt ist genau das, was ich sage: Nichts, was Sie mit den Trainingsdaten tun, sollte durch die Testdaten informiert werden (die Analogie ist, dass die Zukunft die Vergangenheit nicht beeinflussen sollte), sondern was Sie mit den Testdaten tun kann durch die Trainingsdaten informiert werden (die Analogie ist, dass Sie die Vergangenheit verwenden können, um die Zukunft vorherzusagen)
Henry

1
@colorlace - Wenn Sie die Testdaten verwenden, um die Trainingsdaten zu beeinflussen, werden die Testdaten zum Erstellen Ihres Modells verwendet, sodass es sich nicht mehr um Testdaten handelt und kein fairer Test Ihres Modells bereitgestellt wird. Sie riskieren eine Überanpassung, und um dies zu verhindern, haben Sie die Testdaten zunächst getrennt
Henry,

1

Ich denke, du solltest dich besser trennen, bevor du eine Anrechnung vornimmst. In einigen Fällen möchten Sie möglicherweise fehlende Werte mit dem Spaltenmittelwert belegen. In diesem Fall haben Sie, wenn Sie zuerst mit train + valid data set unterstellen und dann aufteilen, den Validierungsdatensatz verwendet, bevor Sie Ihr Modell erstellt haben. Auf diese Weise entsteht ein Datenleckproblem.

Aber Sie könnten fragen, ob es zu langwierig ist, wenn ich nach dem Aufteilen zuschreibe, wenn ich eine Kreuzvalidierung durchführen muss. Ich empfehle hierfür die Verwendung der sklearn-Pipeline. Es vereinfacht Ihren Code wirklich und verringert die Wahrscheinlichkeit, einen Fehler zu machen. Siehe Pipeline


0

Um das oben Gesagte zu ergänzen, würde ich auch eine Aufteilung vor dem Anrechnen oder irgendeine Art von Vorverarbeitung bevorzugen. Nichts, was Sie mit den Trainingsdaten tun, sollte durch die Testdaten informiert werden (die Analogie ist, dass die Zukunft die Vergangenheit nicht beeinflussen sollte). Sie können sich dann merken, was Sie mit Ihrem Trainingssatz gemacht haben, wenn Ihr Testsatz auch eine Vorverarbeitung oder eine Eingabe erfordert, sodass Sie dies bei beiden Sätzen auf die gleiche Weise tun können (die Analogie ist, dass Sie die Vergangenheit verwenden können, um die Zukunft vorherzusagen). .

Wenn Sie die Testdaten verwenden, um die Trainingsdaten in irgendeiner Weise zu beeinflussen, werden die Testdaten zum Erstellen Ihres Modells verwendet, sodass es sich nicht mehr um Testdaten handelt und kein fairer Test für Ihr Modell bereitgestellt wird. Sie riskieren eine Überanpassung, und um dies zu verhindern, haben Sie die Testdaten an erster Stelle getrennt!

Ich denke, das Caret-Paket in r ist in dieser Situation sehr nützlich. Ich fand diesen Beitrag im Einzelnen äußerst hilfreich: https://topepo.github.io/caret/model-training-and-tuning.html

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.