2016-10-26 48 views
6

Spark hiện có hai thư viện học máy - Spark MLlib và Spark ML. Họ làm phần nào chồng lên nhau trong những gì được thực hiện, nhưng như tôi hiểu (như một người mới cho toàn bộ hệ sinh thái Spark) Spark ML là con đường để đi và MLlib vẫn còn chủ yếu là cho khả năng tương thích ngược.PCA trong Spark MLlib và Spark ML

Câu hỏi của tôi rất cụ thể và có liên quan đến PCA. Trong thực hiện MLlib có vẻ như có giới hạn về số lượng cột

spark.mllib hỗ trợ PCA cho ma trận cao và gầy được lưu trữ ở định dạng hàng và bất kỳ Vectors nào.

Ngoài ra, nếu bạn nhìn vào các ví dụ mã Java cũng có này

Số cột này phải là nhỏ, ví dụ như, ít hơn 1000.

Mặt khác , nếu bạn xem tài liệu ML, không có giới hạn nào được đề cập.

Vì vậy, câu hỏi của tôi là - hiện giới hạn này cũng tồn tại trong Spark ML? Và nếu có, tại sao giới hạn và có bất kỳ giải pháp nào để có thể sử dụng việc triển khai này ngay cả khi số lượng cột lớn không?

+0

Câu hỏi thú vị. Tôi đã thấy nhiều mâu thuẫn khác trong tài liệu mllib. – Rob

Trả lời

1

PCA bao gồm việc tìm một tập hợp các biến ngẫu nhiên độc lập mà bạn có thể đại diện cho dữ liệu của mình, được sắp xếp theo thứ tự giảm tương ứng với số lượng phương sai mà chúng giữ lại.

Các biến này có thể được tìm thấy bằng cách chiếu các điểm dữ liệu của bạn lên một không gian con trực giao cụ thể. Nếu ma trận dữ liệu (trung bình) của bạn là X, không gian con này bao gồm các số liệu riêng của X^T X.

Khi X là lớn, nói về kích thước n x d, bạn có thể tính toán X^TX bằng cách tính toán các sản phẩm ngoài của mỗi hàng của ma trận bằng cách riêng của mình, sau đó thêm tất cả các kết quả lên . Tất nhiên, điều này hoàn toàn phù hợp với quy trình giảm bản đồ đơn giản nếu d là nhỏ, dù số lượng lớn n là bao nhiêu. Đó là bởi vì sản phẩm bên ngoài của mỗi hàng tự nó là một ma trận d x d, sẽ phải được thao tác trong bộ nhớ chính bởi mỗi nhân viên. Đó là lý do tại sao bạn có thể gặp rắc rối khi xử lý nhiều cột.

Nếu số lượng cột lớn (và số hàng không nhiều như vậy), bạn thực sự có thể tính PCA. Chỉ cần tính toán SVD của ma trận dữ liệu transposed (trung bình) của bạn và nhân nó với các eigenvectors kết quả và nghịch đảo của ma trận đường chéo của các giá trị riêng. Có không gian con trực giao của bạn.

Tóm lại: nếu việc triển khai spark.ml tuân theo phương pháp tiếp cận đầu tiên mỗi lần, thì giới hạn phải giống nhau. Nếu họ kiểm tra kích thước của tập dữ liệu đầu vào để quyết định xem họ có nên đi theo phương pháp thứ hai hay không, thì bạn sẽ không gặp vấn đề gì khi xử lý số lượng lớn cột nếu số lượng hàng nhỏ.

Bất kể điều đó, giới hạn được áp đặt bởi số lượng bộ nhớ mà công nhân của bạn có, vì vậy có lẽ họ cho phép người dùng tự nhấn trần, thay vì đề xuất một giới hạn có thể không áp dụng cho một số người. Đó có thể là lý do tại sao họ quyết định không đề cập đến giới hạn trong các tài liệu mới.

Cập nhật: Mã nguồn cho thấy rằng họ thực hiện phương pháp tiếp cận đầu tiên mọi lúc, bất kể thứ nguyên của đầu vào. Giới hạn thực tế là 65535 và 10.000 sẽ phát hành cảnh báo.

+0

Cảm ơn câu trả lời của bạn, xin lỗi vì phản hồi muộn của tôi. Vì vậy, cuối cùng, bạn có thể biết cách tiếp cận họ đã thực hiện, cả hai cách tiếp cận, hoặc chỉ có một đầu tiên (không giới hạn tồn tại)? Và tại sao họ lấy số lượng 1.000 cột, giống như 64MB ((8 * 10^3)^2, 8 byte cho mỗi giá trị gấp đôi) của dữ liệu, nếu tôi không sai, nó phải phù hợp với bộ nhớ của bất kỳ người thực thi nào? – Marko

+1

Nhìn vào mã là khai sáng. Trong MLLib, chúng tính toán X^T X bằng cách sử dụng phép toán BLAS cho sản phẩm ngoài của các hàng, tức là cách tiếp cận đầu tiên. Tôi thấy không có dấu hiệu cho thấy họ làm một kiểm tra để áp dụng cách tiếp cận thứ hai. Tuy nhiên, họ kiểm tra một vài điều: đầu tiên, số lượng cột nhỏ hơn 65536, chỉ để có thể tính toán phân bổ cần thiết cho nửa trên của ma trận (đối xứng). Thứ hai, số lượng cột nhỏ hơn 10.000. Nếu không, họ chỉ đưa ra cảnh báo liên quan đến bộ nhớ cần thiết. – broncoAbierto

+1

Về lý do tại sao họ chọn đặt giới hạn được đề xuất là 1000 trong tài liệu, có thể họ chỉ chọn số lượng hợp lý hoặc ít hơn mà không ai có thể gặp phải bất kỳ sự cố nào, không có quá nhiều sự khắt khe. Mặc dù bất kỳ công nhân nào cũng có thể lấy một ma trận có kích thước như vậy ngày nay, nó thường được khuyên nên tránh các nhiệm vụ bản đồ quá lớn, vì vậy có lẽ đó là lý do tại sao họ chọn con số đó. – broncoAbierto

Các vấn đề liên quan