推荐系统中的矩阵补全算法

数据来源
电影数据
在推荐系统中,评分预测问题是最基本的问题。以用户电影评分为例,也就是这个用户-电影矩阵。

图1中是用户对电影的评分,但评分有缺失,因为用户不可能对所有电影作出评价。那么推荐问题就是给用户合理推荐一个没看过的电影,合理是指,预测用户应该对这部电影评分较高.然后这个问题就变成了矩阵补全,也就是填充表中的问号。
图像数据
图像修复:简单来说就是通过矩阵填补模型将“打码”的图片修复成原来的图片,如下图所示:

图2中,图像包含了很多的噪声,可以通过一些方法,如RPCA将图像进行恢复,或者将一些缺失的地方进行填充。

低秩矩阵分解
矩阵的补全有无数种可能,所以如果不对用户-电影矩阵(记为Y)的性质作出一定假设,那这个恢复问题就不可能完成。所以首先作出的假设是Y是低秩的,如果Y是低秩的,那么Y就能够由两个较小的矩阵线性组合而来。
假设Y矩阵维度,即有部电影和
个用户,P的维度是
,Q的维度是
,k是特征的维度,也就是Y的秩,上式如果画出来就是这样。

这表示了一个电影对应一个k维特征,一个用户对应了k个参数,反映出有用户对电影的K维特征的喜好程度。然后每个评分都可以看做是用户参数和电影特征的点积。试想如果我们得到了P和Q两个矩阵,我们就能对Y矩阵中的缺失值进行预测。以上问题可以用梯度下降来求解,因此我们可以构造误差函数,并能计算偏导。
这个误差函数的意义是对于Y矩阵中存在的值,用P和Q乘积计算出预测值,让它们之间误差最小.当然,还加入了针对P和Q的L2正则项.这个误差函数对P和Q中每一项的偏导如下:
然后迭代求解即可。

协同过滤
这个算法本质上和低秩矩阵分解一样,但它里面的K维特征具有现实意义。一个电影的K维特征,就是它对应于K种电影风格的分量,比如只有两种风格的时候:
设一个电影的k维特征向量为,那么就应该存在一个用户参数向量
。这实际上和矩阵分解里的P和Q意义相同。
但实际情况是,这个电影特征无法得到,还是要通过迭代算出来。针对电影特征和用户参数,对应了两个代价函数。
再分别求导,用梯度下降迭代至收敛即可。

核范数矩阵补全
图像恢复里经常有这种问题,比如图像被随机采样,试图从随机采样的图像恢复出原图。首先它将问题定义为,认为用户-电影矩阵是由一个完全矩阵A下采样而来,而且还加上了噪音L就是那个下采样变换。

然后问题的解就是要求秩最小,如下:
但直接去优化秩太困难了,这是一个NP难问题,但可以通过核范数近似求解,核范数就是矩阵的奇异值之和。

代码
代码生成低秩数据
通过一些参数可以生成相应的低秩数据集,并通过算法将该数据恢复。

参考
[机器学习矩阵分解解析Recommender.Matrix.Factorization - 简书 (jianshu.com)](https://www.jianshu.com/p/2fc8850e4a1c)