Hiểu cách PCA phân phối hoạt động


7

Là một phần của dự án phân tích dữ liệu lớn, tôi đang làm việc,

Tôi cần thực hiện PCA trên một số dữ liệu, sử dụng hệ thống điện toán đám mây.

Trong trường hợp của tôi, tôi đang sử dụng Amazon EMR cho công việc và đặc biệt là Spark.

Bỏ câu hỏi "Làm thế nào để thực hiện PCA trong tia lửa", tôi muốn hiểu về cách mọi thứ hoạt động đằng sau hậu trường khi tính toán PC trên kiến ​​trúc dựa trên đám mây.

Ví dụ: một trong những phương tiện để xác định PC của dữ liệu là tính toán ma trận hiệp phương sai của các tính năng.

Ví dụ, khi sử dụng kiến ​​trúc dựa trên HDFS, dữ liệu gốc được phân phối trên nhiều nút, tôi đoán mỗi nút sẽ nhận các bản ghi X.

Làm thế nào sau đó ma trận hiệp phương sai được tính trong trường hợp như vậy khi mỗi nút chỉ có một phần dữ liệu?

Đây chỉ là một ví dụ. Tôi đang cố gắng tìm một số giấy tờ hoặc tài liệu giải thích tất cả những điều xấu xa này, và không thể tìm thấy bất cứ điều gì đủ tốt cho nhu cầu của tôi (có thể là kỹ năng google kém của tôi).

Vì vậy, về cơ bản tôi có thể tóm tắt (các) câu hỏi của mình \ cần phải như sau:

1. Cách PCA phân phối trên kiến ​​trúc đám mây hoạt động

Tốt nhất là một số bài báo học thuật hoặc các loại giải thích khác cũng chứa một số hình ảnh

2. Spark triển khai D-PCA

Làm thế nào để Spark làm điều đó? Họ có bất kỳ "khuynh hướng" nào trong kiến ​​trúc của mình để thực hiện nó hiệu quả hơn không, hoặc việc sử dụng các đối tượng RDD góp phần cải thiện hiệu quả như thế nào? Vân vân.

Một bài thuyết trình thậm chí là một bài học trực tuyến về nó sẽ là tuyệt vời.

Cảm ơn trước cho bất cứ ai có thể cung cấp một số tài liệu đọc.

Câu trả lời:


4

Câu hỏi liên quan nhiều hơn đến kiến ​​trúc Apache Spark và bản đồ giảm; có nhiều hơn một câu hỏi ở đây, tuy nhiên, phần trung tâm của câu hỏi của bạn có lẽ là

Ví dụ: một trong những phương tiện để xác định PC của dữ liệu là tính toán ma trận hiệp phương sai của các tính năng.

Ví dụ, khi sử dụng kiến ​​trúc dựa trên HDFS, dữ liệu gốc được phân phối trên nhiều nút, tôi đoán mỗi nút sẽ nhận các bản ghi X.

Làm thế nào sau đó ma trận hiệp phương sai được tính trong trường hợp như vậy khi mỗi nút chỉ có một phần dữ liệu?

Tôi sẽ giải quyết điều đó, hy vọng sẽ giải quyết vấn đề ở một mức độ nào đó.

Chúng ta hãy xem xét một hình thức tính toán hiệp phương sai phổ biến, 1nΣ(x-x¯)(y-y¯)

Điều này đòi hỏi bạn phải tính toán như sau:

  • x¯
  • y¯
  • x-x¯y-y¯
  • Nhân lên (x-x¯)(y-y¯)

một cách phân tán. Phần còn lại rất đơn giản, giả sử tôi có 100 điểm datat (x, y), được phân phối cho 10 nhân viên Apache Spark, mỗi điểm nhận được 10 điểm dữ liệu.

Tính toán x¯y¯: Mỗi công nhân sẽ thêm x/y giá trị của 10 điểm dữ liệu và chia giá trị này cho 10 để đạt đến giá trị trung bình một phần của x/y(đây là chức năng bản đồ). Sau đó, chủ nhân Spark sẽ chạy bước tổng hợp (trong Spark DAG của công việc) trong đó phương tiện một phần của tất cả 10 công nhân được lấy và thêm lại, sau đó chia cho 10 để đến trận chung kếtx¯ hoặc là y¯ (tổng hợp / giảm hoạt động)

Tính toán (x-x¯)(y-y¯): Tương tự, phân phối các điểm dữ liệu, phát sóng x¯y¯ giá trị cho tất cả các công nhân và tính toán một phần (x-x¯)(y-y¯), lại chạy tập hợp để có được Σ(x-x¯)(y-y¯)

Phương pháp trên được sử dụng để tính toán phân tán, bạn sẽ nhận được hiệp phương sai, đối với dữ liệu đa chiều, bạn có thể lấy ma trận hiệp phương sai.

Vấn đề là phân phối tính toán cho các giai đoạn có thể được phân phối và sau đó tập trung vào các giai đoạn tính toán không thể phân phối. Đó là một trong những khía cạnh quan trọng của kiến ​​trúc Spark.

Hi vọng điêu nay co ich.


Điều này không giúp được gì nhiều. Tôi hơi bối rối với định nghĩa của bạn, bạn có thể vui lòng giải thích xBar, yBarchính xác những gì tượng trưng cho? và cũng là công thức bạn đã sử dụng không quen thuộc với tôi (có thể tôi đang đọc sai). Tôi quen thuộc hơn với các tính toán hiệp phương sai như được mô tả ở đây: onlinecifts.science.psu.edu/stat414/node/109
Adiel

@Adiel, nó thực sự giống nhau, tham khảo: en.wikipedia.org/wiki/Covariance 'Biến kín đáo'. xBar và yBar là phương tiện của x và y, tôi không quen với việc viết phương trình trong bài viết, vì vậy các công thức có vẻ hơi mệt mỏi.
Ironluca

2

Nếu bạn muốn xem cách Spark hiện nó, nhìn vào org.apache.spark.mllib.linalg.distributed.RowMatrixlớp, bắt đầu với các computePrincipalComponentsAndExplainedVariancephương pháp .

Các phần của nó được thực sự phân phối là trong các computeGramianMatrixphương pháp , mà tích lũy mỗi vector đầu vào thành một ma trận Gramian sử dụng BLAS.spr(1.0, v, U.data)trong đó v là một vector đầu vào, và U đại diện cho một phần hình tam giác trên của ma trận. Điều này có thể được chạy đồng thời trên nhiều người thực thi và sau đó các ma trận tổng hợp một phần có thể được kết hợp bằng cách thêm các ma trận lại với nhau.

Khi tất cả các vectơ đã được tổng hợp thành ma trận Gramian, nó chuyển đổi ma trận thành ma trận hiệp phương sai, sau đó sử dụng SVD để tạo ra ma trận / vectơ PCA. Tuy nhiên giai đoạn cuối cùng này không được phân phố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.