O PCA ainda é feito através da composição automática da matriz de covariância quando a dimensionalidade é maior que o número de observações?


10

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 020×100XN=20D=100XX0

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 X0 . Em vez disso, Eigen-decompor 1N1X0X0T . Por que isso está correto?

A matriz de covariância normal é do tamanho D×D , cada elemento do qual nos diz a covariância entre duas dimensões. Para mim, 1N1X0X0T nem sequer tem as dimensões corretas! É N×N matriz, então o que isso nos diria? Covariância entre duas observações ?!


A resposta para sua pergunta está na circunstância de que, como segue a sua tarefa, você não precisa da matriz de covariância das colunas. Você só queria isso como um caminho para obter PCs. Direita? Mas os mesmos resultados do PCA podem ser obtidos via eigen de X'Xe XX'(assim como svd de Xe X'). 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.
precisa saber é o seguinte

11
(cont.) Se sim, e você é livre para escolher qual decompor - é aconselhável decompor o que deve ser feito com mais rapidez / eficiência. Quando n<pé preciso menos RAM e menos tempo para se decompor, XX'pois é de tamanho menor.
precisa saber é

@ttnphns Ótima explicação. Eu vejo o ponto agora. No entanto, ainda tenho problemas para ir de eigen 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 de XX'para eigen da matriz de covariância X'X, mas falhei.
Sibbs Gambling

11
Eu tenho que ir. Talvez @amoeba (que é muito mais ágil em álgebra do que eu) ou outro leitor vá procurar aqui em breve e ajudá-lo. Felicidades.
ttnphns

11
@ttnphns: Feito :)
ameba

Respostas:


22

A matriz de covariância é do tamanho e é dada porC = 1D×D

C=1N1X0X0.

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

G=1N1X0X0.

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=USVCG

C=VS2N1VG=US2N1U.

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 CVUSUCG

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<DDDN<D



11
Ótima resposta! Eu não sabia que tinha nome! Muito obrigado! Agora estou confiante em usá-lo para acelerar meu cálculo.
Sibbs Gambling

3
Minha resposta assume que o que você deseja obter é , e talvez também . Se você também quiser obter , então você pode calcular-lo através de depois que você tem . De fato, se sua dimensionalidade é 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. S / ( n - 1 ) V U X UUS/(n1)VUXU
Ameba

Essa resposta é mais clara que muitas exposições que já vi nos livros. Obrigado.
usεr11852

Para fins puramente referenciais: Eu acho que o artigo de 1969 da Technometrics de IJ Good, " Some Applications of the Decomposition Singular of a Matrix ", é um dos primeiros a fazer uma referência completa a isso.
usdr11852

11
@MattWenham Precisamente.
Ameba
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.