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?

piksel
źródło

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")
chl
źródło
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.

Ben Rollert
źródło
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Σ

Tomek
źródło
2

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


źródło