Regarding accuracy, you can also compute norm(T- V'*A*V) where T is the tridiagonal matrix, V is a matrix with the intermediate solution vectors v_i , and A is the original matrix you want to approximate. (If A is not symmetric then replace it with A*A')
On Sun, Nov 6, 2011 at 7:19 PM, Jake Mannix <[email protected]> wrote: > 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] > > >
