The idea is this: after k iterations, you have a k-by-k tri-diagonal matrix, the eigenvalues of *this* are *an approximation* to the top k eigenvalues of A*A'. The largest of these k will have the least error, the next will have more, and so on down the line. I've typically assumed that the bottom 1/3rd or so of the k are not going to be very accurate, but it depends on the spectrum of eigenvalues of A*A', sometimes all but the last few are very accurately computed (but sometimes it's even worse: if the spectrum is very flat, the mixing between eigenvectors can be near complete)
But you don't need a formula: look at EigenVerificationJob for the way to measure your accuracy, you can just run this on your data after you've extracted out your first k singular vector/value pairs, and see how far into this list you want to keep. The measurement I use is "how close to an eigenvector is this vector?". I.e. how big is 1 - (v/|v|) . ((AA'v)/|AA'v|) ? -jake On Sun, Nov 6, 2011 at 3:59 PM, Lance Norskog <[email protected]> wrote: > Is there a formula (somewhere easy to find) for "slop" and "accurate"? > > On Sun, Nov 6, 2011 at 3:57 PM, Ted Dunning <[email protected]> wrote: > > > Almost exactly. If you stop at k iterations, you don't get the top k > > eigenvalues precisely. You need some extra slop to make sure your top > > eigenvalues are accurate. > > > > On Sun, Nov 6, 2011 at 3:46 PM, Danny Bickson <[email protected] > > >wrote: > > > > > Exactly, in each iteration you extract one more eigenvalue from largest > > to > > > smallest. If you run more iterations then the matrix rank then you get > > > again all eigenvalues. In that case you may encounter each eigenvalue a > > few > > > times. > > > > > > On Sun, Nov 6, 2011 at 6:42 PM, Sean Owen <[email protected]> wrote: > > > > > > > True though I thought it was intended to run through all m steps - is > > it > > > > simply that you stop after some number k and that still leads you to > > > > compute the k largest eigenvectors of the original? > > > > On Nov 6, 2011 11:36 PM, "Danny Bickson" <[email protected]> > > > wrote: > > > > > > > > > To be exact, the size of the tridiagonal matrix > > > > > is number of iterations + 1. See description of the matrix T_mm > > > > > in Wikipedia: http://en.wikipedia.org/wiki/Lanczos_algorithm > > > > > > > > > > Best, > > > > > > > > > > DB > > > > > > > > > > On Sun, Nov 6, 2011 at 6:30 PM, Sean Owen <[email protected]> > wrote: > > > > > > > > > > > Oh do you only need the top k x k bit of the tridiagonal to find > > the > > > > > > top k eigenvalues? > > > > > > > > > > > > I really don't want to write a QR decomposer, phew. > > > > > > > > > > > > On Sun, Nov 6, 2011 at 11:26 PM, Ted Dunning < > > [email protected]> > > > > > > wrote: > > > > > > > The tridiagonal is much smaller than you would need if you > wanted > > > all > > > > > the > > > > > > > eigenvalues. Since you only want a small number, you only > have a > > > > > > > tri-diagonal matrix that is some multiple of that size. > > In-memory > > > > > > > decomposition makes total sense. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > Lance Norskog > [email protected] >
