Wie wende ich Standardisierung / Normalisierung auf Trainings- und Testsets an, wenn Vorhersage das Ziel ist?

47
  1. Wandle ich alle meine Daten oder Falze (wenn der Lebenslauf angewendet wird) gleichzeitig um? z.B

    (allData - mean(allData)) / sd(allData)

  2. Wandle ich Zugset und Testset getrennt um? z.B

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(testData)) / sd(testData)

  3. Oder transformiere ich Triebzüge und verwende Berechnungen auf dem Testsatz? z.B

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(trainData)) / sd(trainData)

Ich glaube 3 ist der richtige Weg. Wenn 3 richtig ist, muss ich mir Sorgen machen, dass der Mittelwert nicht 0 ist oder der Bereich nicht zwischen [0; 1] oder [-1; 1] (Normalisierung) des Testsatzes?

DerTom
quelle
Gibt es eine ellegante Möglichkeit, dies zu kodieren R? Sehen Sie diese Frage: stackoverflow.com/questions/49260862/...
Boern

Antworten:

41

Der dritte Weg ist richtig. Genau, warum dies in den Elementen des statistischen Lernens ausführlich behandelt wird , erfahren Sie im Abschnitt "Die falsche und richtige Art der Kreuzvalidierung" und im letzten Kapitel des Lernens aus Daten im Börsenbeispiel.

Im Wesentlichen geben die Prozeduren 1 und 2 Informationen über die Reaktion oder die Zukunft Ihres Hold-out-Datensatzes in das Training oder die Evaluierung Ihres Modells weiter. Dies kann zu erheblichen Optimismusverzerrungen bei Ihrer Modellbewertung führen.

Die Idee bei der Modellvalidierung besteht darin, die Situation nachzuahmen, in der sich Ihr Modell befindet, wenn Sie Produktionsentscheidungen treffen und keinen Zugriff auf die echte Antwort haben. Die Folge ist, dass Sie die Antwort im Testset nur für den Vergleich mit Ihren vorhergesagten Werten verwenden können.

Eine andere Möglichkeit besteht darin, sich vorzustellen, dass Sie jeweils nur auf einen Datenpunkt aus Ihrer Warteschleife zugreifen können (eine für Produktionsmodelle übliche Situation). Alles, was Sie unter dieser Annahme nicht tun können, sollten Sie mit großem Argwohn behandeln. Eine Sache, die Sie nicht tun können, ist die Zusammenfassung aller vergangenen und zukünftigen neuen Datenpunkte, um Ihren Produktionsdatenstrom zu normalisieren. Dasselbe gilt für die Modellvalidierung.

Sie müssen sich keine Sorgen machen, dass der Mittelwert Ihres Testsatzes ungleich Null ist. Dies ist eine bessere Situation, als Ihre Einschätzungen der Durchhalteleistung zu beeinflussen. Wenn der Test jedoch tatsächlich aus derselben zugrunde liegenden Verteilung wie Ihr Zug stammt (eine wesentliche Voraussetzung für das statistische Lernen), sollte der Mittelwert bei ungefähr Null liegen.

Matthew Drury
quelle
Das ist was ich dachte. Vielen Dank für die Klarstellung!
DerTom
Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data. Warum nicht?
Anmol Singh Jaggi
1
@AnmolSinghJaggi Es ist das "und die Zukunft". Wenn Sie die Daten noch nicht erfasst haben, können Sie sie nicht normalisieren.
Matthew Drury
4
@floodking Wenn Sie Trainingsdaten als "vergangene" Daten und Testdaten als "aktuelle oder zukünftige" Daten betrachten, verwenden Sie durch Aggregation über Ihre Testdaten implizit Informationen über die Zukunft von X. Bei Datenlecks geht es nicht nur darum, in Ihre Daten zu lecken prädiktoren geht es auch darum, informationen aus der zukunft zu verlieren. Eine gute Faustregel ist, dass Sie in der Lage sein sollten, Vorhersagen mit nur einer Zeile oder Ihren Testdaten zu treffen , andernfalls verwenden Sie die Zukunft. y
Matthew Drury
1
@MatthewDrury. Vielen Dank für Ihre klare Erklärung. Ich stimme dir jetzt zu. Nur der dritte Weg ist richtig.
Floodking