A análise de componentes principais (PCA) pode ser usada para redução de dimensionalidade. Após a redução dessa dimensionalidade, como se pode reconstruir aproximadamente as variáveis / características originais de um pequeno número de componentes principais?
Como alternativa, como remover ou descartar vários componentes principais dos dados?
Em outras palavras, como reverter o PCA?
Dado que o PCA está intimamente relacionado à decomposição de valor singular (SVD), a mesma pergunta pode ser feita da seguinte maneira: como reverter o SVD?
pca
dimensionality-reduction
svd
ameba
fonte
fonte
Respostas:
O PCA calcula os vetores próprios da matriz de covariância ("eixos principais") e os classifica por seus valores próprios (quantidade de variação explicada). Os dados centralizados podem então ser projetados nesses eixos principais para produzir componentes principais ("pontuações"). Para fins de redução de dimensionalidade, é possível manter apenas um subconjunto de componentes principais e descartar o restante. (Veja aqui a introdução de um leigo ao PCA .)
Seja a matriz de dados com linhas (pontos de dados) colunas (variáveis ou recursos). Depois de se subtrair a média vector a partir de cada linha, obtemos o centrado matriz de dados . Seja a matriz de alguns vetores próprios que queremos usar; esses seriam os vetores próprios com os maiores valores próprios. Então a matriz das projeções de PCA ("pontuações") será simplesmente dada por . n×pnpXraw n×p n p μ X V p×k k k n×k Z=XV
Isso é ilustrado na figura abaixo: a primeira subparcela mostra alguns dados centralizados (os mesmos dados que uso nas minhas animações no encadeamento vinculado) e suas projeções no primeiro eixo principal. A segunda subparcela mostra apenas os valores dessa projeção; a dimensionalidade foi reduzida de dois para um:
Para poder reconstruir as duas variáveis originais desse componente principal, podemos mapeá-lo de volta para as dimensões com . De fato, os valores de cada PC devem ser colocados no mesmo vetor usado para a projeção; compare as subparcelas 1 e 3. O resultado é dado por . Estou exibindo-o na terceira subtrama acima. Para obter a reconstrução final , precisamos adicionar o vetor médio a isso:p V⊤ X^=ZV⊤=XVV⊤ X^raw μ
Observe que é possível ir diretamente do primeiro subparcela para o terceiro multiplicando pela matriz ; isso é chamado de matriz de projeção . Se todos os são utilizados vectores próprios, então representa a matriz identidade (sem redução de dimensionalidade é realizada, portanto, "reconstrução" é perfeito). Se apenas um subconjunto de autovetores for usado, não será identidade.X VV⊤ p VV⊤
Isso funciona para um ponto arbitrário no espaço do PC; ele pode ser mapeado para o espaço original via .z x^=zV⊤
Descartar (remover) os principais PCs
Às vezes, alguém deseja descartar (remover) um ou alguns dos principais PCs e manter o restante, em vez de manter os PCs principais e descartar o restante (como acima). Nesse caso, todas as fórmulas permanecem exatamente iguais , mas deve consistir em todos os eixos principais, exceto os que se deseja descartar. Em outras palavras, sempre deve incluir todos os PCs que você deseja manter.V V
Advertência sobre PCA na correlação
Quando o PCA é feito na matriz de correlação (e não na matriz de covariância), os dados brutos não são centralizados apenas subtraindo mas também dimensionados dividindo cada coluna por seu desvio padrão . Nesse caso, para reconstruir os dados originais, é necessário redimensionar as colunas de com e somente depois adicionar novamente o vetor médio .Xraw μ σi X^ σi μ
Exemplo de processamento de imagem
Este tópico geralmente aparece no contexto do processamento de imagens. Considere Lenna - uma das imagens padrão na literatura sobre processamento de imagens (siga os links para descobrir de onde vem). Abaixo, à esquerda, mostro a variante em escala de cinza dessa imagem (arquivo disponível aqui ).512×512
Podemos tratar essa imagem em escala de cinza como uma matriz de dados . Eu executo o PCA nele e computo usando os 50 primeiros componentes principais. O resultado é exibido à direita.512×512 Xraw X^raw
Revertendo SVD
O PCA está intimamente relacionado à decomposição de valor singular (SVD), consulte Relação entre SVD e PCA. Como usar o SVD para executar o PCA? para mais detalhes. Se uma matriz for editada como SVD como e você selecionar um vetor dimensional que represente o ponto no espaço em "reduzido" de dimensões, para mapeá-lo de volta para dimensões, é necessário multiplicá-lo com .n×p X X=USV⊤ k z U k p S⊤1:k,1:kV⊤:,1:k
Exemplos em R, Matlab, Python e Stata
Conduzirei o PCA com os dados da Fisher Iris e depois reconstruí-lo usando os dois primeiros componentes principais. Estou fazendo PCA na matriz de covariância, não na matriz de correlação, ou seja, não estou escalando as variáveis aqui. Mas ainda tenho que adicionar a média de volta. Alguns pacotes, como o Stata, cuidam disso através da sintaxe padrão. Agradecemos a @StasK e @Kodiologist por sua ajuda com o código.
Vamos verificar a reconstrução do primeiro ponto de dados, que é:
Matlab
Resultado:
R
Resultado:
Para um exemplo R elaborado de reconstrução de imagens por PCA, veja também esta resposta .
Pitão
Resultado:
Observe que isso difere um pouco dos resultados em outros idiomas. Isso ocorre porque a versão do Python do conjunto de dados Iris contém erros .
Stata
fonte
nComp