On Thu, Jul 18, 2013 at 12:23 AM, Dmitriy Lyubimov <[email protected]>wrote:

> You are at HEAD of the trunk?
>
> Ok i will tinker a little more. But i am pretty sure different results are
> produced for the same input if i just flip pivoted flag. I can  add a java
> version of the failing test as well if it is easier.
>

I have a java version.  Still walking through your steps to see what is
happening.

Having another java version is not a bad thing.


> I also noticed that R version is more accurate in detecting non positive
> definite situations while Mahout version sometimes would accept it and
> produce what seems like a nonsense.
>

Hmm... were these marginal situations?  Or is the test in Mahout's version
just stupid?


> oh well. it seems to be working for me in my Bagel-based ALS-WR stuff for
> now if i accurately assert valid input and don't use pivoted=true in
> constructor.
>

OK.


> Also, there seems to be no benefit in building classic thin QR
> implementation then? I suspect  A'A step could make this route  more
> expensive than a dedicated QR method, but i am not sure.
>

Correct.

But I am not entirely clear how good the numerical properties are.  It
would be good to have somebody at least measure this.

Not constructing Q except on the fly as it is needed is very nice.


>
>
> On Wed, Jul 17, 2013 at 3:59 PM, Ted Dunning <[email protected]>
> wrote:
>
> > My time budget for this problem for today is now exhausted.
> >
> > What I have determined so far:
> >
> > 1) CholeskyDecomposition produces correctly triangular matrices in your
> > example (with or without pivoting)
> >
> > 2) multiplication of these matrices reproduces the input as expected
> (with
> > or without pivoting)
> >
> > 3) I am not looking clearly enough at the test of your example to
> > understand the correct behavior.
> >
> > My route from this point is to start with Cholesky as a shortcut for QR
> > decomposition via the identity:
> >
> >      A = QR
> >      (QR)' (QR) = A' A = R' (Q' Q) R = R' R = L L'
> >
> > Thus A (L')^-1 = Q
> >
> > I will be checking that Q is produced and is orthonormal as expected.
> >
> > I begin to think that the overall problem is a misunderstanding of the
> API
> > rather than a functional error.  That should be cured with better
> > documentation, but it isn't clear that this will be easier than a code
> bug.
> >
> >
> >
> >
> > On Wed, Jul 17, 2013 at 3:13 PM, Dmitriy Lyubimov <[email protected]>
> > wrote:
> >
> > > sorry, i mean ch.solveRight(eye(4)) fails with AOOB
> > >
> > >
> > > On Wed, Jul 17, 2013 at 3:11 PM, Dmitriy Lyubimov <[email protected]>
> > > wrote:
> > >
> > > > if you have scala plugin installed in idea, i have this scala DSL
> > module
> > > > added to mahout on this branch
> > > > https://github.com/dlyubimov/mahout-commits/tree/dev-0.9.x-scala
> > > >
> > > >
> > > > file
> > >
> >
> /home/dmitriy/projects/asf/mahout-commits/math-scala/src/test/scala/mahout/math/MatrixOpsTest.scala
> > > >
> > > > this test fails if used with chol(a, true) or if
> rightMultiply(eye(4)):
> > > >
> > > >   test("chol") {
> > > >
> > > >     // try to solve Ax=b with cholesky:
> > > >     // this requires
> > > >     // (LL')x = B
> > > >     // L'x= (L^-1)B
> > > >     // x=(L'^-1)(L^-1)B
> > > >
> > > >     val a = dense((1, 2, 3), (2, 3, 4), (3, 4, 5.5))
> > > >
> > > >     // make sure it is symmetric for a valid solution
> > > >     a := a.t %*% a
> > > >
> > > >     printf("A= \n%s\n", a)
> > > >
> > > >     val b = dense((9, 8, 7)).t
> > > >
> > > >     printf("b = \n%s\n", b)
> > > >
> > > >     // fails if chol(a,true)
> > > >     val ch = chol(a)
> > > >
> > > >     printf("L = \n%s\n", ch.getL)
> > > >
> > > >     printf("(L^-1)b =\n%s\n", ch.solveLeft(b))
> > > >
> > > >     val x = ch.solveRight(eye(3)) %*% ch.solveLeft(b)
> > > >
> > > >     printf("x = \n%s\n", x.toString)
> > > >
> > > >     val axmb = (a %*% x) - b
> > > >
> > > >     printf("AX - B = \n%s\n", axmb.toString)
> > > >
> > > >     assert(axmb.norm < 1e-10)
> > > >
> > > >   }
> > > >
> > > >
> > > >
> > > >
> > > > On Wed, Jul 17, 2013 at 2:28 PM, Ted Dunning <[email protected]
> > > >wrote:
> > > >
> > > >> These problems are very strange.
> > > >>
> > > >> I am now looking at the tests for Cholesky and it seems that they
> > cover
> > > >> all
> > > >> of the sorts of things that you are talking about.
> > > >>
> > > >> I can fix the size compatibility test and will add a test that
> > > implements
> > > >> your other issue to see if that helps me understand what is
> happening.
> > > >>
> > > >>
> > > >> On Wed, Jul 17, 2013 at 1:02 PM, Dmitriy Lyubimov <
> [email protected]>
> > > >> wrote:
> > > >>
> > > >> > btw, another nitpicking, solveRight(eye(n) ) and solveLeft() do
> not
> > > >> check
> > > >> > for cardinality of argument, throwing ArrayOutOfBounds. yes the
> > burden
> > > >> of
> > > >> > dumbness is on the user but the burden of explanation is on
> > > >> implementation
> > > >> > :)
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
>

Reply via email to