Ref:https://zhuanlan.zhihu.com/p/98058812 在原文的基础上进行补充
基于行为的推荐系统算法我们称之为协同过滤,包括基于邻域、基于模型(隐语义模型LFM)和基于图的随机游走。这次我们详细说说LFM模型。
我们的目标是对一个user-item的评分矩阵进行一个补充,得到未知的分数,进而进行推荐。
user和item是没有直接关系的,无法直接得到二者的关系,这个时候我们就想使用中间一种潜在因子将二者联系起来,比如userA和item《复仇者联盟》的联系,对于一个用户一个人来说我们是无法直接预测分数的,我们需要寻找一种潜在因子,比如userA对“科幻剧”的喜爱程度,item《复仇者联盟》这部剧有多少“科幻”成分,然后将这两个值乘起来就得到了最终的分数,而这个“科幻”成分就是一种潜在因子,当然了我们对一个用户对一部电影的分数不可能只用“科幻”这一个成分来决定,因该有很多潜在因子。
以上就是LFM的原本意思,即隐因子模型,寻找一些潜在因子,作为桥梁将user和item联系起来。而在LFM中应用最成功的算法就是矩阵分解MF(Matrix factorization)。
矩阵分解是指将一个矩阵分解成俩个矩阵相乘,mn的一个矩阵分解成mk、kn的两个矩阵相乘,这里的k即潜在因子的个数。
在矩阵分解MF中,我们使用最多的就是SVD(奇异值分解),SVD是指将一个矩阵分解成三个矩阵相乘,其中第一个矩阵即user和潜在因子的关系程度,第三个矩阵是item和潜在因子的关系程度,中间矩阵为潜在因子的程度。其实三个矩阵也可以看成是两个矩阵相乘。
接下来细说SVD是如何做推荐的,即如何预测分数的。
- 首先,我们拿到的是一个稀疏的空却的矩阵,无法直接SVD,我们的第一步即是使用均值或者0将这些矩阵填充。
- 其次,进行SVD分解。
- 第三:我们抽取前k个特征来代表原来的矩阵,将其表示成两个矩阵相乘P* Q
- 第四,使用梯度下降法和RMSE更新这些参数
训练结束后,得到PQ矩阵,然后相乘补全全部矩阵。
SVD 与 SVD++ 的区别请参考https://blog.csdn.net/qfikh/article/details/103994319
好了我们先讨论了LFM然后引出MF然后SVD SVD++,以上这些LFM技术我们都可以认为是FM。
FM是指(Factorization Machine)因子分解机,即将一个矩阵分解成两个矩阵相乘,具体到点击率预估处,我们使用FM做一层embedding(即WX),然后再内积进行二阶特征组合。