Il classificatore viene addestrato sui dati nello spazio definito dai componenti principali dei dati di addestramento. Non ha senso valutarlo in uno spazio diverso, pertanto è necessario applicare la stessa trasformazione ai dati di test come si è fatto per i dati di allenamento, quindi non calcolare un diverso pca_coef
.
Incidentalmente, se i dati di test vengono tracciati indipendentemente dalla stessa distribuzione dei dati di allenamento, quindi per un numero sufficiente di training e set di test, i componenti principali dovrebbero essere approssimativamente uguali.
Un metodo per scegliere quanti componenti principali utilizzare comporta l'esame degli autovalori dalla decomposizione PCA. È possibile ottenere questi dalla funzione princomp simili:
[pca_coeff score eigenvalues] = princomp(data);
La variabile eigenvalues
sarà quindi un array in cui ogni elemento descrive la quantità di varianza valutata con il corrispondente componente principale. Se lo fai:
plot(eigenvalues);
si dovrebbe vedere che il primo autovalore sarà il più grande, e saranno rapidamente diminuire (questo è chiamato un "Ghiaione Plot", e dovrebbe apparire come segue: http://www.ats.ucla.edu/stat/SPSS/output/spss_output_pca_5.gif, anche se il tuo si può avere fino a 800 punti invece di 12).
È improbabile che componenti di principio con piccoli autovalori corrispondenti siano utili, poiché la varianza dei dati in tali dimensioni è così ridotta. Molte persone scelgono un valore di soglia e quindi selezionano tutte le componenti principali in cui l'autovalore è superiore a tale soglia. Un modo informale di scegliere la soglia è di guardare la trama di Scree e scegliere la soglia per essere subito dopo che la linea 'esce di livello' - nell'immagine che ho collegato in precedenza, un buon valore potrebbe essere ~ 0,8, selezionando 3 o 4 componenti principali .
IIRC, si potrebbe fare qualcosa di simile:
proportion_of_variance = sum(eigenvalues(1:k)) ./ sum(eigenvalues);
per calcolare "la proporzione della varianza descritta dai dati dimensionale basso".
Tuttavia, poiché si utilizzano i componenti principali di un compito di classificazione, si può non essere veramente sicuri che qualsiasi numero particolare di PC è ottimale; la varianza di una funzione non ti dice necessariamente nulla di quanto sarà utile per la classificazione. Un'alternativa alla scelta dei PC con la trama di Scree è solo per provare la classificazione con vari numeri di componenti principali e vedere quale è il numero migliore empiricamente.
Grazie Richante, la tua risposta è chiara e utile. Ho un altro dubbio. Quanti componenti devo usare?Per ogni osservazione computo 800 funzioni e queste sono le dimensioni dei dati originali. Qual è la scelta migliore per numDimension? C'è una formula che posso usare o dovrei sceglierla con risultati sperimentali? –
Ho aggiunto alcune informazioni alla mia risposta originale per descrivere come scegliere il numero di componenti principali. La risposta breve è: non c'è davvero una buona formula, la scelta di un esperimento probabilmente va bene. – Richante
Per quanto riguarda l'ultima riga di codice 'proportion_of_variance = ...', Matlab docs lo calcola come tale: 'proportion_of_variance = cumsum (autovalori) ./ sum (autovalori)', mitigando la necessità di quella variabile 'k', invece si ottiene un vettore e può fare una ricerca per trovare dove viene raggiunta la soglia. – Unapiedra