¿Cómo marca la diferencia el centrado en PCA (para SVD y descomposición propia)?


30

¿Qué diferencia hace el centrado (o de-significado) de sus datos para PCA? He oído que facilita las matemáticas o que evita que la primera PC esté dominada por los medios de las variables, pero siento que todavía no he podido comprender el concepto con firmeza.

Por ejemplo, la respuesta principal aquí ¿Cómo se centra el centrado de los datos en deshacerse de la intercepción en regresión y PCA? describe cómo el no centrar atraería al primer PCA a través del origen, en lugar del eje principal de la nube de puntos. Según mi comprensión de cómo se obtienen las PC de los vectores propios de la matriz de covarianza, no puedo entender por qué sucedería esto.

Además, mis propios cálculos con y sin centrado parecen tener poco sentido.

Considere las flores setosa en el irisconjunto de datos en R. Calculé los vectores propios y los valores propios de la matriz de covarianza de la muestra de la siguiente manera.

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

Si centro el conjunto de datos primero, obtengo exactamente los mismos resultados. Esto parece bastante obvio, ya que el centrado no cambia la matriz de covarianza en absoluto.

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

La prcompfunción da como resultado exactamente esta combinación de valor propio-vector propio, tanto para el conjunto de datos centrado como no centrado.

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

Sin embargo, la prcompfunción tiene la opción predeterminada center = TRUE. La desactivación de esta opción da como resultado las siguientes PC para los datos no centrados ( p.centeredpermanece igual cuando centerse establece en 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 qué es diferente de mis propios cálculos de vectores propios en la matriz de covarianza de los datos no centrados? ¿Tiene que ver con el cálculo? He visto mencionar que prcompusa algo llamado método SVD en lugar de la descomposición de valores propios para calcular las PC. La función princompusa este último, pero sus resultados son idénticos a prcomp. ¿Mi problema se relaciona con la respuesta que describí al principio de esta publicación?

EDITAR: El problema fue resuelto por los útiles @ttnphns. Vea su comentario a continuación, sobre esta pregunta: ¿Qué significa calcular vectores propios de una matriz de covarianza si los datos no se centraron primero? y en esta respuesta: https://stats.stackexchange.com/a/22520/3277 . En resumen: una matriz de covarianza implícitamente implica centrar los datos ya. PCA usa SVD o descomposición propia de los datos centrados , y la matriz de covarianza es entonces igual a .X X / ( n - 1 )XXX/(n1)


55
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Lea los comentarios en la respuesta a la que se vincula. Las covarianzas implican el centrado de datos, PCA "en covarianzas" = PCA en datos centrados. Si no centra las variables originales X, la PCA basada en dichos datos será = PCA en la X'X/n [or n-1]matriz. Consulte también información general importante: stats.stackexchange.com/a/22520/3277 .
ttnphns

2
through the origin, rather than the main axis of the point cloud. PCA siempre perfora el origen. Si los datos estuvieran centrados, origen = el centroide.
ttnphns

XX

1
S

Consulte Análisis de componentes principales: una revisión y desarrollos recientes para una discusión sobre PCA centrado versus no centrado (que generalmente no son lo mismo).
Yibo Yang

Respuestas:


33

DataCovariance matrixEigen-decomposition,

[Wikipedia:] Para encontrar los ejes de la elipse, primero debemos restar la media de cada variable del conjunto de datos para centrar los datos alrededor del origen. Luego, calculamos la matriz de covarianza de los datos ...

Y tiene razón al observar que esta no es una formulación muy precisa.

XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

entonces centrar es muy importante y tiene el efecto descrito e ilustrado por @ttnphns en ¿Cómo se elimina la intercepción en la regresión y PCA al centrar los datos?

Puede parecer extraño incluso mencionar este procedimiento "extraño", sin embargo, considere que la PCA se puede realizar de manera muy conveniente a través de la descomposición de valores singulares (SVD) de la matriz de datos misma. Describo esto en detalle aquí: Relación entre SVD y PCA. ¿Cómo usar SVD para realizar PCA? En este caso el procedimiento es el siguiente:X

Data XSingular value decomposition.

Si está centrado, esto es equivalente a la PCA estándar realizada a través de una matriz de covarianza. Pero si no, entonces es equivalente a la PCA "no centrada" como se describió anteriormente. Dado que SVD es una forma muy común y muy conveniente de realizar PCA, en la práctica puede ser muy importante recordar centrar los datos antes de llamar a la función. Ciertamente tuve muchos errores debido a que olvidé hacerlo.Xsvd


1
Tengo un consejo para su respuesta para hacer una lógica más limpia. Dado que en sus dos primeros ejemplos (eigen) está hablando de la matriz MSCP de descomposición X'X/(n-1)y no de la matriz SSCP X'X, sería en el ejemplo svd, que muestra la equivalencia, descomponer en X/sqrt(n-1)lugar de X(como habla actualmente). [Por supuesto, la diferencia está solo en la parte de la escala (valores propios) no en los vectores propios, pero creo que es mejor didácticamente.] Mi segundo punto sería recordar que tan pronto como el centrado Xno tenga lugar, la corrección de Bessel se n-1vuelve innecesaria, nEs bienvenido.
ttnphns

1
Ambos buenos puntos, @ttnphns. Pensaré en cómo puedo incorporarlos en mi respuesta: quería que esta respuesta fuera comprensible para un público más amplio y, por lo tanto, traté de evitar entrar en detalles matemáticos innecesarios.
ameba dice Reinstate Monica
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.