Jak rzutować nowy wektor na przestrzeń PCA?


21

Po przeprowadzeniu analizy głównego składnika (PCA) chcę rzutować nowy wektor na przestrzeń PCA (tzn. Znaleźć jego współrzędne w układzie współrzędnych PCA).

Mam obliczony PCA w języku R użyciu prcomp. Teraz powinienem być w stanie pomnożyć mój wektor przez macierz obrotu PCA. Czy główne elementy tej macierzy powinny być ułożone w rzędy lub kolumny?

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 

Odpowiedzi:


23

Cóż, @Srikant już udzielił prawidłowej odpowiedzi, ponieważ macierz obrotu (lub obciążenia) zawiera wektory własne ułożone kolumnowo, dzięki czemu wystarczy pomnożyć (użyć %*%) wektor lub macierz nowych danych np prcomp(X)$rotation. Uważaj jednak na wszelkie dodatkowe parametry centrowania lub skalowania, które zostały zastosowane podczas obliczania EV PCA.

W R może się również przydać predict()funkcja, patrz ?predict.prcomp. BTW, możesz sprawdzić, jak realizowana jest projekcja nowych danych, po prostu wprowadzając:

getS3method("predict", "prcomp")

24

Aby dodać do fantastycznej odpowiedzi @ chl (+1), możesz użyć bardziej lekkiego rozwiązania:

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

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

Jest to bardzo przydatne, jeśli nie chcesz zapisać całego pcaobiektu do wyświetlania newdatana przestrzeni PCA.


5

W SVD, jeśli A jest macierzą mxn, górne k wierszy prawej macierzy liczby pojedynczej V jest k-wymiarową reprezentacją oryginalnych kolumn A, gdzie k <= n

A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ ----------- (ponieważ U jest ortogonalny)
=> A t- 1 = VΣΣ -1 = V

V.=ZAtUΣ


R=QtUΣ


2

Uważam, że wektory własne (tj. Główne składniki) powinny być ułożone w kolumny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.