Devrions-nous également appliquer la normalisation aux données de test?

17

Je fais un projet sur le problème d'identification des auteurs. J'avais appliqué la normalisation tf-idf pour former des données, puis formé un svm sur ces données.

Maintenant, lorsque j'utilise le classificateur, dois-je également normaliser les données de test. Je pense que l'objectif de base de la normalisation est de faire en sorte que l'algorithme d'apprentissage donne plus de poids à des caractéristiques plus importantes pendant l'apprentissage. Ainsi, une fois formé, il sait déjà quelles fonctionnalités sont importantes, lesquelles ne le sont pas. Est-il donc nécessaire d'appliquer également la normalisation aux données de test?

Je suis nouveau dans ce domaine. Veuillez donc ignorer si la question semble idiote?

Kishan Kumar
la source
4
Vos données de test doivent être à la même échelle que vos données d'entraînement.
Jon

Réponses:

36

Oui, vous devez appliquer la normalisation aux données de test, si votre algorithme fonctionne avec ou a besoin de données d'entraînement normalisées *.

En effet, votre modèle fonctionne sur la représentation donnée par ses vecteurs d'entrée. L'échelle de ces chiffres fait partie de la représentation. C'est un peu comme convertir des pieds en mètres. . . un modèle ou une formule fonctionnerait normalement avec un seul type d'unité.

Non seulement vous avez besoin d'une normalisation, mais vous devez appliquer la même mise à l'échelle exacte que pour vos données d'entraînement. Cela signifie stocker l'échelle et le décalage utilisés avec vos données d'entraînement et les réutiliser. Une erreur courante pour les débutants est de normaliser séparément vos données de train et de test.

En Python et SKLearn, vous pouvez normaliser vos valeurs d'entrée / X en utilisant le Scaler standard comme ceci:

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

Notez comment la conversion de l' train_Xutilisation d'une fonction qui correspond (chiffre les paramètres) se normalise ensuite. Alors que la test_Xconversion se transforme, en utilisant les mêmes paramètres que ceux tirés des données du train.

La normalisation tf-idf que vous appliquez devrait fonctionner de la même manière, car elle apprend certains paramètres de l'ensemble de données (fréquence des mots dans tous les documents), ainsi que l'utilisation des ratios trouvés dans chaque document.


* Certains algorithmes (tels que ceux basés sur des arbres de décision) n'ont pas besoin d'entrées normalisées et peuvent gérer des fonctionnalités qui ont différentes échelles inhérentes.

Neil Slater
la source
+1 pour expliquer que les paramètres de normalisation du test doivent être les mêmes que ceux déterminés à partir de la formation. Je crois comprendre que cette logique s'étend également à tous les ensembles de validation.
Greenstick
@Greenstick: Oui bien sûr, cela s'étend au traitement de toutes les données introduites dans le modèle. Inclusion de nouvelles données si un modèle sera utilisé pour l'inférence dans la production. Je pense que la réponse est assez longue sans couvrir tout cela cependant, et le point que vous séparez les données de validation varie beaucoup (de nombreux modèles ont cela intégré à l'étape de formation), donc ne pouvait pas montrer d'exemple de code.
Neil Slater
2
Devriez-vous mettre à l'échelle (fit_transform) les données de test AVEC les données d'entraînement? Ou le faire séparément en utilisant la même échelle (scaler.transform)?
Bob Ebert
2
@BobEbert: Vous pouvez le faire. Techniquement, vous pouvez divulguer une petite quantité d'informations du test au train, si vous ajustez un scaler à l'ensemble de données combiné - donc la version "officielle" pourrait être d'adapter le scaler aux données de formation uniquement et de l'appliquer à tous les autres ensembles de données par la suite. Cependant, cette fuite est très mineure et je ne l'ai jamais vue poser de problème dans la pratique si vous adaptez le scaler à toutes les données dont vous disposez.
Neil Slater
Merci d'avoir confirmé mon hypothèse selon laquelle je dois utiliser une mise à l'échelle dérivée d'un ensemble de formation pour les données de test. Mais pourriez-vous fournir un lien avec l'explication derrière cela? EDIT: peu importe, les explications sont ici: datascience.stackexchange.com/questions/58597/…
crazysantaclaus
6

Certainement, vous devez normaliser vos données. Vous normalisez les données aux fins suivantes:

  • Pour avoir différentes fonctionnalités à la même échelle, ce qui accélère le processus d'apprentissage.

  • Pour prendre soin de différentes fonctionnalités de manière équitable sans se soucier de l'échelle.

Après la formation, votre algorithme d'apprentissage a appris à traiter les données sous forme échelonnée, vous devez donc normaliser vos données de test avec les paramètres de normalisation utilisés pour les données de formation.

Médias
la source