Como a centralização faz a diferença no PCA (para decomposição de SVD e eigen)?

30

Que diferença faz a centralização (ou remoção do significado) de seus dados para o PCA? Ouvi dizer que isso facilita a matemática ou impede que o primeiro PC seja dominado pelos meios das variáveis, mas sinto que ainda não fui capaz de entender o conceito com firmeza.

Por exemplo, a principal resposta aqui Como a centralização dos dados se livra da interceptação na regressão e no PCA? descreve como a não centralização puxaria o primeiro PCA através da origem, em vez do eixo principal da nuvem de pontos. Com base no meu entendimento de como os PCs são obtidos a partir dos vetores próprios da matriz de covariâncias, não consigo entender por que isso aconteceria.

Além disso, meus próprios cálculos com e sem centralização parecem fazer pouco sentido.

Considere as flores setosa no irisconjunto de dados em R. Eu calculei os vetores próprios e os valores próprios da matriz de covariância da amostra da seguinte maneira.

data(iris)
df <- iris[iris$Species=='setosa',1:4]
e <- eigen(cov(df))
> e
$values
[1] 0.236455690 0.036918732 0.026796399 0.009033261

$vectors
            [,1]       [,2]       [,3]        [,4]
[1,] -0.66907840  0.5978840  0.4399628 -0.03607712
[2,] -0.73414783 -0.6206734 -0.2746075 -0.01955027
[3,] -0.09654390  0.4900556 -0.8324495 -0.23990129
[4,] -0.06356359  0.1309379 -0.1950675  0.96992969

Se eu centralizar o conjunto de dados primeiro, obtenho exatamente os mesmos resultados. Isso parece bastante óbvio, uma vez que a centralização não altera a matriz de covariância.

df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered

A prcompfunção resulta exatamente nessa combinação de valor próprio e vetor próprio, para o conjunto de dados centralizado e não centralizado.

p<-prcomp(df)
p.centered <- prcomp(df.centered)
Standard deviations:
[1] 0.48626710 0.19214248 0.16369606 0.09504347

Rotation:
                     PC1        PC2        PC3         PC4
Sepal.Length -0.66907840  0.5978840  0.4399628 -0.03607712
Sepal.Width  -0.73414783 -0.6206734 -0.2746075 -0.01955027
Petal.Length -0.09654390  0.4900556 -0.8324495 -0.23990129
Petal.Width  -0.06356359  0.1309379 -0.1950675  0.96992969

No entanto, a prcompfunção tem a opção padrão center = TRUE. Desativar esta opção resulta nos seguintes PCs para os dados não centrados ( p.centeredpermanece o mesmo quando centerdefinido como falso):

p.uncentered <- prcomp(df,center=F)
> p.uncentered
Standard deviations:
[1] 6.32674700 0.22455945 0.16369617 0.09766703

Rotation:
                    PC1         PC2        PC3         PC4
Sepal.Length -0.8010073  0.40303704  0.4410167  0.03811461
Sepal.Width  -0.5498408 -0.78739486 -0.2753323 -0.04331888
Petal.Length -0.2334487  0.46456598 -0.8317440 -0.19463332
Petal.Width  -0.0395488  0.04182015 -0.1946750  0.97917752

Por que isso é diferente dos meus próprios cálculos de vetor próprio na matriz de covariância dos dados não centrados? Isso tem a ver com o cálculo? Já mencionei que prcompusa algo chamado método SVD em vez da decomposição de autovalor para calcular os PCs. A função princompusa o último, mas seus resultados são idênticos a prcomp. Meu problema está relacionado à resposta que descrevi na parte superior desta postagem?

EDIT: O problema foi resolvido pelo útil @ttnphns. Veja seu comentário abaixo, sobre esta questão: O que significa calcular vetores próprios de uma matriz de covariância se os dados não foram centralizados primeiro? e nesta resposta: https://stats.stackexchange.com/a/22520/3277 . Em resumo: uma matriz de covariância já implica implicitamente a centralização dos dados. O PCA usa SVD ou composição automática dos dados centralizados , e a matriz de covariância é então igual a .XXX/(n1)

Zenit
fonte
5
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Por favor, leia os comentários na resposta para a qual você vincula. Covariâncias implicam centralização de dados, PCA "em covariâncias" = PCA em dados centralizados. Se você não centralizar as variáveis ​​originais X, o PCA com base nesses dados será = PCA na X'X/n [or n-1]matriz. Consulte também uma visão geral importante: stats.stackexchange.com/a/22520/3277 .
ttnphns
2
through the origin, rather than the main axis of the point cloud. O PCA sempre perfura a origem. Se os dados foram centralizados, origem = centróide.
ttnphns
Obrigado, a visão geral ajudou a esclarecer as coisas para mim. Portanto, é simplesmente uma questão de convenções de nomenclatura? Eu assumi que PCA era um cálculo baseado em torno da matriz de covariância, enquanto que geralmente é definido como um cálculo realizado em um conjunto de dados centralizado (onde é a matriz de covariância). Parece uma convenção confusa. cont. XX
Zenit
1
Muitas fontes enfatizam a importância de centralizar seus dados e depois explicam como os vetores próprios da matriz de covariância são de interesse, aparentemente ignorando o fato de que já está implicitamente centralizado. A entrada PCA na wikipedia também não faz essa distinção: Para encontrar os eixos da elipse, primeiro devemos subtrair a média de cada variável do conjunto de dados para centralizar os dados em torno da origem. Em seguida, calculamos a matriz de covariância dos dados e calculamos os autovalores e os autovetores correspondentes dessa matriz de covariância. S
Zenit
Consulte Análise de componentes principais: uma revisão e desenvolvimentos recentes para uma discussão sobre PCA centralizado versus não centralizado (que geralmente não são os mesmos).
Yibo Yang 24/03

Respostas:

33

Como você se observou e explicado por @ttnphns nos comentários, a matriz de covariância computacional realiza implicitamente a centralização: variância, por definição, é o desvio médio quadrático da média . Dados centralizados e não centralizados terão matrizes de covariância idênticas. Portanto, se pelo PCA entendermos o procedimento a seguir: centralização não fará nenhuma diferença.

DataCovariance matrixEigen-decomposition,

[Wikipedia:] Para encontrar os eixos da elipse, primeiro devemos subtrair a média de cada variável do conjunto de dados para centralizar os dados em torno da origem. Em seguida, calculamos a matriz de covariância dos dados ...

E, portanto, você está certo ao observar que essa não é uma formulação muito precisa.

Quando as pessoas falam sobre "PCA em dados não centralizados", elas significam que, em vez da matriz de covariância, a decomposição do eigen é realizada na matriz . Se estiver centralizado, será exatamente a matriz de covariância. Se não, então não. Portanto, se por PCA entendermos o seguinte procedimento:XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

a centralização é muito importante e tem o efeito descrito e ilustrado por @ttnphns em Como a centralização dos dados se livra da interceptação na regressão e no PCA?

Pode parecer estranho até mencionar esse procedimento "estranho", no entanto, considere que o PCA pode ser muito convenientemente executado por meio da decomposição de valor singular (SVD) da matriz de dados si. Descrevo isso em detalhes aqui: Relação entre SVD e PCA. Como usar o SVD para executar o PCA? Nesse caso, o procedimento é o seguinte:X

Data XSingular value decomposition.

Se estiver centralizado, isso será equivalente ao PCA padrão feito via matriz de covariância. Mas, se não, é equivalente ao PCA "não centralizado", conforme descrito acima. Como o SVD é uma maneira muito comum e muito conveniente de executar o PCA, na prática, pode ser muito importante lembrar de centralizar os dados antes de chamar a função. Eu certamente tive minha parcela de bugs por ter esquecido de fazê-lo.Xsvd

ameba diz Restabelecer Monica
fonte
1
Eu tenho um conselho para sua resposta para criar uma lógica mais limpa. Como nos seus dois primeiros exemplos (eigen), você está falando da matriz MSCP de decomposição X'X/(n-1)e não da matriz SSCP X'X- seria no exemplo do svd, mostrando a equivalência, decompor em X/sqrt(n-1)vez de X(como você atualmente fala). [É claro que a diferença está apenas na parte da escala (valores próprios) e não nos vetores próprios, mas acho que é melhor didaticamente.] Meu segundo ponto seria lembrar que, assim que a centralização Xnão ocorre, a correção de Bessel n-1se torna desnecessária, né bem vindo.
ttnphns
1
Ambos os pontos positivos, @ttnphns. Pensarei em como incorporá-los à minha resposta: queria que essa resposta fosse compreensível por um público mais amplo e, assim, tentei evitar entrar em detalhes matemáticos desnecessários.
ameba diz Restabelecer Monica