Practical Low-Rank Matrix Factorization