Làm thế nào tôi có thể giải thích những gì tôi nhận được từ PCA?


14

Là một phần của bài tập Đại học, tôi phải tiến hành xử lý trước dữ liệu trên một tập dữ liệu thô khá lớn, đa biến (> 10). Tôi không phải là một nhà thống kê theo bất kỳ ý nghĩa nào của từ này, vì vậy tôi hơi bối rối về những gì đang diễn ra. Xin lỗi trước những gì có lẽ là một câu hỏi đơn giản đến buồn cười - đầu tôi quay cuồng sau khi xem các câu trả lời khác nhau và cố gắng lội qua các chỉ số nói.

Tôi đã đọc rằng:

  • PCA cho phép tôi giảm tính chiều của dữ liệu của mình
  • Nó làm như vậy bằng cách hợp nhất / loại bỏ các thuộc tính / kích thước tương quan với nhau (và do đó không cần thiết một chút)
  • Nó làm như vậy bằng cách tìm các hàm riêng trên dữ liệu hiệp phương sai (nhờ một hướng dẫn tốt đẹp mà tôi đã làm theo để tìm hiểu điều này)

Đó là tuyệt vời.

Tuy nhiên, tôi thực sự loay hoay xem làm thế nào tôi có thể áp dụng điều này thực tế vào dữ liệu của mình. Chẳng hạn (đây không phải là tập dữ liệu tôi sẽ sử dụng, nhưng cố gắng làm một ví dụ điển hình mà mọi người có thể làm việc với), nếu tôi có một tập dữ liệu có nội dung như ...

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

Tôi không chắc chắn làm thế nào tôi sẽ giải thích bất kỳ kết quả.

Hầu hết các hướng dẫn tôi đã xem trực tuyến dường như cho tôi một cái nhìn rất toán học về PCA. Tôi đã thực hiện một số nghiên cứu về nó và theo dõi họ thông qua - nhưng tôi vẫn không hoàn toàn chắc chắn điều này có ý nghĩa gì với tôi, người chỉ cố gắng rút ra một số ý nghĩa từ đống dữ liệu tôi có trước mặt tôi.

Đơn giản chỉ cần thực hiện PCA trên dữ liệu của tôi (sử dụng gói số liệu thống kê) tạo ra ma trận số NxN (trong đó N là số kích thước gốc), hoàn toàn là Hy Lạp đối với tôi.

Làm thế nào tôi có thể làm PCA và lấy những gì tôi có được theo cách mà sau đó tôi có thể đưa vào tiếng Anh đơn giản về kích thước ban đầu?


3
Dữ liệu ví dụ của bạn cho thấy hỗn hợp các loại dữ liệu: Giới tính là phân đôi, Tuổi là thứ tự, 3 loại còn lại là khoảng cách (và các loại thuộc các đơn vị khác nhau). Làm PCA tuyến tính phù hợp với dữ liệu khoảng (nhưng trước tiên bạn phải chuẩn hóa z các biến đó, vì các đơn vị). Người ta tranh cãi liệu PCA có phù hợp với dữ liệu nhị phân hay nhị phân hay không . Bạn không nên sử dụng dữ liệu thứ tự trong PCA tuyến tính. Nhưng câu hỏi chính với dữ liệu ví dụ của bạn: tại sao ở tất cả để làm PCA với nó; nó có ý nghĩa gì trong trường hợp này?
ttnphns

Pdf này rất hữu ích cho việc áp dụng PCA . Các bài viết khác ở đây làm rất tốt khi mô tả "ý nghĩa" của kết quả PCA của bạn.
am

(Vui lòng sửa lại cho tôi nếu tôi sai) Tôi tin rằng PCA là / có thể rất hữu ích trong việc giúp tìm xu hướng trong dữ liệu và tìm ra thuộc tính nào có thể liên quan đến cái nào (mà tôi đoán cuối cùng sẽ dẫn đến việc tìm ra mô hình và những thứ tương tự). Nhiệm vụ chi tiết của tôi là tôi có bộ dữ liệu khổng lồ này và tôi chỉ phải áp dụng phân cụm và phân loại, và một trong những bước mà nó liệt kê là quan trọng để xử lý trước là PCA. Nó có giúp ích gì không nếu tôi cố trích xuất một số thuộc tính thứ tự thứ hai từ tập dữ liệu mà tôi phải thử và lấy tất cả chúng trong dữ liệu khoảng?
nitsua

3
Hiện tại tôi chỉ có thể khuyên bạn nên đọc thêm về PCA (trên trang này). Nhiều điều không chắc chắn sẽ biến mất.
ttnphns

Nhiều liên kết tốt ở trên, đây là một ví dụ ngắn "có thể" mang lại cho bạn cảm giác tốt về PCA về mặt hồi quy, với một ví dụ thực tế và rất ít, nếu có, về mặt kỹ thuật. site.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/ từ
leviathan

Câu trả lời:


14

Các trang 13-20 của hướng dẫn bạn đã đăng cung cấp một lời giải thích hình học rất trực quan về cách PCA được sử dụng để giảm kích thước.

Ma trận 13x13 mà bạn đề cập có lẽ là ma trận "đang tải" hoặc "xoay" (Tôi đoán dữ liệu gốc của bạn có 13 biến?) Có thể được hiểu theo một trong hai cách (tương đương):

  1. Các cột (giá trị tuyệt đối của) cột trong ma trận tải của bạn mô tả mức độ mỗi biến "đóng góp" theo tỷ lệ cho mỗi thành phần.

  2. Ma trận xoay vòng dữ liệu của bạn trên cơ sở được xác định bởi ma trận xoay vòng của bạn. Vì vậy, nếu bạn có dữ liệu 2 chiều và nhân dữ liệu của mình với ma trận xoay vòng, trục X mới của bạn sẽ là thành phần chính đầu tiên và trục Y mới sẽ là thành phần chính thứ hai.

EDIT: Câu hỏi này được hỏi rất nhiều, vì vậy tôi sẽ trình bày một lời giải thích trực quan chi tiết về những gì đang xảy ra khi chúng ta sử dụng PCA để giảm kích thước.

Xem xét một mẫu 50 điểm được tạo từ nhiễu y = x +. Thành phần chính đầu tiên sẽ nằm dọc theo dòng y = x và thành phần thứ hai sẽ nằm dọc theo dòng y = -x, như được hiển thị bên dưới.

nhập mô tả hình ảnh ở đây

Tỷ lệ khung hình làm rối tung nó lên một chút, nhưng hãy lưu ý rằng các thành phần là trực giao. Áp dụng PCA sẽ xoay dữ liệu của chúng tôi để các thành phần trở thành trục x và y:

nhập mô tả hình ảnh ở đây

Dữ liệu trước khi chuyển đổi là các vòng tròn, dữ liệu sau là chéo. Trong ví dụ cụ thể này, dữ liệu không được xoay quá nhiều khi nó được lật ngang qua đường y = -2x, nhưng chúng ta có thể dễ dàng đảo ngược trục y để biến đây thực sự là một phép quay mà không mất tính tổng quát như được mô tả ở đây .

Phần lớn phương sai, tức là thông tin trong dữ liệu, được trải dọc theo thành phần chính đầu tiên (được biểu thị bằng trục x sau khi chúng tôi đã chuyển đổi dữ liệu). Có một chút khác biệt dọc theo thành phần thứ hai (bây giờ là trục y), nhưng chúng ta có thể loại bỏ hoàn toàn thành phần này mà không mất thông tin đáng kể . Vì vậy, để thu gọn điều này từ hai chiều thành 1, chúng tôi cho phép chiếu dữ liệu lên thành phần chính đầu tiên mô tả hoàn toàn dữ liệu của chúng tôi.

nhập mô tả hình ảnh ở đây

Chúng tôi có thể khôi phục một phần dữ liệu gốc của mình bằng cách xoay (ok, chiếu) nó trở lại các trục ban đầu.

nhập mô tả hình ảnh ở đây

Các điểm màu xanh đậm là dữ liệu "được phục hồi", trong khi các điểm trống là dữ liệu gốc. Như bạn có thể thấy, chúng tôi đã mất một số thông tin từ dữ liệu gốc, cụ thể là phương sai theo hướng của thành phần chính thứ hai. Nhưng đối với nhiều mục đích, mô tả nén này (sử dụng phép chiếu dọc theo thành phần chính đầu tiên) có thể phù hợp với nhu cầu của chúng tôi.

Đây là mã tôi đã sử dụng để tạo ví dụ này trong trường hợp bạn muốn tự sao chép nó. Nếu bạn giảm phương sai của thành phần nhiễu trên dòng thứ hai, lượng dữ liệu bị mất do chuyển đổi PCA cũng sẽ giảm vì dữ liệu sẽ hội tụ vào thành phần chính đầu tiên:

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)

5
David, xin vui lòng, không sử dụng thuật ngữ "ma trận xoay" (còn gọi là eigenvector) và "ma trận tải" thay thế cho nhau. Vì sự trong sạch và không để đánh lừa mọi người. Tải trong PCA là các hàm riêng sau khi chuẩn hóa bởi giá trị riêng của chúng. Cảm ơn bạn.
ttnphns

3
@ttphns Tôi nghĩ nó hoàn toàn phụ thuộc vào gói bạn sử dụng. Thông thường các điều khoản này là hoàn toàn có thể thay thế cho nhau. Xem xét việc sử dụng "tải" ở đây: utdallas.edu/~herve/abdi-awPCA2010.pdf . Cũng tham chiếu hàm R prcomptrong đó ma trận tải chỉ là ma trận có các cột là các hàm riêng. Tôi nghĩ rằng bạn đang có kỹ thuật không cần thiết, và trong hầu hết các trường hợp tôi tin rằng các thuật ngữ này được sử dụng thay thế cho nhau.
David Marx

4
Xin lỗi, nhưng tôi sẽ không đồng ý. Lý do: hãy nhớ rằng các tải đều có ý nghĩa (và theo cùng một nghĩa!) Đối với PCA và phân tích nhân tố. Tải trọng có thể so sánh trực tiếp với các mối tương quan / hiệp phương sai. Eigenvector là cosin quay. Trong phân tích nhân tố, nhiều phương pháp không đối phó với phép quay ( giai đoạn trích xuất). Vì vậy, trộn lẫn hai thuật ngữ thực sự gây hiểu lầm cho sinh viên và nên tránh.
ttnphns

Điểm nhỏ hơn: chính tả luôn luôn và chỉ "chính", không phải "nguyên tắc". Tôi đã chỉnh sửa tương ứng, nhưng một hình ảnh tôi không thể chỉnh sửa.
Nick Cox

1
Một hình ảnh khác có thể được tìm thấy ở đây setosa.io/ev/principal-component-analysis
SIslam

2

Tôi muốn nói rằng câu hỏi của bạn là một câu hỏi đủ điều kiện không chỉ trong cross validatedmà còn ở đó stack overflow, nơi bạn sẽ được hướng dẫn cách thực hiện giảm kích thước trong R (.. v.v.) để giúp bạn xác định hiệu quả cột / biến nào đóng góp tốt hơn cho phương sai toàn bộ dữ liệu.

PCA (Phân tích thành phần chính) có chức năng tương tự như SVD (Phân tách giá trị số đơn) và chúng thực sự là quá trình chính xác sau khi áp dụng scale/ chuyển đổi z cho tập dữ liệu.

Dưới đây là một số tài nguyên mà bạn có thể trải qua trong nửa giờ để hiểu rõ hơn nhiều.

Tôi không có khả năng đưa ra một giải pháp mã hóa sinh động để giúp bạn hiểu cách triển khai svd và từng thành phần, nhưng mọi người thật tuyệt vời, đây là một số bài viết rất nhiều thông tin mà tôi đã sử dụng để bắt kịp phía ứng dụng của SVD ngay cả khi tôi biết cách tính toán một vấn đề 3by3 SVD .. :)

  1. Lớp phân tích dữ liệu Coursera của Jeff Leek: Bài giảng video / Ghi chú lớp
  2. Một bài viết rất sinh viên
  3. Một bài đăng từ Hiệp hội toán học Mỹ.

Lớp học của Jeff Leek rất tốt để có được cảm giác về những gì bạn có thể làm với PCA. Điều tốt là nó không đi sâu vào các chi tiết toán học / thống kê phức tạp (có thể tìm thấy ở nhiều nơi khác) mà thay vào đó cung cấp một cách tiếp cận thực hành cho thấy cách thực sự sử dụng nó trên dữ liệu.
nico

1

Trong PCA, bạn muốn mô tả dữ liệu theo ít biến hơn. Bạn có thể nhận được cùng một thông tin trong ít biến hơn so với tất cả các biến. Ví dụ, số giờ học và điểm kiểm tra có thể tương quan và chúng tôi không phải bao gồm cả hai.

Trong ví dụ của bạn, giả sử mục tiêu của bạn là đo lường mức độ "tốt" của một học sinh / người. Nhìn vào tất cả các biến này, có thể khó hiểu để xem làm thế nào để làm điều này. PCA cho phép chúng tôi thấy rõ học sinh nào tốt / xấu.

Nếu thành phần chính đầu tiên giải thích hầu hết các biến thể của dữ liệu, thì đây là tất cả những gì chúng ta cần. Bạn sẽ tìm thấy mối tương quan giữa thành phần này và tất cả các biến. Tương quan "lớn" biểu thị các biến quan trọng. Ví dụ, thành phần đầu tiên có thể tương quan mạnh mẽ với số giờ nghiên cứu và điểm kiểm tra. Vì vậy, giá trị cao của thành phần đầu tiên cho thấy giá trị cao về thời gian nghiên cứu và điểm kiểm tra.

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.