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' iris
ensemble 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 prcomp
fonction 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 prcomp
fonction 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.centered
reste le même lorsqu'il center
est 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 prcomp
utilise quelque chose appelé la méthode SVD plutôt que la décomposition de valeurs propres pour calculer les PC. La fonction princomp
utilise 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 )
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.
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'origineX
, PCA basé sur de telles données sera = PCA surX'X/n [or n-1]
matrice. Voir également un aperçu important: stats.stackexchange.com/a/22520/3277 .