Reputation: 1246
I am trying to run the full SVD of a large (120k x 600k) and sparse (0,1% of non-null values) matrix M. Due to memory limitation all my previous attempts failed (with SVDLIBC, Octave, and R) and I am (almost) resigned to exploring other approaches to my problem (LSA).
However, at the moment, I am only interested in the eigenvalues of the diagonal matrix S and not in the left/right singular vectors (matrices U and V).
Is there a way to compute those singular values without storing in memory the dense matrix M and/or the singular vector matrices U and V?
Any help will be greatly appreciated.
[EDIT] My server configuration: 3,5GHz/3,9GHz (6 cores / 12 threads) 128GB of RAM
Upvotes: 2
Views: 1685
Reputation: 11
How comfortable are you with Fortran? I think you should be able to complete the computations using prebuilt packages available here and/or here. Also, if you're open to C++ and a decomposition using randomized and re-orthonormalized matrices, you can try the code at the google code project called redsvd. (I can't post the link because I don't have the requisite reputation for three links, but you can search for redsvd and find it readily.)
Upvotes: 1
Reputation: 879
Looking for the meaning of that values (elements of matrix S from a SVD decomposition) in wikipedia we get:
The non-zero singular values of M (found on the diagonal entries of Σ) are the square roots of the non-zero eigenvalues of both M*M and MM*
So you can look for the eigenvalues of the matrix A*A' (120k x 120k) without explicitly build the matrix, of course.
By the way, I dont think you are interested in ALL the eigenvalues (or singular values) for a matrix with such a dimensions. I do not think that any algorithm will give enough accurate results.
Upvotes: 1