[推荐系统] SVD、FunkSVD、BiasSVD和SVD++

FunkSVD

FunkSVD方法是Simon Funk在Netflix电影推荐比赛中使用并取得良好效果,因此得名。

不同传统SVD分解成3个矩阵,FunkSVD为了简化运算,只分解为2个矩阵:
M m × n = P m × k T Q k × n M_{m \times n} = P_{m \times k}^T Q_{k \times n} Mm×n=Pm×kTQk×n

那么怎么得到矩阵P和Q呢?这里巧妙地利用了优化的思想:

假设函数:
y = q j T p i y = q_j^Tp_i y=qjTpi
损失函数:
L = ∑ i , j ( m i , j − q j T p i ) 2 L = \sum_{i,j} (m_{i,j} - q_j^Tp_i)^2 L=i,j(mi,jqjTpi)2
求导:
∂ L ∂ p i = − 2 ∑ i , j ( m i j − q j T p i ) q j ∂ L ∂ q j = − 2 ∑ i , j ( m i j − q j T p i ) p i \frac{\partial L}{\partial p_i} = -2\sum_{i,j} (m_{ij} - q_j^Tp_i)q_j \\ \frac{\partial L}{\partial q_j} = -2\sum_{i,j} (m_{ij} - q_j^Tp_i)p_i piL=2i,j(mijqjTpi)qjqjL=2i,j(mijqjTpi)pi
随机梯度下降迭代公式(其中 α \alpha α是学习率):
p i = p i + α ( m i j − q j T p i ) q j q j = q j + α ( m i j − q j T p i ) p i p_i = p_i + \alpha (m_{ij} - q_j^Tp_i)q_j \\ q_j = q_j + \alpha (m_{ij} - q_j^Tp_i)p_i pi=pi+α(mijqjTpi)qjqj=qj+α(mijqjTpi)pi

以一个实际例子进行说明:

假设用户商品矩阵 M 4 × 3 M_{4 \times 3} M4×3为:

Item 1Item 2Item 3
User 114
User 25
User 312
User 443

随机初始化矩阵 P 4 × 2 T P_{4 \times 2}^T P4×2T Q 2 × 3 Q_{2 \times 3} Q2×3

Factor 1Factor 2
User 10.10.2
User 20.90.7
User 30.30.5
User 40.40.1
Item 1Item 2Item 3
Factor 10.10.20.1
Factor 20.50.70.3

根据随机梯度下降迭代公式,一次迭代,学习率 α \alpha α设定为0.01:

p i p_i pi
p 11 = 0.1 + 0.01 × [ 1 − ( 0.1 × 0.1 + 0.2 × 0.5 ) ] × 0.1 = 0.10089 p 12 = 0.2 + 0.01 × [ 1 − ( 0.1 × 0.1 + 0.2 × 0.5 ) ] × 0.5 = 0.20445 p_{11} =0.1 + 0.01 \times [1- (0.1 \times 0.1 + 0.2 \times 0.5)] \times 0.1 = 0.10089 \\ p_{12} =0.2 + 0.01 \times [1- (0.1 \times 0.1 + 0.2 \times 0.5)] \times 0.5 = 0.20445 \\ p11=0.1+0.01×[1(0.1×0.1+0.2×0.5)]×0.1=0.10089p12=0.2+0.01×[1(0.1×0.1+0.2×0.5)]×0.5=0.20445

q j q_j qj
q 11 = 0.1 + 0.01 × [ 1 − ( 0.1 × 0.1 + 0.2 × 0.5 ) ] × 0.1 q 21 = 0.5 + 0.01 × [ 1 − ( 0.1 × 0.1 + 0.2 × 0.5 ) ] × 0.2 q_{11} =0.1 + 0.01 \times [1- (0.1 \times 0.1 + 0.2 \times 0.5)] \times 0.1 \\ q_{21} =0.5 + 0.01 \times [1- (0.1 \times 0.1 + 0.2 \times 0.5)] \times 0.2 \\ q11=0.1+0.01×[1(0.1×0.1+0.2×0.5)]×0.1q21=0.5+0.01×[1(0.1×0.1+0.2×0.5)]×0.2

可以看到,User 1对Item 1的评分数据,就可以更新矩阵P的第一行和矩阵Q的第一列。

BiasSVD

BiasSVD考虑了用户的偏好。比如某些用户可能

SVD++

SVD++考虑了用户的隐式行为。比如用户对商品虽然没有评分,但有浏览、加入购物车的行为。

总结

1、上述SVD类方法都面临"冷启动"问题,比如新用户、新商品,也就是说,如果评分矩阵出现了整行或者整列都没有评分的情况下,则这些方法都是不可行的。

参考文章:
[1] 《现代推荐算法》矩阵分解系列(SVD,FunkSVD,BiasSVD)原理
[2] How Does the Funk Singular Value Decomposition Algorithm work in Recommendation Engines?
[3] 推荐系统中的矩阵分解

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手撕机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值