Có một thuật toán SVD rút gọn để tính toán các giá trị số một tại một thời điểm không?
Vấn đề của tôi: Tôi muốn tính các giá trị số ít đầu tiên (và các vectơ số ít) của một ma trận dày đặc M , nhưng tôi không biết giá trị thích hợp của k sẽ là gì. M là lớn, vì vậy, vì lý do hiệu quả, tôi thà không đánh giá toàn bộ SVD chỉ để cắt bớt các SV nhỏ nhất sau đó.
Lý tưởng nhất, sẽ có một cách để tính toán các giá trị số ít serially, từ lớn nhất ( σ 1 ) đến nhỏ ( σ n ). Bằng cách đó, tôi chỉ đơn giản là có thể ngăn chặn sự tính toán sau khi tính toán k thứ giá trị đơn lẻ nếu σ k / σ 1 giảm xuống dưới một số ngưỡng.
Có một thuật toán như vậy tồn tại (tốt nhất là với một triển khai Python)? Trong lúc loay hoay, tôi chỉ tìm thấy các hàm SVD bị cắt ngắn lấy k làm tham số, do đó buộc bạn phải đoán nó là tiên nghiệm.