Apa perbedaan pemusatan (atau de-makna) data Anda untuk PCA? Saya pernah mendengar bahwa itu membuat matematika lebih mudah atau mencegah PC pertama dari yang didominasi oleh variabel, tetapi saya merasa seperti saya belum dapat memahami konsep ini dengan kuat.
Misalnya, jawaban teratas di sini Bagaimana cara memusatkan data menyingkirkan intersep dalam regresi dan PCA? menjelaskan bagaimana tidak memusatkan akan menarik PCA pertama melalui asal, bukan sumbu utama dari cloud titik. Berdasarkan pemahaman saya tentang bagaimana PC diperoleh dari vektor eigen matriks kovarians, saya tidak bisa mengerti mengapa ini akan terjadi.
Selain itu, perhitungan saya sendiri dengan dan tanpa pemusatan tampaknya tidak masuk akal.
Pertimbangkan bunga setosa dalam iris
dataset di R. Saya menghitung vektor eigen dan nilai eigen dari matriks kovarian sampel sebagai berikut.
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
Jika saya memusatkan dataset terlebih dahulu, saya mendapatkan hasil yang persis sama. Ini tampaknya cukup jelas, karena pemusatan tidak mengubah matriks kovarians sama sekali.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
The prcomp
hasil fungsi persis ini kombinasi eigen-vektor eigen juga, untuk kedua dataset terpusat dan uncentered.
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
Namun, prcomp
fungsi tersebut memiliki opsi default center = TRUE
. Menonaktifkan opsi ini menghasilkan PC berikut untuk data yang tidak dimasukkan ( p.centered
tetap sama bila center
disetel ke 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
Mengapa ini berbeda dari perhitungan vektor eigen saya sendiri pada matriks kovarians dari data yang tidak terpusat? Apakah ada hubungannya dengan perhitungan? Saya telah melihat disebutkan bahwa prcomp
menggunakan sesuatu yang disebut metode SVD daripada dekomposisi nilai eigen untuk menghitung PC. Fungsi princomp
menggunakan yang terakhir, tetapi hasilnya identik dengan prcomp
. Apakah masalah saya terkait dengan jawaban yang saya jelaskan di bagian atas posting ini?
through the origin, rather than the main axis of the point cloud
. PCA selalu menembus asalnya. Jika data terpusat, asal = centroid.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Silakan baca komentar di jawaban yang Anda tautkan. Kovarian menyiratkan pemusatan data, PCA "on covariances" = PCA pada data terpusat. Jika Anda tidak memusatkan variabel asliX
, PCA berdasarkan data tersebut akan = PCA padaX'X/n [or n-1]
matriks. Lihat juga ikhtisar penting: stats.stackexchange.com/a/22520/3277 .