Tôi viết code để tính toán Classical Multidimensional Scaling (viết tắt là MDS) của một rất lớn n
bởi n
ma trận, n = 500,000
trong ví dụ của tôi.phương pháp nhanh cho xấp xỉ 3 giá trị riêng và vector riêng cao nhất của một ma trận đối xứng lớn
Trong một bước của MDS, tôi cần tính ba số cao nhất là eigenvalues and their corresponding eigenvectors của n
bởi n
ma trận. Ma trận này được gọi là ma trận B
. Tôi chỉ cần ba đặc tính riêng này và các giá trị riêng. Các phương pháp phổ biến để tính toán các giá trị riêng và các giá trị riêng của một ma trận lớn mất một thời gian dài, và tôi không đòi hỏi một câu trả lời rất chính xác, vì vậy tôi đang tìm kiếm ước tính về các giá trị riêng và giá trị riêng.
Một số thông số:
- Ma trận
B
là symmetric, real, và khá dense - Sự phân hủy eigenvalue của
B
về mặt lý thuyết phải luôn luôn tạo ra các số thực. - Tôi không yêu cầu ước tính chính xác hoàn toàn, chỉ là ước tính nhanh. Tôi cần nó để hoàn thành sau vài giờ nữa.
- tôi viết trong python và C++
Câu hỏi của tôi: Có phương pháp nhanh chóng của ước lượng ba vector riêng cao nhất và giá trị riêng của một B
ma trận lớn như vậy?
Tiến độ của tôi: Tôi đã tìm thấy một số method of approximating the highest eigenvalue of a matrix, nhưng tôi không biết liệu tôi có thể khái quát hóa nó thành ba số cao nhất hay không. Tôi cũng đã tìm thấy this paper written in 1996, nhưng nó là cực kỳ kỹ thuật và khó khăn cho tôi để đọc.
Ma trận có kích thước sẽ yêu cầu nhiều hơn một terabyte dung lượng lưu trữ cho các mục nhập dấu phẩy động 64 bit. Hãy quên đi các thuộc tính riêng - thậm chí làm một phép nhân vectơ đơn vector trông có vẻ đau đớn. –
Nhưng không cần lưu trữ ma trận gốc! Nó được gián tiếp đưa ra trong thuật toán MDS và bạn có thể sử dụng nó để thực hiện phép nhân-vector ma trận mà không cần tính toán ma trận đầu tiên. –
Bạn đã xem MDS gần đúng có nghĩa là cho dữ liệu lớn? Ví dụ. xem http://pike.cs.ucla.edu/~weiwang/paper/CIMCV06.pdf – Gene