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)


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


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
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.