推荐算法-矩阵分解

相关地址

https://www.cnblogs.com/mafeng/p/7912229.html

https://zhuanlan.zhihu.com/p/35262187

矩阵分解是一个非常优雅的推荐算法,因为当设计到矩阵分解时,我们通常不会太多地区思考哪些项目将停留在所得到矩阵的列和行中。但是其使用这个推荐引擎,我们清楚地看到,u是第i个用户的兴趣向量,v是第j个电影的参数向量。

所以我们可以通过u和v的点积来估算x(第i个用户对第j个电影的评分)。我们用已知的分数构建这些向量,并使用它们来预测未知的得分。例如在矩阵分解之后,Ted的向量是(1.4 , .8),电影A的向量是(1.4,.9),那电影A-Ted的得分为1.4*1.4+0.8*0.9=2.68分。

对于推荐系统来说存在两大场景即评分预测(rating prediction)与Top-N推荐(item recommendation,item ranking)。评分预测场景主要用于评价网站,比如用户给自己看过的电影评分多少(MovieLens)。其中矩阵分解技术主要应用于该场景。Top-N推荐场景主要用于购物网站或者一般拿不到显示评分信息的网站,即通过用户的隐式反馈信息来给用户推荐一个可能感兴趣的列表以供其参考。其中该场景为排序任务,因此需要排序模型来对其建模。因此,我们接下来关心预测任务。

对于评分预测任务来说,我们通常将用户和项目表示为二维矩阵的形式,其中矩阵中的某个元素表示对应用户对于相应项目的评分,1-5分表示喜欢的程度逐渐增加,?表示没有过评分记录。推荐系统评分预测任务可看做是一个矩阵补全(Matrix Completion)的任务,即基于矩阵中已有的数据来补充矩阵中没有产生过记录的元素。值得注意的是,这个矩阵是非常稀疏的(Sparse),稀疏度一般能达到90%以上,因此如何根据极少的观测数据来较准确的预测未观测数据一直以来都是推荐系统领域的关键问题。

其中,推荐系统的评分预测场景可看做是一个矩阵补全的游戏,矩阵补全是推荐系统的任务,矩阵分解时其达到目的的手段。因此,矩阵分解是为了更好的完成矩阵补全任务。之所以可以利用矩阵分解来完成矩阵补全任务,那是因为基于这样的假设:假设UI矩阵是低秩的,即在大千世界中,总会存在相似的人或物,即物以类聚,人与群分,然后我们可以利用两个小矩阵相乘来还原它。


下面是一些常用的分解姿势:

  1. PureSVD  ( https://blog.csdn.net/u011251945/article/details/81362642 )

    SVD分解的形式为3个矩阵相乘,左右两个矩阵分别表示用户/项目隐含银子矩阵,中间矩阵为奇异值矩阵并且是对角矩阵,每个元素非负性、并且逐渐减小。因此我们可以只需要钱k个因子来表示它。

如果想运用SVD分解的话,有一个前提要求矩阵是稠密的,即矩阵里的元素要非空,否则就不能运用SVD分解。很显然我们的任务不能使用SVD,所以一般的做法是先用均值或者其他统计方法来填充矩阵,然后再运用SVD分解降为。

  1. FunkSVD ( https://sifter.org/~simon/journal/20061211.html )

刚才提到的PureSVD首先需要填充矩阵,然后进行分解降维,同时由于需要求你操作(复杂度O(n^3)),存在计算复杂度高问题,所以后来Simon Funk提出了FunkSVD的方法,它不在将矩阵分解为3个矩阵,而是分解为2个低秩的用户项目矩阵,同时降低了计算复杂度。(但是里面涉及到 梯度下降和随机梯度下降法)

3.PMF ( https://blog.csdn.net/shuaishuai3409/article/details/50822550 )   

PMF是对与FunkSVD的概率解释版本。

4.还有很多算法。不一一描述了,大家需要的时候记得要都看看,然后作对比并且结合着自己的项目实际情况进行分析选择:BiasSVD 、SVD++ 、timeSVD 、NMF 、WMF 、LLORMA 、SRui 、ConvMF 、NCRPD-MF

原文地址:https://www.cnblogs.com/csnd/p/12061902.html