Làm thế nào để định tâm tạo ra sự khác biệt trong PCA (đối với phân rã SVD và eigen)?


30

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 irisbộ 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 prcompkế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, prcompchứ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.centeredchư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 prcompsử 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 princompsử 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?

XX'X/(n-1)


5
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 đầu X, PCA dựa trên dữ liệu đó sẽ là = PCA trên X'X/n [or n-1]ma trận. Xem thêm tổng quan quan trọng: stats.stackexchange.com/a/22520/3277 .
ttnphns

2
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.
ttnphns

X'X

1
S

Xem phân tích thành phần chính: đánh giá và các phát triển gần đây để thảo luận về PCA tập trung so với không tập trung (thường không giống nhau).
Yibo Yang

Câu trả lời:


33

DmộttmộtMa trận hiệp phương saiPhân hủy Eigen,

[Wikipedia:] Để tìm các trục của hình elip, trước tiên chúng ta phải trừ giá trị trung bình của từng biến từ tập dữ liệu để căn giữa dữ liệu xung quanh gốc. Sau đó, chúng tôi tính toán ma trận hiệp phương sai của dữ liệu ...

Và vì vậy bạn có quyền nhận xét rằng đây không phải là một công thức rất chính xác.

XX/(n-1)X

Dữ liệu XMa trận XX/(n-1)Phân hủy Eigen,

sau đó việc định tâm vấn đề rất nhiều và có hiệu ứng được mô tả và minh họa bởi @ttnphns trong Làm thế nào việc định tâm dữ liệu thoát khỏi sự can thiệp trong hồi quy và PCA?

X

Dữ liệu XPhân rã giá trị số ít.

Xsvd


1
Tôi đã có một lời khuyên cho câu trả lời của bạn để làm cho logic sạch hơn. Vì trong hai ví dụ đầu tiên (eigen) của bạn, bạn đang nói về ma trận MSCP phân rã X'X/(n-1)chứ không phải ma trận SSCP X'X- nó sẽ nằm trong ví dụ svd, hiển thị sự tương đương, để phân rã X/sqrt(n-1)thay vì X(như bạn hiện đang nói). [Tất nhiên sự khác biệt chỉ nằm ở phần tỷ lệ (giá trị riêng) không phải là hàm riêng, nhưng tốt hơn là tôi sẽ nghĩ.] Điểm thứ hai của tôi sẽ là nhắc nhở rằng ngay khi việc định tâm Xkhông diễn ra, việc điều chỉnh Bessel n-1trở nên không cần thiết, nđược chào đón.
ttnphns

1
Cả hai điểm tốt, @ttnphns. Tôi sẽ suy nghĩ về cách tôi có thể kết hợp chúng vào câu trả lời của mình: Tôi muốn câu trả lời này có thể hiểu được bởi một đối tượng rộng hơn và vì vậy đã cố gắng tránh đi vào chi tiết toán học không cần thiết.
amip nói rằng Phục hồi lại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.