mahout-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ted Dunning <ted.dunn...@gmail.com>
Subject Re: SVD with PlustAnonUserDataModel
Date Thu, 03 Mar 2011 00:32:27 GMT
Uh... it has been some time since I read Funk's blog entry on this nor have
I read the code you reference, but isn't it typical for such incremental
solvers to put the singular values with U or V?  Suppose that we really get
matrices X and Y instead of the orthonormal matrices U and V such that

    (U  d1)  (V d2)^T  = X Y^T

where d = d1 d2 is the diagonal matrix with the singular values.  To get d
back, we just do this:

    d1 = sqrt(X^T X)
    d2 = sqrt(Y^T Y)
    d = d1  d2

Similarly, if we really do get a singular decomposition, we can use the
original matrix to compute the singular values:

    A  =  U d V^T

    d  = U^T A V


On Wed, Mar 2, 2011 at 3:52 PM, Chris Schilling <chris@cellixis.com> wrote:

> Hey Ted,
>
> I finally had time to get back to this.  This is definitely bringing back
> some memories :)  I hope you have room for (hopefully) one more question.
>
> So, I have been studying Simon Funk's incremental SVD approach (this is
> implemented in ExpectationMaximizationSVDFactorizer). In this method, the
> singular values are folded in to the left and right matrices:
>
> A = U * sqrt(d) * sqrt(d) * VT = U' * V'T
>
> So, in this case, inverse(V'T) = V * d^-1/2
>
> Whatever the case, my question is the same:  given U' and V'T, I am failing
> to see an elegant (i.e. trivial) solution to extracting the singular values.
>  I was hoping you could help me out.
>
> Thanks again,
> Chris
>
> On Feb 25, 2011, at 2:29 PM, Ted Dunning wrote:
>
> Yes.  That affects things.  The key is that inverse(diag(d_1 ... d_n)) =
> diag(1/d_1 ... 1/d_n)
>
> that means that inverse(D V') = V inverse(D).  If you have X' = DV' you
> need to compute inverse(X') = X D^-2
>
> On Fri, Feb 25, 2011 at 1:25 PM, Chris Schilling <chris@cellixis.com>wrote:
>
>> One more linear algebra question.  So, does this still hold when the
>> diag(d) matrix is multiplied through the right hand side?  Is that an affect
>> I should worry about when trying to compute u?
>
>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message