Hmm...

The LSMRTest code works.  So it seems like there is a mismatch somewhere.

In debugging that test, it seems that the loop exits via ITERATION_LIMIT
which avoids the problematic if statement.  This is likely due to the fact
that the test is solving a Hilbert matrix which has exceedingly bad
condition number.

I will put in a random matrix test and see what happens.  I suspect that
changing line 457 to this:

      if (stop != StopCode.CONTINUE && stop.ordinal() != istop) {

will solve your problem.

This code is translated from the reference implementation for LSMR.  That
is the source of some of these strange constructs.

On Thu, Jan 10, 2013 at 5:04 PM, James Frohnhofer <[email protected]> wrote:

> Hi --
>
> I'm fairly new to Mahout, and the LSRM solver seemed like a quick and
> robust way to solve a linear regression problem.
>
> However whenever I call solve, I get an IllegalStateException, at LMSR.java
> line 457, with the error "bad code math 2 vs 2" or "bad code match 1 vs 1".
>  Looking at the code, it doesn't appear to me that the StopCode could ever
> be set without throwing this exception.
>
> I may be missing something because it's not clear to me at all, the point
> of setting the StopCode, manually setting the istop flag to a the ordinal
> value of the StopCode enum and then throwing an exception if they are the
> same.
>
> Also the documentation talks about the regularization parameter lanbda, but
> the setLambda method is private.
>
> Any help or guidance would be appreciated.
>
> Thanks,
>
> Jim
>

Reply via email to