Welchen Unterschied macht die Zentrierung (oder die Aufhebung der Bedeutung) Ihrer Daten für PCA? Ich habe gehört, dass dies die Mathematik erleichtert oder verhindert, dass der erste PC von den Variablen dominiert wird, aber ich habe das Gefühl, dass ich das Konzept noch nicht richtig verstanden habe.
Zum Beispiel die beste Antwort hier. Wie werden durch die Zentrierung der Daten die Unterbrechungen bei Regression und PCA beseitigt? beschreibt, wie nicht durch Zentrieren die erste PCA durch den Ursprung gezogen wird, sondern durch die Hauptachse der Punktwolke. Aufgrund meines Verständnisses, wie die PCs aus den Eigenvektoren der Kovarianzmatrix erhalten werden, kann ich nicht verstehen, warum dies passieren würde.
Außerdem scheinen meine eigenen Berechnungen mit und ohne Zentrierung wenig sinnvoll zu sein.
Betrachten Sie die Setosa-Blüten im iris
Datensatz in R. I berechnete die Eigenvektoren und Eigenwerte der Probenkovarianzmatrix wie folgt.
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
Wenn ich den Datensatz zuerst zentriere, erhalte ich genau die gleichen Ergebnisse. Dies scheint ziemlich offensichtlich zu sein, da die Zentrierung die Kovarianzmatrix überhaupt nicht verändert.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
Die prcomp
Funktion ergibt genau diese Eigenwert-Eigenvektor-Kombination, sowohl für den zentrierten als auch für den nicht zentrierten Datensatz.
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
Die prcomp
Funktion verfügt jedoch über die Standardoption center = TRUE
. Das Deaktivieren dieser Option führt zu den folgenden PCs für die nicht zentrierten Daten ( p.centered
bleibt gleich, wenn center
false festgelegt ist):
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
Warum unterscheidet sich das von meinen eigenen Eigenvektorberechnungen auf der Kovarianzmatrix der nicht zentrierten Daten? Hat das mit der Berechnung zu tun? Ich habe gesehen, dass erwähnt, dass prcomp
etwas verwendet, das SVD-Methode genannt wird, anstatt die Eigenwertzerlegung, um die PC's zu berechnen. Die Funktion princomp
verwendet letztere, aber ihre Ergebnisse sind identisch mit prcomp
. Bezieht sich mein Problem auf die Antwort, die ich oben in diesem Beitrag beschrieben habe?
through the origin, rather than the main axis of the point cloud
. PCA durchbohrt immer den Ursprung. Wenn Daten zentriert waren, ist Ursprung = der Schwerpunkt.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Bitte lesen Sie die Kommentare in der Antwort, auf die Sie verlinken. Kovarianzen implizieren das Zentrieren von Daten, PCA "auf Kovarianzen" = PCA auf zentrierten Daten. Wenn Sie die ursprünglichen Variablen nicht zentrierenX
, ist PCA basierend auf diesen Daten = PCA aufX'X/n [or n-1]
Matrix. Siehe auch wichtige Übersicht: stats.stackexchange.com/a/22520/3277 .