Sollten wir die Normalisierung auch auf Testdaten anwenden?


17

Ich mache ein Projekt zum Problem der Autorenidentifikation. Ich hatte die tf-idf-Normalisierung angewendet, um Daten zu trainieren, und dann eine SVM für diese Daten trainiert.

Wenn ich den Klassifikator verwende, sollte ich jetzt auch die Testdaten normalisieren. Ich bin der Meinung, dass das grundlegende Ziel der Normalisierung darin besteht, das Lernen dazu zu bringen, wichtigeren Merkmalen beim Lernen mehr Gewicht zu verleihen. Sobald es also trainiert hat, weiß es bereits, welche Funktionen wichtig sind, welche nicht. Müssen also auch Testdaten normalisiert werden?

Ich bin neu in diesem Bereich. Also bitte ignorieren, wenn die Frage albern erscheint.


4
Ihre Testdaten sollten sich im selben Maßstab wie Ihre Trainingsdaten befinden.
Jon

Antworten:


35

Ja, Sie müssen Normalisierung auf Testdaten anwenden, wenn Ihr Algorithmus mit normalisierten Trainingsdaten arbeitet oder diese benötigt *.

Das liegt daran, dass Ihr Modell mit der durch seine Eingabevektoren gegebenen Darstellung arbeitet. Die Skala dieser Zahlen ist Teil der Darstellung. Dies ist ein bisschen wie das Umrechnen zwischen Fuß und Metern. . . Ein Modell oder eine Formel würde normalerweise nur mit einem Einheitentyp funktionieren.

Sie benötigen nicht nur eine Normalisierung, sondern sollten auch genau die gleiche Skalierung wie für Ihre Trainingsdaten anwenden. Das bedeutet, dass Sie die Skala und den Versatz, die Sie für Ihre Trainingsdaten verwendet haben, speichern und wieder verwenden müssen. Ein häufiger Anfängerfehler besteht darin, Ihre Zug- und Testdaten separat zu normalisieren.

In Python und SKLearn können Sie Ihre Eingabe- / X-Werte mit dem Standard-Skalierer wie folgt normalisieren :

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

Beachten Sie, wie sich die Konvertierung der train_XVerwendung einer Funktion, die passt (berechnet die Parameter), normalisiert. Während dertest_X Konvertierung nur umwandelt, werden dieselben Parameter verwendet, die sie aus den Zugdaten gelernt hat.

Die von Ihnen angewendete tf-idf-Normalisierung sollte ähnlich funktionieren, da sie einige Parameter aus dem gesamten Datensatz (Häufigkeit der Wörter in allen Dokumenten) sowie die in jedem Dokument enthaltenen Verhältnisse ermittelt.


* Einige Algorithmen (z. B. solche, die auf Entscheidungsbäumen basieren) benötigen keine normalisierten Eingaben und können mit Funktionen mit unterschiedlichen Maßstäben umgehen.


+1 zur Erklärung, dass die Normalisierungsparameter für den Test dieselben sein sollten, die aus dem Training ermittelt wurden. Nach meinem Verständnis erstreckt sich diese Logik auch auf Validierungssätze.
Greenstick

@Greenstick: Ja, das gilt natürlich auch für die Behandlung aller in das Modell eingegebenen Daten. Einbeziehen neuer Daten, wenn ein Modell für Rückschlüsse auf die Produktion verwendet wird. Ich denke, die Antwort ist lang genug, ohne all das abzudecken, und der Punkt, an dem Sie die Validierungsdaten aufteilen, ist sehr unterschiedlich (viele Modelle verfügen über einen integrierten Trainingsschritt), sodass kein Codebeispiel angezeigt werden kann.
Neil Slater

2
Sollten Sie die Testdaten mit den Trainingsdaten skalieren (fit_transform)? Oder separat mit derselben Waage (scaler.transform)?
Bob Ebert

2
@ BobEbert: Sie können entweder tun. Technisch gesehen kann es sein, dass Sie eine kleine Menge an Informationen von Test zu Training verlieren, wenn Sie einen Skalierer in den kombinierten Datensatz einfügen. Die "offizielle" Version könnte also darin bestehen, den Skalierer nur auf Trainingsdaten anzuwenden und auf alle anderen anzuwenden Datensätze danach. Dieses Leck ist jedoch sehr geringfügig und ich habe noch nie gesehen, dass es in der Praxis ein Problem darstellt, wenn Sie den Scaler an alle Daten anpassen, die Sie haben.
Neil Slater

6

Auf jeden Fall sollten Sie Ihre Daten normalisieren. Sie normalisieren die Daten für folgende Zwecke:

  • Für unterschiedliche Funktionen im gleichen Maßstab, um den Lernprozess zu beschleunigen.

  • Für die Pflege verschiedener Merkmale, ohne die Waage zu beeinträchtigen.

Nach dem Training hat Ihr Lernalgorithmus gelernt, mit den Daten in skalierter Form umzugehen, sodass Sie Ihre Testdaten mit den für die Trainingsdaten verwendeten Normalisierungsparametern normalisieren müssen.

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.