Dovremmo applicare la normalizzazione anche ai dati di test?


17

Sto facendo un progetto sul problema di identificazione dell'autore. Avevo applicato la normalizzazione tf-idf per addestrare i dati e poi ho formato un svm su quei dati.

Ora, quando uso il classificatore, dovrei anche normalizzare i dati del test. Sento che l'obiettivo di base della normalizzazione è quello di far sì che l'algo di apprendimento dia più peso alle caratteristiche più importanti durante l'apprendimento. Quindi, una volta che si è allenato, sa già quali funzionalità sono importanti, quali no. Quindi c'è bisogno di applicare la normalizzazione anche per testare i dati?

Sono nuovo in questo campo. Quindi per favore ignora se la domanda appare sciocca?


4
I dati del test devono essere nella stessa scala dei dati di allenamento.
Jon

Risposte:


36

Sì, è necessario applicare la normalizzazione ai dati di test, se l'algoritmo funziona o necessita di dati di allenamento normalizzati *.

Questo perché il tuo modello funziona sulla rappresentazione fornita dai suoi vettori di input. La scala di quei numeri fa parte della rappresentazione. È un po 'come convertire tra piedi e metri. . . un modello o una formula funzionerebbe normalmente con un solo tipo di unità.

Non solo hai bisogno di normalizzazione, ma dovresti applicare lo stesso ridimensionamento esatto per i tuoi dati di allenamento. Ciò significa memorizzare la scala e l'offset utilizzati con i dati di allenamento e riutilizzarli. Un errore comune per i principianti è di normalizzare separatamente i dati del treno e dei test.

In Python e SKLearn, potresti normalizzare i valori di input / X usando lo scaler standard in questo modo:

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

Nota come la conversione train_Xdell'uso di una funzione adatta (calcola i parametri) si normalizza. Mentre la test_Xconversione si trasforma, usando gli stessi parametri che ha appreso dai dati del treno.

La normalizzazione tf-idf che stai applicando dovrebbe funzionare in modo simile, in quanto apprende alcuni parametri dal set di dati nel suo insieme (frequenza delle parole in tutti i documenti), nonché utilizzando i rapporti trovati in ciascun documento.


* Alcuni algoritmi (come quelli basati su alberi decisionali) non necessitano di input normalizzati e possono far fronte a funzionalità con scale intrinseche diverse.


+1 per spiegare che i parametri di normalizzazione per il test dovrebbero essere gli stessi di quelli determinati dall'allenamento. Comprendo che questa logica si estende anche a tutti i set di convalida.
Greenstick,

@Greenstick: Sì, ovviamente, si estende al trattamento di tutti i dati inseriti nel modello. Compresi nuovi dati se un modello verrà utilizzato per l'inferenza nella produzione. Penso che la risposta sia abbastanza lunga senza coprire tutto ciò, tuttavia, e il punto in cui hai diviso i dati di convalida varia molto (molti modelli hanno questo passaggio integrato nella fase di formazione), quindi non è possibile mostrare un esempio di codice.
Neil Slater,

2
Dovresti ridimensionare (fit_transform) i dati del test CON i dati di allenamento? O farlo separatamente usando la stessa scala (scaler.transform)?
Bob Ebert,

2
@BobEbert: puoi farlo anche tu. Tecnicamente potresti perdere una piccola quantità di informazioni dal test all'allenamento, se si adatta uno scaler al set di dati combinato, quindi la versione "ufficiale" potrebbe essere quella di adattare lo scaler solo ai dati di allenamento e applicarlo a tutti gli altri set di dati in seguito. Tuttavia, questa perdita è molto minore e non l'ho mai vista causare in pratica un problema se si adatta il ridimensionatore a tutti i dati che si hanno.
Neil Slater,

Grazie per aver confermato la mia ipotesi che devo utilizzare il ridimensionamento derivato dal set di addestramento per i dati del test. Ma potresti fornire un link con la spiegazione dietro questo? EDIT: non importa, le spiegazioni sono qui: datascience.stackexchange.com/questions/58597/…
crazysantaclaus

6

Sicuramente dovresti normalizzare i tuoi dati. Si normalizzano i dati per i seguenti obiettivi:

  • Per avere caratteristiche diverse nella stessa scala, che è per accelerare il processo di apprendimento.

  • Per gestire le diverse funzioni in modo equo senza curare la bilancia.

Dopo l'allenamento, l'algoritmo di apprendimento ha imparato a gestire i dati in forma scalata, quindi è necessario normalizzare i dati del test con i parametri di normalizzazione utilizzati per i dati di allenamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.