The abstract of the extended paper reads:
We address the numerical problem of recovering large matrices of low rank when most of the entries are unknown. We exploit the geometry of the low-rank constraint to recast the problem as an unconstrained optimization problem on a single Grassmann manifold. We then apply second-order Riemannian trust-region methods (RTRMC 2) and Riemannian conjugate gradient methods (RCGMC) to solve it. A preconditioner for the Hessian is introduced that helps control the conditioning of the problem and we detail preconditioned versions of Riemannian optimization algorithms. The cost of each iteration is linear in the number of known entries. The proposed methods are competitive with state-of-the-art algorithms on a wide range of problem instances. In particular, they perform well on rectangular matrices. We further note that second-order and preconditioned methods are well suited to solve badly conditioned matrix completion tasks. |
If this procedure fails (quite probably somewhere in the installrtrmc.m script), then either there is trouble with the C compiler Matlab tries to use, which you can check by typing 'mex -setup' at the Matlab prompt, or the installation script is incompatible with your OS (it was written for Windows users, but has been found to work as is on a MacOS and a Linux computer). If you need help, please feel free to contact us. If you successfully ran installrtrmc.m on your computer, we'd love to know about any, if any, difficulties you may have resolved. |
??? Error using ==> spbuildmatrixthen try to raise the value of lambda (the regularization parameter). This error triggers when the least-squares problem (the computation of WU) does not have a unique solution, so that one of the diagonal blocks of the large matrix A does not have a proper Cholesky factorization.
dpotrf (in spbuildmatrix): a leading minor is not positive definite.
Error in ==> lsqfit>buildmatrix at 132
Achol = spbuildmatrix(problem.mask, U, lambda^2);
Error in ==> lsqfit at 65
compumem.Achol = buildmatrix(problem, U);
Error in ==> rtrmcobjective at 66
[W, compumem] = lsqfit(problem, U, compumem);