Como projetar um novo vetor no espaço PCA?

21

Depois de executar a análise de componentes principais (PCA), quero projetar um novo vetor no espaço do PCA (ou seja, encontrar suas coordenadas no sistema de coordenadas do PCA).

Eu calculei o PCA na linguagem R usando prcomp. Agora eu devo poder multiplicar meu vetor pela matriz de rotação PCA. Os principais componentes dessa matriz devem ser organizados em linhas ou colunas?

pixel
fonte

Respostas:

23

Bem, o @Srikant já deu a resposta certa, já que a matriz de rotação (ou cargas) contém vetores próprios organizados em colunas, para que você apenas precise multiplicar (usando %*%) seu vetor ou matriz de novos dados com, por exemplo prcomp(X)$rotation. Entretanto, tenha cuidado com quaisquer parâmetros extras de centralização ou dimensionamento que foram aplicados ao calcular os EVs de PCA.

Em R, você também pode achar útil a predict()função, consulte ?predict.prcomp. BTW, você pode verificar como a projeção de novos dados é implementada simplesmente digitando:

getS3method("predict", "prcomp")
chl
fonte
24

Apenas para adicionar à fantástica resposta de @ chl (+1), você pode usar uma solução mais leve:

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

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

Isso é muito útil se você não deseja salvar o pcaobjeto inteiro para projetar newdatano espaço do PCA.

Ben Rollert
fonte
5

No SVD, se A é uma matriz mxn, as k linhas superiores da matriz singular direita V são uma representação em dimensão k das colunas originais de A, onde k <= n

A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ ----------- (porque U é ortogonal)
=> A t- 1 = VΣΣ -1 = V

V=UMAtvocêΣ


R=QtvocêΣ

Tom
fonte
2

Eu acredito que os autovetores (ou seja, os componentes principais) devem ser organizados como colunas.


fonte