Thuật toán PCA nhanh nhất cho dữ liệu chiều cao


11

Tôi muốn thực hiện PCA trên bộ dữ liệu bao gồm khoảng 40 000 mẫu, mỗi mẫu hiển thị khoảng 10 000 tính năng.

Sử dụng chức năng Matlab Princeomp luôn mất hơn nửa giờ mà tại đó tôi giết quá trình. Tôi muốn tìm một triển khai / thuật toán chạy trong chưa đầy 10 phút. Điều gì sẽ là thuật toán nhanh nhất? Sẽ mất bao lâu cho một lõi kép i7 / Ram 4GB?


Vâng, bạn đúng, tôi nên chính xác hơn. Phải mất hơn nửa giờ, sau đó tôi quyết định giết quá trình. Tôi phải làm điều này ít nhất mười lần, làm điều đó thật tuyệt khi có một cái gì đó hoạt động trong vòng chưa đầy 10 phút
êm dịu

Làm thế nào thưa thớt là ma trận của bạn?
Arnold Neumaier

Tỷ lệ số không trong ma trận là trên 80%
êm dịu

Kiểm tra kernal-PCA cũng.
meawoppl

Câu trả lời:


11

Trước hết, bạn nên xác định xem bạn muốn tất cả các thành phần hoặc những thành phần quan trọng nhất?

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A

AA

C


2

Tôi đoán bạn chỉ cần một vài (hoặc vài trăm) cặp giá trị / cặp vectơ trội. Sau đó, tốt nhất là sử dụng một phương pháp lặp, sẽ nhanh hơn nhiều và tiêu thụ ít bộ nhớ hơn.

Trong Matlab, xem

giúp svds


Vâng, có vẻ như các phương pháp lặp lại nhanh hơn nhiều nếu tôi chỉ cần hàng trăm thành phần đầu tiên.
êm dịu

Đối với các svds, tôi đã cố gắng đưa ma trận của mình thành một định dạng thưa thớt và sửa đổi chức năng Princeomp để đặt svd thay vì svd, và thật ngạc nhiên là tôi đã mất nhiều thời gian hơn với ma trận 2000 * 4000 (180 giây thay vì 15 giây ). Kỳ quái ...
êm dịu

1
Không cần phải chuyển sang định dạng thưa thớt. Ngoài ra, bạn cần giảm số lượng vectơ số ít bạn muốn tính toán. Để tính toán svd sôi, svds không phù hợp.
Arnold Neumaier

2
Cũng cần lưu ý cho các chế độ chiếm ưu thế là các phương pháp svd ngẫu nhiên mới hơn, như trong stanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger


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.