在推荐系统中,一个比较核心的问题是,如何根据User和Item组成的评分矩阵(如果一个user对一个item没有历史行为,则该值未知),对矩阵中的未知评分做出预测。矩阵分解便是用来解决该问题的。

1. SVD奇异值分解

传统的SVD用于推荐存在一个很大的问题,SVG要求矩阵是稠密的(矩阵中所有位置的值都是已知的),所以不能直接用于我们求解未知评分。

传统SVD采用的方法是对评分矩阵中的缺失值进行简单的补全,比如用全局平均值或者用用户物品平均值补全,得到补全后的矩阵。接着可以用SVD分解并降维 **[最后如何得到未知评分的预测?]**。

2. FunkSVD

FunkSVD是在传统SVD面临计算效率问题时提出来的,既然将一个矩阵做SVD分解成3个矩阵很耗时,同时还面临稀疏的问题,那么我们能不能避开稀疏问题,同时只分解成两个矩阵呢?可以的,使用FunkSVD。

FunkSVD将矩阵M(m*n)分解为P(m*k)和Q(k*n)。使用线性回归的思想,我们的目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,也就是说,可以用均方差作为损失函数,来寻找最终的P和Q。