1. 矩阵分解做协同过滤是广泛使用的方法
2. 遇到问题:
在推荐系统中,常常遇到的问题是很多用户和物品组成的数据集,但是大多数用户都很少对物品进行评分。
3.目标:
对于每个用户,我们的目标是希望较准确的预测出用户对未评分物品的评分。
4.用途:
将评分高的物品推荐给目标用户
5.方法:
这个问题我们有很多解决方法,本文用矩阵分解的方法来做
6.矩阵分解方法:
传统的奇异值分解SVD
7.效果:
选择部分较大的一些奇异值来同时进行降维。较大的奇异值的个数,一般会远远的小于用户数和物品数
通过这种方法,我们可以将评分表里面所有没有评分的位置得到一个预测评分。
8.传统SVD的问题:
SVD分解要求矩阵是稠密的,也就是说矩阵的所有位置不能有空白。有空白时我们的矩阵M是没法直接进行SVD分解的
9.传统SVD处理稀疏矩阵的方法:
对评分矩阵中的缺失值进行简单的补全,比如用全局平均值或者用用户物品平均值补全,得到补全后的矩阵
10.补全的效果:
推荐算法上还是较难使用,效率低。因为我们的用户数和物品一般都是超级大,随便就成千上万了。这么大一个矩阵做SVD分解是非常耗时的。
11.改进办法:
FunkSVD算法用于推荐
12.如何改进:
FunkSVD是在传统SVD面临计算效率问题时提出来的,既然将一个矩阵做SVD分解成3个矩阵很耗时,同时还面临稀疏的问题,那么我们能不能避开稀疏问题,同时只分解成两个矩阵呢?也就是说,现在期望我们的矩阵M分解为:
Mm×n=Pm×k*Qk×n
13.如何求解矩阵P,Q:
采用了线性回归的思想。我们的目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,也就是说,可以用均方差作为损失函数,来寻找最终的分解矩阵P和Q;
本质就是训练Pi和Qj,使其接近输入数据Mij,利用梯度下降法,加入正则化缓解过拟合。
14.在funkSVD上继续改进:
BiasSVD算法用于推荐
15.BiasSVD改进的情况:
增加了了场景因素,在loss中增加了新的参数
16.在biasSVD继续改进:
SVD++算法用于推荐,进一步做了增强,这里它增加考虑用户的隐式反馈
17.整体评价:
小的推荐系统用矩阵分解应该是一个不错的选择。大型的话,则矩阵分解比起现在的深度学习的一些方法不占优势。
说明:本文是总结此文的,内容完全来自于下面的参考文献
参考文献: