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×kT​Qk×n​

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

假设函数:
y = q j T p i y = q_j^Tp_i y=qjT​pi​
损失函数:
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,j​−qjT​pi​)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 ∂pi​∂L​=−2i,j∑​(mij​−qjT​pi​)qj​∂qj​∂L​=−2i,j∑​(mij​−qjT​pi​)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​+α(mij​−qjT​pi​)qj​qj​=qj​+α(mij​−qjT​pi​)pi​

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

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

Item 1 Item 2 Item 3
User 1 1 4
User 2 5
User 3 1 2
User 4 4 3

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

Factor 1 Factor 2
User 1 0.1 0.2
User 2 0.9 0.7
User 3 0.3 0.5
User 4 0.4 0.1
Item 1 Item 2 Item 3
Factor 1 0.1 0.2 0.1
Factor 2 0.5 0.7 0.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] 推荐系统中的矩阵分解

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

  1. 《推荐系统笔记(六)》svd在推荐系统中的应用推广(FunkSVD,BiasSVD以及SVD++)及简单实战(surprise库)

    前言 奇异值分解(SVD)可以将任意矩阵分解成两个方阵和一个对角矩阵的乘积.借助于SVD,我们可以将推荐系统中的用户-评分矩阵进行分解,通过推广的SVD方法(FunkSVD,BiasSVD和SVD++ ...

  2. 奇异值值分解。svd_推荐系统-奇异值分解(SVD)和截断SVD

    奇异值值分解.svd The most common method for recommendation systems often comes with Collaborating Filterin ...

  3. mf模型 svd++_推荐系统算法(MF、FM、CF、SVD、LFM、SVD++、TItemCF、timeSVD++、模型融合)...

    为什么需要矩阵分解?(matrix factorization model) 协同过滤可以解决我们关注的很多问题,但是仍然有一些问题存在,比如: 物品之间存在相关性,信息量并不随着向量维度增加而线性增 ...

  4. 推荐系统算法(MF、FM、CF、SVD、LFM、SVD++、TItemCF、timeSVD++、模型融合)

    为什么需要矩阵分解?(matrix factorization model) 协同过滤可以解决我们关注的很多问题,但是仍然有一些问题存在,比如: 物品之间存在相关性,信息量并不随着向量维度增加而线性增 ...

  5. 推荐系统学习(三)SVD奇异值分解做推荐与python代码

    文章目录 SVD简述 python代码实现 SVD简述 在推荐系统中,使用SVD推荐的思路是: 对原有数据的大矩阵使用SVD矩阵分解,将原有矩阵A拆分成 U,S,V三个矩阵,其中U与V都是正交矩阵,并 ...

  6. 推荐系统相关算法(1):SVD

    假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分).那么能预测出Zero君对M的评分吗?答案显然是能.最简单的方法就是直接将预测分 ...

  7. svd奇异值分解_奇异值分解SVD

    点击上方蓝字关注我们 奇异值分解(SVD)在计算机视觉中有着广泛的应用,如数据降维.推荐系统.自然语言处理等.本文是介绍SVD的数学计算过程,并从SVD的性质说明其应用的原理. 01特征值与特征向量 ...

  8. svd pca matlab,从SVD到PCA——奇妙的数学游戏

    方阵的特征值 当一个矩阵与一个向量相乘,究竟发生了什么? 定义如下的 A 与 x: 求得 b: 可以看到 A 乘以 x 就是将 x 的元素以线性的方式重新组合得到 b,数学上把这种重新组合叫 线性变换 ...

  9. matlab svd降维测试数据集,SVD降维

    线性代数相关知识: 任意一个M*N的矩阵A(M行*N列,M>N),可以被写成三个矩阵的乘积: 1. U:(M行M列的列正交矩阵) 2. S:(M*N的对角线矩阵,矩阵元素非负) 3. V:(N* ...

最新文章

  1. crossdomain.xml
  2. asp.net 获取计算机配置_智能制造中的计算机视觉应用瓶颈问题
  3. python xml.dom模块解析xml
  4. python之event【事件】
  5. python 判断数字连续_零基础如何自学python? 这些知识点是你进阶的必经之路
  6. vue如何设置视频封面_vue怎么制作朋友圈封面视频 vue制作朋友圈视频方法
  7. 测试显卡专业性能软件,如何测试显卡的性能?几款的显卡性能检测软件推荐
  8. Java为什么不能写大型游戏?
  9. Siebel Open UI
  10. 闰年,闰月对应的天数快速记忆法
  11. 用计算机程序计算兴利库容,闸坝多目标泄流估算方法及系统与流程
  12. 写一个PE的壳_Part 4:修复对ASLR支持+lief构建新PE
  13. 利益相关者在敏捷项目管理中有什么用?
  14. 对TS流的一些理解TS流的结构
  15. 哈希函数 直接定址法 除留余数法
  16. 优化网络方法思维导图总结
  17. python 梦幻西游_GitHub - BestBurning/mhxy: tensorflow实践:梦幻西游人物弹窗识别
  18. 如何把扫描图片转换成word
  19. 百度全景图/内景图切换示例
  20. 【Windows】Win10设置开机启动项

热门文章

  1. Silverlight 2.5D RPG游戏技巧与特效处理(Game Effects):目录
  2. Linux查看主机信息及修改主机名hostname
  3. onsubmit表单提交简单使用
  4. 【RTSP/RTP流媒体】10、编写简单的RTSP客户端
  5. 实用帖!分享5个素材丰富的资源网站
  6. cookie 和 sessions 的区别
  7. with open()as filename
  8. 一、采样频率到底是选择2倍还是10倍?让我用python来给你展示
  9. k8s入坑之报错(9)k8s node节点加入到集群时卡住 “[preflight] Running pre-flight checks”...
  10. matlab实现调整图片的饱和度