Comment le centrage fait-il une différence dans l'ACP (pour la décomposition SVD et propre)?

30

Quelle différence le centrage (ou la dé-signification) de vos données fait-il pour l'ACP? J'ai entendu dire que cela rend les calculs plus faciles ou qu'elle empêche le premier PC d'être dominé par les moyens des variables, mais j'ai l'impression que je n'ai pas encore pu saisir fermement le concept.

Par exemple, la première réponse ici Comment le centrage des données supprime-t-il l'interception dans la régression et l'ACP? décrit comment un centrage ne ferait pas passer le premier PCA à travers l'origine, plutôt que l'axe principal du nuage de points. Sur la base de ma compréhension de la façon dont les PC sont obtenus à partir des vecteurs propres de la matrice de covariance, je ne comprends pas pourquoi cela se produirait.

De plus, mes propres calculs avec et sans centrage semblent avoir peu de sens.

Considérez les fleurs de setosa dans l' irisensemble de données dans R. J'ai calculé les vecteurs propres et les valeurs propres de la matrice de covariance de l'échantillon comme suit.

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 je centre d'abord l'ensemble de données, j'obtiens exactement les mêmes résultats. Cela semble assez évident, car le centrage ne change pas du tout la matrice de covariance.

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

La prcompfonction donne également exactement cette combinaison valeur propre-vecteur propre, à la fois pour le jeu de données centré et non centré.

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

Cependant, la prcompfonction a l'option par défaut center = TRUE. La désactivation de cette option entraîne les PC suivants pour les données non centrées ( p.centeredreste le même lorsqu'il centerest défini sur false):

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

Pourquoi est-ce différent de mes propres calculs de vecteur propre sur la matrice de covariance des données non centrées? Cela a-t-il à voir avec le calcul? J'ai vu mentionné qu'il prcomputilise quelque chose appelé la méthode SVD plutôt que la décomposition de valeurs propres pour calculer les PC. La fonction princomputilise ce dernier, mais ses résultats sont identiques à prcomp. Mon problème est-il lié à la réponse que j'ai décrite en haut de cet article?

EDIT: Le problème a été résolu par les utiles @ttnphns. Voir son commentaire ci-dessous, sur cette question: que signifie calculer des vecteurs propres d'une matrice de covariance si les données n'étaient pas centrées en premier? et dans cette réponse: https://stats.stackexchange.com/a/22520/3277 . En bref: une matrice de covariance implique implicitement déjà le centrage des données. L'ACP utilise soit la SVD, soit la décomposition des données centrées , et la matrice de covariance est alors égale à .X X / ( n - 1 )XXX/(n1)

Zenit
la source
5
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...Veuillez lire les commentaires dans la réponse à laquelle vous liez. Les covariances impliquent le centrage des données, PCA "sur les covariances" = PCA sur les données centrées. Si vous ne centrez pas les variables d'origine X, PCA basé sur de telles données sera = PCA sur X'X/n [or n-1]matrice. Voir également un aperçu important: stats.stackexchange.com/a/22520/3277 .
ttnphns
2
through the origin, rather than the main axis of the point cloud. L'ACP perce toujours l'origine. Si les données étaient centrées, origine = le centroïde.
ttnphns
XX
1
S
Voir Analyse en composantes principales: une revue et les développements récents pour une discussion de l'ACP centrée vs non centrée (qui ne sont généralement pas les mêmes).
Yibo Yang

Réponses:

33

DataCovariance matrixEigen-decomposition,

[Wikipedia:] Pour trouver les axes de l'ellipse, nous devons d'abord soustraire la moyenne de chaque variable de l'ensemble de données pour centrer les données autour de l'origine. Ensuite, nous calculons la matrice de covariance des données ...

Et vous avez donc raison de constater que ce n'est pas une formulation très précise.

XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

le centrage importe alors beaucoup et a l'effet décrit et illustré par @ttnphns dans Comment le centrage des données élimine- t-il l'interception dans la régression et l'ACP?

X

Data XSingular value decomposition.

Xsvd

amibe dit réintégrer Monica
la source
1
J'ai un conseil pour votre réponse pour faire une logique plus propre. Étant donné que dans vos deux premiers exemples (propres), vous parlez de la matrice de décomposition MSCP X'X/(n-1)et non de la matrice SSCP X'X- ce serait dans l'exemple svd, montrant l'équivalence, de se décomposer X/sqrt(n-1)au lieu de X(comme vous en parlez actuellement). [Bien sûr, la différence ne concerne que la partie échelle (valeurs propres) et non les vecteurs propres, mais il vaut mieux didactiquement, je pense.] Mon deuxième point serait de rappeler que dès que le centrage Xn'a pas lieu, la correction de Bessel n-1devient inutile, nest bienvenue.
ttnphns
1
Les deux bons points, @ttnphns. Je vais réfléchir à la façon dont je peux les intégrer dans ma réponse: je voulais que cette réponse soit compréhensible par un public plus large et j'ai donc essayé d'éviter d'entrer dans des détails mathématiques inutiles.
amibe dit Réintégrer Monica le