Come proiettare un nuovo vettore nello spazio PCA?


21

Dopo aver eseguito l'analisi dei componenti principali (PCA), voglio proiettare un nuovo vettore nello spazio PCA (ovvero trovare le sue coordinate nel sistema di coordinate PCA).

Ho calcolato PCA in linguaggio R utilizzando prcomp. Ora dovrei essere in grado di moltiplicare il mio vettore per la matrice di rotazione PCA. I componenti principali in questa matrice devono essere disposti in righe o colonne?

r  pca  r  variance  heteroscedasticity  misspecification  distributions  time-series  data-visualization  modeling  histogram  kolmogorov-smirnov  negative-binomial  likelihood-ratio  econometrics  panel-data  categorical-data  scales  survey  distributions  pdf  histogram  correlation  algorithms  r  gpu  parallel-computing  approximation  mean  median  references  sample-size  normality-assumption  central-limit-theorem  rule-of-thumb  confidence-interval  estimation  mixed-model  psychometrics  random-effects-model  hypothesis-testing  sample-size  dataset  large-data  regression  standard-deviation  variance  approximation  hypothesis-testing  variance  central-limit-theorem  kernel-trick  kernel-smoothing  error  sampling  hypothesis-testing  normality-assumption  philosophical  confidence-interval  modeling  model-selection  experiment-design  hypothesis-testing  statistical-significance  power  asymptotics  information-retrieval  anova  multiple-comparisons  ancova  classification  clustering  factor-analysis  psychometrics  r  sampling  expectation-maximization  markov-process  r  data-visualization  correlation  regression  statistical-significance  degrees-of-freedom  experiment-design  r  regression  curve-fitting  change-point  loess  machine-learning  classification  self-study  monte-carlo  markov-process  references  mathematical-statistics  data-visualization  python  cart  boosting  regression  classification  robust  cart  survey  binomial  psychometrics  likert  psychology  asymptotics  multinomial 

Risposte:


23

Bene, @Srikant ti ha già dato la risposta giusta poiché la matrice di rotazione (o caricamento) contiene gli autovettori disposti in ordine di colonna, in modo che tu debba solo moltiplicare (usando %*%) il tuo vettore o matrice di nuovi dati con ad es prcomp(X)$rotation. Prestare attenzione, tuttavia, con qualsiasi ulteriore parametro di centraggio o ridimensionamento applicato durante il calcolo dei EV PCA.

In R, potresti anche trovare utile la predict()funzione, vedi ?predict.prcomp. A proposito, puoi verificare come viene implementata la proiezione di nuovi dati semplicemente inserendo:

getS3method("predict", "prcomp")

24

Solo per aggiungere alla fantastica risposta di @ chl (+1), puoi usare una soluzione più leggera:

# perform principal components analysis
pca <- prcomp(data) 

# project new data onto the PCA space
scale(newdata, pca$center, pca$scale) %*% pca$rotation 

Ciò è molto utile se non si desidera salvare l'intero pcaoggetto per la proiezione newdatanello spazio PCA.


5

In SVD, se A è una matrice mxn, le prime k righe della matrice singolare destra V, è una rappresentazione della dimensione k delle colonne originali di A dove k <= n

A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ ----------- (perché U è ortogonale)
=> A t- 1 = VΣΣ -1 = V

V=UNtUΣ

Le righe di A t o le colonne di una mappa per le colonne di V.
Se la matrice dei nuovi dati su cui eseguire PCA per la riduzione della dimensione è Q, matrice aqxn, utilizzare la formula per calcolareR=QtUΣ-1 , il risultato R è il risultato desiderato. R è una matrice n per n, e le prime k righe di R (può essere vista come una matrice ak per n) è una nuova rappresentazione delle colonne di Q nello spazio della dimensione k.


2

Credo che gli autovettori (cioè i componenti principali) debbano essere disposti come colonne.

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.