Como posso interpretar o que recebo do PCA?

14

Como parte de uma tarefa da Universidade, preciso realizar o pré-processamento de dados em um conjunto de dados brutos bastante grande e multivariado (> 10). Eu não sou um estatístico em nenhum sentido da palavra, então estou um pouco confuso com o que está acontecendo. Peço desculpas antecipadamente pelo que provavelmente é uma pergunta ridiculamente simples - minha cabeça está girando depois de olhar para várias respostas e tentar percorrer as palavras-estatísticas.

Eu li isso:

  • O PCA me permite reduzir a dimensionalidade dos meus dados
  • Isso é feito ao mesclar / remover atributos / dimensões que se correlacionam bastante (e, portanto, são um pouco desnecessárias)
  • Faz isso encontrando vetores próprios nos dados de covariância (graças a um bom tutorial que eu segui para aprender isso)

O que é ótimo.

No entanto, estou realmente lutando para ver como posso aplicar isso praticamente aos meus dados. Por exemplo (este não é o conjunto de dados que usarei, mas uma tentativa de um exemplo decente com o qual as pessoas possam trabalhar), se eu tivesse um conjunto de dados com algo como ...

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

Não tenho muita certeza de como interpretaria os resultados.

A maioria dos tutoriais que eu vi on-line parece me dar uma visão muito matemática do PCA. Eu fiz algumas pesquisas e as segui - mas ainda não tenho certeza do que isso significa para mim, que está apenas tentando extrair algum tipo de significado dessa pilha de dados que tenho diante de mim.

Simplesmente executar o PCA nos meus dados (usando um pacote de estatísticas) cospe uma matriz NxN de números (onde N é o número de dimensões originais), que é totalmente grego para mim.

Como posso fazer o PCA e aceitar o que recebo de uma maneira que eu possa colocar em inglês simples em termos das dimensões originais?

nitsua
fonte
3
Seu exemplo de dados mostra uma mistura de tipos de dados: sexo é dicotômico, idade é ordinal, os outros 3 são intervalos (e os que estão em unidades diferentes). Fazer o PCA linear é adequado para dados de intervalo (mas você deve primeiro padronizar z essas variáveis, devido às unidades). É discutível se o PCA é apropriado para dados binários ou dicotômicos . Você não deve usar dados ordinais no PCA linear. Mas a questão principal com os seus dados de exemplo: por que em tudo para fazer PCA com ele; que sentido poderia fazer nesse caso?
ttnphns
Este pdf é útil para a aplicação do PCA . As outras postagens aqui fazem um bom trabalho ao descrever o "significado" dos resultados do seu PCA.
AMS
(Corrija-me se estiver errado) Acredito que o PCA é / pode ser muito útil para ajudar a encontrar tendências nos dados e descobrir quais atributos podem se relacionar com os quais (o que eu acho que no final levaria a descobrir padrões e afins). Minha atribuição detalha que eu tenho esse conjunto de dados massivo e só preciso aplicar cluster e classificadores, e uma das etapas listadas como vitais para o pré-processamento é o PCA. Ajudaria se eu tentasse extrair alguns atributos de segunda ordem do conjunto de dados que tenho para tentar obter todos eles em dados de intervalo?
Nitsua
3
No momento, só posso recomendar que você leia mais sobre o PCA (também neste site). Muitas incertezas certamente desaparecerão.
ttnphns
Muitos links finos acima, aqui está um pequeno exemplo que "poderia" dar uma boa idéia do PCA em termos de regressão, com um exemplo prático e muito poucos, se é que existem, termos técnicos. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

Respostas:

15

As páginas 13-20 do tutorial que você postou fornecem uma explicação geométrica muito intuitiva de como o PCA é usado para redução de dimensionalidade.

A matriz 13x13 mencionada é provavelmente a matriz "loading" ou "rotação" (acho que seus dados originais tinham 13 variáveis?) Que podem ser interpretadas de uma das duas maneiras (equivalentes):

  1. As colunas (valores absolutos das) da sua matriz de carregamento descrevem quanto cada variável proporcionalmente "contribui" para cada componente.

  2. A matriz de rotação gira seus dados para a base definida por sua matriz de rotação. Portanto, se você possui dados em 2-D e multiplica seus dados por sua matriz de rotação, seu novo eixo X será o primeiro componente principal e o novo eixo Y será o segundo componente principal.

EDIT: Esta pergunta é muito solicitada, por isso vou apresentar uma explicação visual detalhada do que está acontecendo quando usamos o PCA para redução de dimensionalidade.

Considere uma amostra de 50 pontos gerados a partir de y = x + ruído. O primeiro componente principal estará ao longo da linha y = xo segundo componente estará na linha y = -x, como mostrado abaixo.

insira a descrição da imagem aqui

A relação de aspecto atrapalha um pouco, mas acredito que os componentes são ortogonais. A aplicação do PCA girará nossos dados para que os componentes se tornem os eixos xey:

insira a descrição da imagem aqui

Os dados antes da transformação são círculos, os dados depois são cruzados. Neste exemplo em particular, os dados não foram girados tanto quanto foram invertidos na linha y = -2x, mas poderíamos inverter o eixo y com a mesma facilidade para tornar essa rotação verdadeiramente sem perda de generalidade, como descrito aqui .

A maior parte da variação, ou seja, a informação nos dados, é espalhada ao longo do primeiro componente principal (que é representado pelo eixo x após a transformação dos dados). Há uma pequena variação ao longo do segundo componente (agora o eixo y), mas podemos eliminar esse componente inteiramente sem perda significativa de informações . Portanto, para recolher isso de duas dimensões em 1, deixamos que a projeção dos dados no primeiro componente principal descreva completamente nossos dados.

insira a descrição da imagem aqui

Podemos recuperar parcialmente nossos dados originais girando (ok, projetando) de volta para os eixos originais.

insira a descrição da imagem aqui

Os pontos azuis escuros são os dados "recuperados", enquanto os pontos vazios são os dados originais. Como você pode ver, perdemos algumas informações dos dados originais, especificamente a variação na direção do segundo componente principal. Mas, para muitos propósitos, essa descrição compactada (usando a projeção ao longo do primeiro componente principal) pode atender às nossas necessidades.

Aqui está o código que eu usei para gerar este exemplo, caso você queira replicá-lo. Se você reduzir a variação do componente de ruído na segunda linha, a quantidade de dados perdidos pela transformação do PCA também diminuirá porque os dados convergirão para o primeiro componente principal:

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)
David Marx
fonte
5
David, por favor, evite usar os termos "matriz de rotação" (também conhecidos como vetores próprios) e "matriz de carregamento" de forma intercambiável. Pela pureza e não enganar as pessoas. As cargas no PCA são vetores próprios após a normalização por seus valores próprios. Obrigado.
ttnphns
3
@ttphns Acho que depende completamente de qual pacote você usa. Muitas vezes, esses termos são completamente intercambiáveis. Considere o uso de "loadings" aqui: utdallas.edu/~herve/abdi-awPCA2010.pdf . Também faça referência à função R, prcomponde a matriz de carregamentos é apenas a matriz cujas colunas são autovetores unitários. Acho que você está sendo desnecessariamente técnico e, na maioria dos casos, acredito que esses termos sejam usados ​​de forma intercambiável.
David Marx
4
Desculpe, mas eu discordo. Razão: lembre-se de que os carregamentos são significativos (e no mesmo sentido!) Para análise de PCA e fator. As cargas são diretamente comparáveis ​​às correlações / covariâncias. Os autovetores são os cossenos de rotação. Na análise fatorial, muitos métodos não lidam com rotação ( na fase de extração). Portanto, a mistura dos dois termos é realmente enganosa para os alunos e deve ser evitada.
ttnphns
Ponto menor: a ortografia correta é sempre e somente "principal", não "princípio". Editei de acordo, mas não consigo editar uma imagem.
Nick Cox
1
Outra visual pode ser encontrada aqui setosa.io/ev/principal-component-analysis
SIslam
2

Eu diria que sua pergunta é qualificada, não apenas em, cross validatedmas também em stack overflow, onde você será instruído a implementar a redução de dimensão em R (.. etc.) Para efetivamente ajudá-lo a identificar qual coluna / variável contribui melhor para a variação de o conjunto de dados inteiro.

O PCA (Análise de Componentes Principais) possui a mesma funcionalidade que SVD (Decomposição de Valor Singular) e, na verdade, são exatamente o mesmo processo após a aplicação scale/ da transformação z no conjunto de dados.

Aqui estão alguns recursos que você pode usar em meia hora para entender melhor.

Eu não sou capaz de fornecer uma solução de codificação vívida para ajudá-lo a entender como implementar svd e o que cada componente faz, mas as pessoas são incríveis, aqui estão algumas postagens muito informativas que eu costumava acompanhar o lado do aplicativo do SVD, mesmo que eu saber como calcular manualmente um problema de SVD 3by3 .. :)

  1. Aula de Análise de Dados do Coursera de Jeff Leek: Video Lecture / Class Notes
  2. Um post de estudante muito informativo
  3. Um post da American Mathematics Society.
B.Mr.W.
fonte
A aula de Jeff Leek é muito boa para entender o que você pode fazer com o PCA. O bom é que ele não entra em detalhes matemáticos / estatísticos complexos (que podem ser encontrados em muitos outros lugares), mas fornece uma abordagem prática que mostra como realmente usá-lo nos dados.
Nico
1

No PCA, você deseja descrever os dados em menos variáveis. Você pode obter as mesmas informações em menos variáveis ​​do que com todas as variáveis. Por exemplo, as horas estudadas e a pontuação do teste podem estar correlacionadas e não precisamos incluir as duas.

No seu exemplo, digamos que seu objetivo seja medir o quão "bom" um aluno / pessoa é. Olhando para todas essas variáveis, pode ser confuso ver como fazer isso. O PCA nos permite ver claramente quais alunos são bons / ruins.

Se o primeiro componente principal explica a maior parte da variação dos dados, é tudo o que precisamos. Você encontrará a correlação entre esse componente e todas as variáveis. Correlações "grandes" significam variáveis ​​importantes. Por exemplo, o primeiro componente pode estar fortemente correlacionado com as horas estudadas e a pontuação do teste. Valores altos do primeiro componente indicam altos valores de tempo de estudo e pontuação no teste.

pcaguy
fonte