Maximum Margin Matrix Factorization

Here you will find MATLAB code for learning Maximum Margin (Minimum Norm) Matrix Factorizations. The following options are supported:
• Minimization of either the trace-norm (aka nuclear-norm, sum-norm) or the max-norm.
• Binary labels with hinge loss.
• Ordinal 'rating' labels, with two hinge-loss variations based on thresholds between rating levels:
1. "Immediate" threshold: hinge penalties on the thresholds immediately bounding the correct rating level interval (bound on the zero-one rating-agreement loss).
2. "All" thresholds: hinge penalties on all thresholds (bound on the absolute rating difference loss).
• Learned thresholds for ordinal ratings, with either a universal set of thresholds for the entire matrix, or separate threshold vectors for each row of the matrix.
There are two ways of solving the associated semi-definite programs.

The routines solveD.m (binary labels) and solveDord.m (ordinal labels) use YALMIP to solve the SDPs inside MATLAB, and return a solution (i.e. learned matrix). To use them, you must install YALMIP, as well as one of its interfaced solvers.

The routines printSDPA.m (binary labels) and printSDPAord.m (ordinal labels) produce a file containing the relevant semi-definite program in standard sparse-SDPA format. You should then solve this problem with an external solver, preferably one specializing in large sparse SDPs, such as CSDP or DSDP. The routines readSDPA.m and readSDPAord.m read the solution produced by the external solver, and extract from it the learned matrix.

UPDATE: The new YALMIP 3 (released October, 2004) handles the SDPs efficiently, and introduces only a small (a few seconds) overhead to the time it takes to solve the problems directly with CSDP or DSDP. Using the YALMIP-based solveD.m and solveDord.m is now the recommended way of solving the SDPs from within MATLAB (instructing YALMIP to use CSDP or DSDP). The routines print/readSDPA/ord are still much faster, but are more cumbersome if all you need is to find a MMMF from within MATLAB (they are useful if you prefer solving the SDP externally, e.g. on another machine or at a later time). Note that YALMIP 2.4 introduces a very significant overhead for these problems---upgrading to YALMIP 3 is highly advisable.

A routine solveP.m that sets up the primal SDP directly, rather then the dual SDP, and uses YALMIP to solve it, is also provided. This approach is much less preferable, and will only work on tiny problems. The routine is provided for reference only.

All of the above routines are also available in a single gziped tar file and in a single ZIP archive.