Việc định tâm (hoặc không có ý nghĩa) dữ liệu của bạn tạo ra gì cho PCA? Tôi đã nghe nói rằng nó làm cho các phép toán dễ dàng hơn hoặc nó ngăn PC đầu tiên bị chi phối bởi các biến ', nhưng tôi cảm thấy như mình chưa thể nắm bắt được khái niệm này.
Ví dụ, câu trả lời hàng đầu ở đây Làm thế nào để tập trung dữ liệu thoát khỏi sự can thiệp trong hồi quy và PCA? mô tả cách không định tâm sẽ kéo PCA đầu tiên qua gốc, thay vì trục chính của đám mây điểm. Dựa trên sự hiểu biết của tôi về cách thức thu được của PC từ các hàm riêng của ma trận hiệp phương sai, tôi không thể hiểu tại sao điều này lại xảy ra.
Hơn nữa, tính toán của riêng tôi có và không có trung tâm dường như không có ý nghĩa gì.
Hãy xem xét các bông hoa setosa trong iris
bộ dữ liệu trong R. Tôi đã tính toán các giá trị riêng và giá trị riêng của ma trận hiệp phương sai mẫu như sau.
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
Nếu tôi căn giữa tập dữ liệu trước, tôi sẽ nhận được kết quả chính xác như vậy. Điều này có vẻ khá rõ ràng, vì định tâm không thay đổi ma trận hiệp phương sai chút nào.
df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered
Các prcomp
kết quả chức năng chính xác kết hợp eigenvalue-eigenvector này là tốt, cho cả các dữ liệu làm trung tâm và 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
Tuy nhiên, prcomp
chức năng có tùy chọn mặc định center = TRUE
. Vô hiệu hóa tùy chọn này dẫn đến các PC sau đây cho dữ liệu p.centered
chưa được lưu trữ ( vẫn giữ nguyên khi center
được đặt thành 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
Tại sao điều này khác với các tính toán eigenvector của riêng tôi trên ma trận hiệp phương sai của dữ liệu không được kiểm duyệt? Nó có phải làm với tính toán không? Tôi đã thấy đề cập rằng prcomp
sử dụng một cái gì đó gọi là phương pháp SVD thay vì phân tách eigenvalue để tính toán PC. Hàm princomp
sử dụng cái sau, nhưng kết quả của nó là giống hệt nhau prcomp
. Có vấn đề của tôi liên quan đến câu trả lời tôi mô tả ở đầu bài này không?
through the origin, rather than the main axis of the point cloud
. PCA luôn xuyên qua nguồn gốc. Nếu dữ liệu được căn giữa, origin = centroid.
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...
Xin vui lòng đọc ý kiến trong câu trả lời bạn liên kết đến. Hiệp phương sai ngụ ý định tâm dữ liệu, PCA "trên hiệp phương sai" = PCA trên dữ liệu trung tâm. Nếu bạn không căn giữa các biến ban đầuX
, PCA dựa trên dữ liệu đó sẽ là = PCA trênX'X/n [or n-1]
ma trận. Xem thêm tổng quan quan trọng: stats.stackexchange.com/a/22520/3277 .