Getting the SVD But Setting a Threshold to Improve Computation

3 views (last 30 days)
Hi,
I am currently trying to take the svd(X), where X is a 400,000 x 75 matrix. Of course this leads to memory error.
My question is that is it possible to do an estimate of [u,s,v] such as in this case:
"...there are cases where e.g. A is a full rank square matrix, hence it has no zero singular values, however a threshold is chosen and all terms in the sum A=∑ri=1σiuivTi corresponding to singular values less than this threshold are discarded. In that way, A is approximated by a simpler matrix à , whose behavior is, for practical purposes, essentially the same as that of the original matrix."
Can I get à in this situation for myself using MATLAB commands? If so, how can I do this.
  2 Comments
Image Analyst
Image Analyst on 24 Aug 2015
Do you need to use all that data? I'd bet you'd get the same answer if you used just a small subset of that.
Walter Roberson
Walter Roberson on 24 Aug 2015
Is the formula A = ∑r(i) = 1 *σ(i) * u(i) * v * T(i)
The spacing is not completely clear. Also the reason for multiplying by 1 is not clear.

Sign in to comment.

Answers (1)

Matt J
Matt J on 24 Aug 2015
Edited: Matt J on 24 Aug 2015
You could use the pca command if you have the appropriate Toolbox, however, your out-of-memory problems should be addressable using svd()'s economy mode, e.g.,
>> A=rand(4e5,75);
>> [U,S,V]=svd(A,0);
>> whos U S V
Name Size Bytes Class Attributes
S 75x75 45000 double
U 400000x75 240000000 double
V 75x75 45000 double

Categories

Find more on Eigenvalues in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!