Eu tenho uma matriz , contendo minhas amostras N = 20 no espaço D = 100- dimensional. Agora desejo codificar minha própria análise de componentes principais (PCA) no Matlab. Eu desprezo X para X_0 primeiro.X N = 20 D = 100 X X 0
Li no código de alguém que em tais cenários em que temos mais dimensões do que observações, não decompomos mais a matriz de covariância de . Em vez disso, Eigen-decompor . Por que isso está correto?
A matriz de covariância normal é do tamanho , cada elemento do qual nos diz a covariância entre duas dimensões. Para mim, nem sequer tem as dimensões corretas! É matriz, então o que isso nos diria? Covariância entre duas observações ?!
X'X
eXX'
(assim como svd deX
eX'
). O que é chamado "loadings" em um caso será chamado "pc scores" no outro e vice-versa. Como ambas são apenas coordenadas ( veja, por exemplo ) e os eixos, as "dimensões principais" são as mesmas.n<p
é preciso menos RAM e menos tempo para se decompor,XX'
pois é de tamanho menor.XX'
para o PC. Poderia me mostrar brevemente como? Dado que os PCs são apenas vetores próprios da matriz de covariância, tentei passar de eigen deXX'
para eigen da matriz de covariânciaX'X
, mas falhei.Respostas:
A matriz de covariância é do tamanho e é dada porC = 1D×D
A matriz de que você está falando obviamente não é uma matriz de covariância; é chamado de matriz Gram e tem tamanho:G = 1N×N
A análise de componentes principais (PCA) pode ser implementada via composição automática de qualquer uma dessas matrizes. Essas são apenas duas maneiras diferentes de calcular a mesma coisa.
A maneira mais fácil e útil de ver isso é usar a decomposição de valor singular da matriz de dados . Ligando isso às expressões e , obtemos:C G CX=USV⊤ C G
Os vetores próprios da matriz de covariância são as principais direções. As projeções dos dados sobre esses vetores próprios são componentes principais; essas projeções são dadas por . Componentes principais escalada a unidade de comprimento são dadas por . Como você vê, os vetores próprios da matriz Gram são exatamente esses componentes principais em escala. E os valores próprios de e coincidem.U S U CV US U C G
A razão pela qual você pode achar recomendável usar a matriz Gram se for porque será de tamanho menor, em comparação com a matriz de covariância, e, portanto, será mais rápido para calcular e mais rápido para compor por conta própria. De fato, se sua dimensionalidade for muito alta, não há como você armazenar a matriz de covariância na memória; portanto, operar em uma matriz Gram é a única maneira de executar o PCA. Mas, para gerenciável, você ainda pode usar a composição automática da matriz de covariância, se preferir, mesmo que .D D NN<D D D N<D
fonte