SVD属于“隐语义”方法。有basic SVD, RSVD, ASVD, SVD++ 。
https://blog.csdn.net/evillist/article/details/76269733
1. SVD 和 RSVD
推荐系统的SVD与数学里的SVD有些区别。
用户u对物品i的评分(或者隐性评分)表示为$R_{ui}$ . 用户和物品的评分矩阵可以被表示为$R_{U \times I}$ 。
该评分矩阵可以被分解为: SVD的目标就是得到$P_{U \times K}$ 和 $Q_{K \times I}$ 。用户对某个物品的偏好(未知的),就可以通过P的某一行点乘Q的某一行得到了。 假设已知的评分为$r_{ui}$ 。则真实值与预测值之间的误差为: 继而可以算出总的平方误差和: 接下来利用梯度下降法把SSE降到最小,那么P、Q就能最好地拟合R了。
这就是basic SVD。可以目标函数中只有训练误差,就很容易导致过拟合问题。因此,引入两个隐语义矩阵的正则项,得到RSVD:
2. RSVD的改进
于用户对商品的打分不仅取决于用户和商品间的某种关系,还取决于用户和商品独有的性质,我们希望将这些性质用基线评分(baseline estimates)来表示。
定义用户u对物品i的评分$r_{ui}$的基线评分$b_{ui}$: 其中$b_u$ 和 $b_i$ 为用户u和物品i的观测误差(独特熟悉)。
则SVD的预测公式可以改成: 第一项$\mu$为总的平均分,$b_u$为用户u的属性值,$b_i$为商品i的属性值,加入的这两个变量在SSE式子中同样需要惩罚,那么SSE就变成了下面这样:
3. ASVD
全称叫Asymmetric-SVD,即非对称SVD。这个模型很有意思,看预测式子,用户矩阵P已经被去掉了,取而代之的是利用用户评过分的商品和用户浏览过尚未评分的商品属性来表示用户属性,这有一定的合理性,因为用户的行为记录本身就能反应用户的喜好。而且,这个模型可以带来一个很大的好处,一个商场或者网站的用户数成千上万甚至过亿,存储用户属性的二维矩阵会占用巨大的存储空间,而商品数却没有那么多,所以这个模型的好处显而易见。但是它有个缺点,就是迭代时间太长了,这是可以预见的,以时间换空间嘛。
4. SVD++
以上只是针对评分矩阵,用户直接给物品此时推荐打分的称之为显示反馈。存在一种隐式反馈,用户没有对物品进行过打分评价,但却有其他隐性的表示用户对该物品喜好的行为,比如浏览、收藏、点赞等行为。
在式中,隐式反馈被作为附加的项目隐因子加入模型中,附加的隐式反馈将每一个项目i与因子向量yi∈Rfyi∈Rf联系起来,用于表示用户是否对该项目有过打分。
引入隐式反馈,使用用户的历史浏览数据、用户历史评分数据、电影的历史浏览数据、电影的历史评分数据等作为新的参数。
现实中,隐含回馈的原因比较复杂,专门给一部分参数空间去建模,每个item对应一个向量 yiyi ,通过user隐含回馈过的item的集合来刻画用户的偏好。
SVD++的预测式子为: N(u) 用户u行为记录(包括浏览的和评过分的商品集合),是收缩因子取集合大小的根号是一个经验公式,并没有理论依据。
隐式兴趣对应的向量也是 k 维,它由用户有过评分的物品生成。