Does it complete without problems? It may complete without error but
the result may be garbage. The matrix that's inverted is not going to
be singular due to round-off. Even if it's not you may find that the
resulting vectors are infinite or very large. In particular I at least
had to make the singularity threshold a lot larger than
Double.MIN_VALUE in the QR decomposition.

Try some simple dummy data like below, without maybe k=10. If it
completes with error that's a problem!

0,0,1
0,1,4
0,2,3
1,2,3
2,1,4
2,3,3
2,4,2
3,0,5
3,2,2
3,4,3
4,3,5
5,0,2
5,1,4

On Thu, Apr 4, 2013 at 7:05 PM, Koobas <koo...@gmail.com> wrote:
> I took Movie Lens 100K data without ratings and ran non-weighted ALS in
> Matlab.
> I set number of features k=2000, which is larger than the input matrix
> (1000 x 1700).
> I used QR to do the inversion.
> It runs without problems.
> Can you share your data?
>
>
>
> On Thu, Apr 4, 2013 at 1:10 PM, Koobas <koo...@gmail.com> wrote:
>
>> Just to throw another bit.
>> Just like Ted was saying.
>> If you take the largest singular value over the smallest singular value,
>> you get your condition number.
>> If it turns out to be 10^16, then you're loosing all the digits of double
>> precision accuracy,
>> meaning that your solver is nothing more than a random number generator.
>>
>>
>>
>>
>> On Thu, Apr 4, 2013 at 12:21 PM, Dan Filimon 
>> <dangeorge.fili...@gmail.com>wrote:
>>
>>> For what it's worth, here's what I remember from my Numerical Analysis
>>> course.
>>>
>>> The thing we were taught to use to figure out whether the matrix is ill
>>> conditioned is the condition number of a matrix (k(A) = norm(A) *
>>> norm(A^-1)). Here's a nice explanation of it [1].
>>>
>>> Suppose you want to solve Ax = b. How much worse results will you get
>>> using
>>> A if you're not really solving Ax = b but A(x + delta) = b + epsilon (x is
>>> still a solution for Ax = b).
>>> So, by perturbing the b vector by epsilon, how much worse is delta going
>>> to
>>> be? There's a short proof [1, page 4] but the inequality you get is:
>>>
>>> norm(delta) / norm(x) <= k(A) * norm(epsilon) / norm(b)
>>>
>>> The rule of thumb is that if m = log10(k(A)), you lose m digits of
>>> accuracy. So, equivalently, if m' = log2(k(A)) you lose m' bits of
>>> accuracy.
>>> Since floats are 32bits, you can decide that say, at most 2 bits may be
>>> lost, therefore any k(A) > 4 is not acceptable.
>>>
>>> Anyway there are lots of possible norms and you need to look at ways of
>>> actually interpreting the condition number but from what I learned this is
>>> probably the thing you want to be looking at.
>>>
>>> Good luck!
>>>
>>> [1] http://www.math.ufl.edu/~kees/ConditionNumber.pdf
>>> [2] http://www.rejonesconsulting.com/CS210_lect07.pdf
>>>
>>>
>>> On Thu, Apr 4, 2013 at 5:26 PM, Sean Owen <sro...@gmail.com> wrote:
>>>
>>> > I think that's what I'm saying, yes. Small rows X shouldn't become
>>> > large rows of A -- and similarly small changes in X shouldn't mean
>>> > large changes in A. Not quite the same thing but both are relevant. I
>>> > see that this is just the ratio of largest and smallest singular
>>> > values. Is there established procedure for evaluating the
>>> > ill-conditioned-ness of matrices -- like a principled choice of
>>> > threshold above which you say it's ill-conditioned, based on k, etc.?
>>> >
>>> > On Thu, Apr 4, 2013 at 3:19 PM, Koobas <koo...@gmail.com> wrote:
>>> > > So, the problem is that the kxk matrix is ill-conditioned, or is there
>>> > more
>>> > > to it?
>>> > >
>>> >
>>>
>>
>>

Reply via email to