Hey Jonathan, How's the progress on MAHOUT-672? 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 <[email protected]>wrote: > I'm working on the LinearOperator stuff for MAHOUT-672 and have gotten to > the point when I'm modifying the new LanczosSolver as implemented in the > MAHOUT-319 patch applied to Jake's github repo. > > One quick question: on lines 165-167 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 non-symmetric 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 >
