近几天一直被LFM MF SVD SVD++ FM这几个词语搞混,今天专门阅读原文搞明白了大概。
我们前面提到过,基于行为的推荐系统算法我们称之为协同过滤,包括基于邻域和基于模型(隐语义模型LFM)。这次我们详细说说LFM模型。
我们的目标是对一个user-item的评分矩阵进行一个补充,得到未知的分数,进而进行推荐。
user和item是没有直接关系的,无法直接得到二者的关系,这个时候我们就想使用中间一种潜在因子将二者联系起来,比如userA和item《唐顿庄园》的联系,对于一个用户一个人来说我们是无法直接预测分数的,我们需要寻找一种潜在因子,比如userA对“幽默剧”的喜爱程度,item《唐顿庄园》这部剧有多少“幽默”成分,然后将这两个值乘起来就得到了最终的分数,而这个“幽默”成分就是一种潜在因子,当然了我们对一个用户对一部电影的分数不可能只用“幽默”这一个成分来决定,因该有很多潜在因子。
以上就是LFM的原本意思,即隐因子模型,寻找一些隐因子潜在因子,作为桥梁将user和item联系起来。
而在LFM中,应用最成功的算法就是矩阵分解(MF)。
矩阵分解是指将一个矩阵分解成俩个矩阵相乘,mn的一个矩阵分解成mk、kn的两个矩阵相乘,这里的k即潜在因子的个数。
在矩阵分解中,我们使用最多的就是SVD(奇异值分解),SVD是指将一个矩阵分解成三个矩阵相乘,其中第一个矩阵即user和潜在因子的关系程度,第三个矩阵是item和潜在因子的关系程度,中间矩阵为潜在因子的程度。其实三个矩阵也可以看成是两个矩阵相乘。
接下来细说SVD是如何做推荐的,即如何预测分数的。
SVD:
首先,我们拿到的是一个稀疏的空却的矩阵,无法直接SVD,我们的第一步即是使用均值或者0将这些矩阵填充。
其次,进行SVD分解。
第三:我们抽取前k个特征来代表原来的矩阵,将其表示成两个矩阵相乘P* Q
第四,使用梯度下降法和RMSE更新这些参数
训练结束后,得到PQ矩阵,然后相乘补全全部矩阵。
SVD有个缺陷:在算RMSE时考虑了矩阵的所有的元素,包括缺失值,而且没有考虑正则项。
所以,adjust SVD:
,k是指用户进行过评分的电影
adjust SVD还有个缺陷,没有考虑用户的一些偏差,比如用户心里有个基准值,不好的也会给至少3分,很好的会给最高分,有的用户最好的才给三分,不好的直接0分,所以因该在加上一个偏差
对于SVD而言,我们对用户u算分数时使用
,但是仍然可以使用到用户的以前的一些看过的信息来补充用户的信息,这就是SVD++
SVD:
SVD++:
,其中,
是指用户u看过的所有的电影的向量的和,N是看过的电影总和,除以N是为了平均,N开根号是为了两两内积方便。
好了我们先讨论了LFM然后引出MF然后SVD SVD++,以上这些LFM技术我们都可以认为是FM。
FM是指因子分解机,即将一个矩阵分解成两个矩阵相乘,具体到点击率预估处,我们使用FM做一层embedding(即WX),然后再内积进行二阶特征组合。