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 MI
in verwenden SAS
.
cross-validation
survival
multiple-imputation
train
Peter Flom - Wiedereinsetzung von Monica
quelle
quelle
Antworten:
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
quelle
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
quelle
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
quelle