It's coming along. I have the LinearOperator stuff done, and refactored the
Matrix class/interface hierarchy to inherit/implement from LinearOperator. I
also have refactored Lanczos solver to take a LinearOperator instead of a
VectorIterable. I made a small change to the Lanczos solver API for this:
the isSymmetric flag is now on the Lanczos state instead of the solver, and
the state does the sqrt operation to rescale the singular values.
Still to do:
1. get mahoutmath back into a stable state (compile cleanly and make
whatever test changes are necessary for this)
2. refactor DisributedRowMatrix and DistributedLanczos solver to use
LinearOperators
3. refactor my CG solver and Ted's LSMR solver to use LinearOperators
I didn't get much opportunity to work on it this weekend because my wife was
monopolizing the computer for a paper she has due tomorrow. I'm hoping to
get at least #1 done tomorrow, at which point I'll push it out to github for
you guys to check out.
Jon
On Sun, May 1, 2011 at 9:01 PM, Jake Mannix <jake.mannix@gmail.com> wrote:
> Hey Jonathan,
>
> How's the progress on MAHOUT672? Do you have your LinearOperator stuff
> on Github or anywhere else? If not, I can pick up and run with it.
>
> jake
>
> On Thu, Apr 28, 2011 at 12:32 AM, Jonathan Traupman
> <jon.traupman@gmail.com>wrote:
>
> > I'm working on the LinearOperator stuff for MAHOUT672 and have gotten to
> > the point when I'm modifying the new LanczosSolver as implemented in the
> > MAHOUT319 patch applied to Jake's github repo.
> >
> > One quick question: on lines 165167 of LanczosSolver.java we have the
> > lines:
> >
> > if (isSymmetric) {
> > e = Math.sqrt(e);
> > }
> >
> > Unless I'm misunderstanding something, isn't this backwards? My
> > understanding is that Lanczos is an eigendecomposition algorithm, so for
> a
> > symmetric A, it's going to compute eigenvector matrix U and diagonal
> > eigenvalue matrix S such that A ~= USU'. To use it to compute the SVD,
> you
> > use the fact that for nonsymmetric A = USV', we have A'A = V(S^2)V', so
> by
> > taking the eigendecomposition of A'A, you get the right singular vectors
> as
> > the eigenvectors and the singular values as the sqrt of the eigenvalues.
> > So,
> > shouldn't these lines be:
> >
> > if (!isSymmetric) {
> > e = Math.sqrt(e);
> > }
> >
> > Jon
> >
>
