59 votos

¿Cómo influye el centrado en el PCA (para la SVD y la descomposición eigen)?

¿Qué diferencia hay en centrar (o desentrañar) los datos para el ACP? He oído que facilita las matemáticas o que evita que el primer PC esté dominado por las medias de las variables, pero siento que aún no he podido entender bien el concepto.

Por ejemplo, la respuesta principal aquí ¿Cómo el centrado de los datos elimina el intercepto en la regresión y el ACP? describe cómo el hecho de no centrar el primer PCA pasaría por el origen, en lugar de por el eje principal de la nube de puntos. Basándome en mi comprensión de cómo se obtienen los PC a partir de los vectores propios de la matriz de covarianza, no puedo entender por qué ocurriría esto.

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

Considere las flores de setosa en el iris en R. Calculé los vectores propios y los valores propios de la matriz de covarianza de la muestra como sigue.

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 primero el conjunto de datos, obtengo exactamente los mismos resultados. Esto parece bastante obvio, ya que el centrado no cambia en absoluto la matriz de covarianza.

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

El prcomp da como resultado exactamente esta combinación de valores propios y vectores propios, tanto para el conjunto de datos centrado como para el 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, el prcomp tiene la opción por defecto center = TRUE . Si se desactiva esta opción, se obtienen los siguientes PC para los datos no centrados ( p.centered sigue siendo el mismo cuando center es 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 esto 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 que se menciona que prcomp utiliza algo llamado método SVD en lugar de la descomposición de valores propios para calcular los PC. La función princomp utiliza este último, pero sus resultados son idénticos a los de prcomp . ¿Está mi problema relacionado con la respuesta que he descrito al principio de este post?

EDITAR: El problema fue aclarado por el útil @ttnphns. Ver su comentario más abajo, en esta pregunta: ¿Qué significa calcular los vectores propios de una matriz de covarianza si los datos no se han centrado primero? y en esta respuesta: https://stats.stackexchange.com/a/22520/3277 . En resumen: una matriz de covarianza implica ya implícitamente el centrado de los datos. El PCA utiliza la SVD o la eigendecomposición de los datos centrados $\bf X$ y la matriz de covarianza es entonces igual a ${\bf X'X}/(n-1)$ .

62voto

zowens Puntos 1417

Como tú mismo has comentado y como ha explicado @ttnphns en los comentarios, el cálculo de la matriz de covarianza realiza implícitamente el centrado: la varianza, por definición, es la desviación media al cuadrado de la media . Los datos centrados y no centrados tendrán idénticas matrices de covarianza. Así que si por PCA entendemos el siguiente procedimiento: $$\mathrm{Data}\to\text{Covariance matrix}\to\text{Eigen-decomposition},$$ entonces el centrado no hace ninguna diferencia.

[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. A continuación, calculamos la matriz de covarianza de los datos...

Por lo tanto, tienes razón al observar que no es una formulación muy precisa.

Cuando se habla de "PCA sobre datos no centrados", se quiere decir que en lugar de la matriz de covarianza se realiza la descomposición propia sobre la $\mathbf X^\top \mathbf X/(n-1)$ matriz. Si $\mathbf X$ está centrado, entonces esto será será exactamente la matriz de covarianza. Si no, entonces no. Así que si por PCA entendemos el siguiente procedimiento:

$$\text{Data } \mathbf X\to\text{Matrix } \mathbf X^\top \mathbf X/(n-1)\to\text{Eigen-decomposition},$$

entonces el centrado importa mucho y tiene el efecto descrito e ilustrado por @ttnphns en ¿Cómo el centrado de los datos elimina el intercepto en la regresión y el ACP?

Puede parecer extraño mencionar este "extraño" procedimiento, sin embargo, considere que el PCA puede realizarse muy convenientemente a través de la descomposición del valor singular (SVD) de la matriz de datos $\mathbf X$ en sí mismo. Lo describo en detalle aquí: Relación entre SVD y PCA. Cómo utilizar la SVD para realizar el PCA? En este caso, el procedimiento es el siguiente:

$$\text{Data } \mathbf X \to \text{Singular value decomposition}.$$

Si $\mathbf X$ está centrado, entonces es equivalente al PCA estándar realizado a través de la matriz de covarianza. Pero si no, entonces es equivalente al PCA "no centrado" descrito anteriormente. Dado que la SVD es una muy Aunque es una forma común y muy conveniente de realizar el PCA, en la práctica puede ser muy importante recordar que hay que centrar los datos antes de llamar a svd función. Ciertamente, tuve mi cuota de errores por olvidarme de hacerlo.

2voto

helperFunction Puntos 180

Intentaré dar una justificación matemática.
Por centrar, supongo que te refieres a aplicar la eigendecomposición en $XX^T$ en lugar de $(X-\mu)(X-\mu)^T$
Aquí $\mu$ denota la media de la muestra y no la media real, por lo que $\mu = \sum_i x_i / n$
Dejemos que $B = \sum_i x_ix_i^T$
Dejemos que $A = \sum_i (x_i - \mu)(x_i - \mu)^T$ $A= \sum_i (x_ix_i^T -\mu x_i^T - x_i \mu^T + \mu\mu^T) = B + \sum_i (-\mu x_i^T - x_i \mu^T + \mu\mu^T)$
$A = B - \mu(\sum_i x_i)^T - (\sum_i x_i)\mu^T + \sum_i \mu\mu^T$
$A = B - \mu(n\mu)^T - (n\mu)\mu^T + n\mu\mu^T$
$A = B - n\mu\mu^T - n\mu\mu^T + n\mu\mu^T$
$A = B - n\mu\mu^T$
Normalmente, tomamos la eigendecomposición de $C = A/(n-1)$ (Esta es la definición de la matriz de covarianza de la muestra)
Aquí, digamos que si se toma la eigendecomposición de $D = B/(n-1)$ Así que..,
$$\boxed{D = C + \frac{n\mu\mu^T}{n-1}}$$
Entonces está claro que los valores y vectores propios correspondientes a $D$ no serán los mismos que los de $C$ (a menos que $\mu$ = 0)
Así, se obtendrían componentes principales erróneos (Los componentes principales correctos corresponden a la eigendecomposición de $C$ ).

0voto

Manuel Darveau Puntos 1017

Leí cuidadosamente este hilo que me ayuda mucho en la comprensión de todo el proceso de PCA, aquí está mi resumen (no estoy seguro de si tengo la verdadera idea o no):

PCA <-> Descomposición Eigen en la matriz cov -> encontrará el eje en cuya dirección los datos tienen la máxima dispersión. no importa si centramos los datos antes, la matriz cov es la misma y por lo tanto siempre obtendremos el eje que maximiza la dispersión de los datos.

He visto que en algún libro de texto al introducir el PCA, asumen que la matriz de datos está centrada. Creo que esta es la razón que desencadena mi confusión, me indujo que los datos necesitan estar centrados antes de hacer el análisis PCA. Ahora mi sensación es que tengo que mirar estos de una manera inversa: centrar los datos ayuda a justificar que los vectores propios de la matriz de covarianza es el eje correcto que estamos buscando.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X