Come applicare la standardizzazione / normalizzazione al training e al testset se l'obiettivo è la previsione?


47
  1. Trasformo tutti i miei dati o le mie pieghe (se viene applicato il CV) contemporaneamente? per esempio

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

  2. Trasformo il set di treni e il set di test separatamente? per esempio

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

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

  3. Oppure trasformo il set di treni e utilizzo i calcoli sul set di test? per esempio

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

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

Credo che 3 sia la strada giusta. Se 3 è corretto, devo preoccuparmi che la media non sia 0 o che l'intervallo non sia compreso tra [0; 1] o [-1; 1] (normalizzazione) del testset?


Esiste un modo ellegante per codificare questo R? Vedere questa domanda: stackoverflow.com/questions/49260862/...
Boern

Risposte:


42

La terza via è corretta. Esattamente perché è trattato in meravigliosi dettagli in The Elements of Statistical Learning , vedere la sezione "Il modo sbagliato e giusto di fare la convalida incrociata", e anche nel capitolo finale di Learning From Data , nell'esempio del mercato azionario.

In sostanza, le procedure 1 e 2 perdono informazioni sulla risposta, o dal futuro, dal set di dati di partecipazione alla formazione o alla valutazione del modello. Ciò può causare un notevole pregiudizio all'ottimismo nella valutazione del modello.

L'idea nella convalida del modello è quella di imitare la situazione in cui ci si trova quando il modello prende decisioni di produzione, quando non si ha accesso alla risposta vera. La conseguenza è che non è possibile utilizzare la risposta nel set di test per nulla tranne che per il confronto con i valori previsti.

Un altro modo per avvicinarsi è quello di immaginare di avere accesso a un solo punto dati dal tuo dispositivo di controllo alla volta (una situazione comune per i modelli di produzione). Tutto ciò che non puoi fare in base a questo presupposto dovresti avere un grande sospetto. Chiaramente, una cosa che non puoi fare è aggregare tutti i nuovi punti dati passati e futuri per normalizzare il tuo flusso di dati di produzione, quindi fare lo stesso per la validazione del modello non è valido.

Non devi preoccuparti che la media del tuo set di test sia diversa da zero, questa è una situazione migliore in cui parziare le stime delle prestazioni di tenuta. Tuttavia, ovviamente, se il test è veramente tratto dalla stessa distribuzione di base del tuo treno (un presupposto essenziale nell'apprendimento statistico), tale media dovrebbe risultare approssimativamente zero.


È quello che pensavo. Grazie per aver chiarito questo!
DerTom,

Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data. Perchè no?
Anmol Singh Jaggi,

1
@AnmolSinghJaggi È il "e futuro". Se non hai ancora raccolto i dati, non puoi normalizzarli usando.
Matthew Drury,

5
@floodking Se pensi ai dati di allenamento come a dati "passati" e ai dati di test come a "attuali o futuri", aggregando i tuoi dati di test usi implicitamente le informazioni sul futuro di X. La perdita di dati non riguarda solo la perdita di nel tuo predittori, si tratta anche di perdere informazioni dal futuro. Una buona regola empirica è che dovresti essere in grado di fare previsioni usando solo una riga o i tuoi dati di test, altrimenti stai usando il futuro. y
Matthew Drury,

1
@MatthewDrury. Grazie per la tua chiara spiegazione. Sono d'accordo con te adesso. Solo la terza via è corretta.
Inondazioni
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.