Các thuật toán hiệu quả để tính toán phân rã giá trị số ít (SVD) là gì?


17

Bài viết Wikipedia về phân tích thành phần chính nói rằng

Các thuật toán hiệu quả tồn tại để tính toán SVD của mà không phải tạo ma trận , do đó, tính toán SVD bây giờ là cách tiêu chuẩn để tính toán phân tích thành phần chính từ ma trận dữ liệu, trừ khi chỉ cần một số ít thành phần.XXTX

Ai đó có thể cho tôi biết các thuật toán hiệu quả mà bài báo đang nói đến là gì? Không có tài liệu tham khảo nào được đưa ra (URL hoặc trích dẫn cho một bài viết đề xuất cách tính toán này sẽ rất hay).


4
Một tìm kiếm của Google về thuật toán phân rã giá trị số ít làm tốt công việc làm nổi bật thông tin liên quan.
whuber

1
Đừng quên xóa trung bình trước SVD cho PCA!
Ghi nhớ

Hãy thử Lanczos SVD!
ciri

Câu trả lời:


12

Con ngựa chính đằng sau sự tính toán của SVD là thuật toán QR . Có nói rằng có rất nhiều thuật toán khác nhau để tính toán sự phân hủy giá trị duy nhất của một generic -by- N ma trận A . Một sơ đồ tuyệt vời về vấn đề có sẵn ở đây (từ tài liệu của MKL của Intel ) là:MNMộtnhập mô tả hình ảnh ở đây

Như bạn thấy tùy thuộc vào trường hợp sử dụng của bạn, có các cách tiếp cận khác nhau (các quy ước đặt tên thông thường có thể được tìm thấy ở đây ). Đó là bởi vì, ví dụ, có các hình thức ma trận trong đó việc giảm Householder có thể tốn kém hơn so với xoay vòng Givens (để đặt tên cho hai cách nhận QR "rõ ràng"). Một tài liệu tham khảo tiêu chuẩn về vấn đề này là Tính toán ma trận của Golub và Van Loan (Tôi sẽ đề nghị sử dụng ít nhất là phiên bản thứ 3). Tôi cũng đã tìm thấy. Các phương pháp số của Bjorck cho các ô vuông nhỏ nhất Các vấn đề rất tốt về vấn đề đó; trong khi SVD không phải là trọng tâm chính của cuốn sách, nó giúp bối cảnh hóa việc sử dụng nó.

Nếu tôi phải cho bạn một lời khuyên chung về vấn đề này thì đừng cố gắng viết các thuật toán SVD của riêng bạn trừ khi bạn đã thực hiện thành công một vài lớp về Đại số tuyến tính số và bạn biết bạn đang làm gì. Tôi biết nó nghe có vẻ phản trực giác nhưng thực sự, có vô số thứ có thể sai và bạn kết thúc bằng (tốt nhất) các triển khai phụ tối ưu (nếu không sai). Có một số bộ miễn phí rất tốt về vấn đề này (ví dụ Eigen , ArmadilloTrilinos để kể tên một số.)


Câu hỏi là về việc tính toán SVD của ma trận dữ liệu, chứ không phải ma trận hiệp phương sai của nó (sử dụng ký hiệu của bạn, XA

1
Đã sửa. Phương pháp tiếp cận dựa trên QR (và LQ) được sử dụng trong mọi trường hợp; QR không bị giới hạn trong ma trận vuông. Các thuật toán được liên kết là dành cho ma trận -by- N chung AMNAXTX

2
Đúng, tôi đã sai: QR không bị giới hạn trong ma trận vuông. +1, nhân tiện. Câu hỏi này là một trong những câu hỏi chưa được trả lời cao nhất với thẻ pca , vì vậy thật tuyệt khi thấy nó cuối cùng đã được trả lời.
amip nói phục hồi Monica

Câu trả lời của bạn không đề cập đến một loạt các thuật toán lặp. Đó có phải là mục đích? Ai đó đã hỏi một câu hỏi về thuật toán lặp SVD, xem Những thuật toán nhanh nào tồn tại để tính toán SVD bị cắt ngắn? , và tôi đã đăng một câu trả lời ở đó cố gắng cung cấp một số tổng quan. Có lẽ chúng ta ít nhất nên liên kết chéo các câu trả lời của chúng tôi. Và chắc chắn sẽ rất tuyệt nếu bạn có thể mở rộng tài khoản của mình bằng một số thảo luận về thuật toán QR so với thuật toán lặp.
amip nói phục hồi Monica

Không, đó là tình cờ. Bạn đã trả lời câu hỏi của riêng bạn trong bài viết của bạn mặc dù; SVD bị cắt ngắn về cơ bản là các eigendecysis bị cắt ngắn (xem ví dụ ARPACK ). Có một số khác biệt tốt nhưng chúng vẫn ổn ; một số phần mềm (ví dụ. MATLAB svds) đi xa như chỉ đơn giản là sử dụng chức năng SVD cắt ngắn của họ như là một wrapper cho cắt ngắn eigendecomposition (của họ eigs) thói quen.
usεr11852 nói Phục hồi Monic
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.