1.背景知识

  在讲SVD++之前,我还是想先回到基于物品相似的协同过滤算法。这个算法基本思想是找出一个用户有过正反馈的物品的相似的物品来给其作为推荐。其公式为:

                            

  其中 rui 表示预测用户u对物品i的喜爱程度。wij 是物品i,j之间的相似度,N(u)代表用户曾经有过正反馈的物品的集合。

  就比如说我们现在有三个用户A,B和C,还有四本书:《红楼梦》,《史记》,《微积分导论》和《时间简史》。用户和书籍之间的阅读关系为:

  A B C
红楼梦 1   1
史记      
微积分导论     1
线性代数   1  

  其中没有标注1的即表示用户没有阅读过此书籍。

  那么我们首先需要一种相似度度量方法可以测得任意两本书之间的相似度,暂时我们认为方法已经有了,并且已经把书籍两两之间的相似度计算出来了,其可以用一个对称方阵W表示(在我们这个例子中是4X4的矩阵)。其具体值假设如下:

    红楼梦     史记     微积分导论  线性代数 
红楼梦 1 0.7 0.2 0.1
史记 0.7 1 0.2 0.2
微积分导论 0.2 0.2 1 0.8
线性代数 0.1 0.2 0.8 1

  那根据公式,我们计算用户C对史记的喜欢程度就是 : ( 0.7 + 0.2)/ sqrt(2) 。

2. SVD++ 原理

  上面的方法有一个问题,就是相似度度量方法我们不太容易得到,也就是我们没法得到W这个矩阵。有一个想法就是我通过迭代优化的方法直接去计算整个W,其优化的lost function如下:

  

  这样的话就再不需要我们认为去定义一个相似度度量方法。但是一个新的问题又出现了。由于一般推荐系统中物品的个数往往都很多,所以W会是一个非常大的矩阵,那么这样会给存储和计算带来很大的麻烦。这里我们把条件放宽一点,假设W是由两个矩阵X和Y点乘得到的(其实就是矩阵分解)。那么预测的公式就变成了:

      

  其中Xi 和Yj 是矩阵X和Y中第i行和第j行。

  那么到此为止,我们用了迭代和矩阵分解的方法来处理相似度的信息,那么我们将这个相似度影响因素加入我们之前讲的隐因子的矩阵分解方法中去,就得到:

  

  可以看到,这个公式其实就是在隐因子的基础上多加了一项。

  但是,牛逼的dalao们又发现,如果让矩阵P(这个是用户的隐参数矩阵)和上面提到的W分解得到的X矩阵相等,可以防止模型过拟合,那么公式又变为:

  

  这个公式有点错误,其括号中的xi 应该是没有的。(太懒了,直接截图过来不想改==)

3.算法实现

  (INCOMING)

  https://github.com/ccienfall/RecommandSystem/blob/master/script/Factorize.py 先拿代码凑合着看吧。。。。

挖好坑,以后来填。(10.21)

前来填坑(11.2)

转载于:https://www.cnblogs.com/ccienfall/p/5979003.html

SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高相关推荐

  1. 基于矩阵分解的协同过滤算法

    基于矩阵分解的协同过滤算法 基于矩阵分解的CF算法实现(一):LFM LFM原理解析 损失函数 随机梯度下降法优化 基于矩阵分解的CF算法实现(二):BiasSvd BiasSvd 损失函数 随机梯度 ...

  2. 基于矩阵分解的协同过滤推荐

    基于矩阵分解的协同过滤推荐 Traditional SVD 通常SVD矩阵分解指的是SVD奇异值分解,我们姑且将其命名为Traditional SVD(传统并经典着)其公式如下: M m × n = ...

  3. 吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)

    目录 0. 前言 1. 基于内容的推荐算法(Content-based recommendations) 2. 计算电影特征 3. 基于梯度下降的协同过滤算法(Collaborative filter ...

  4. 机器学习(37)之矩阵分解在协同过滤推荐中的应用

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 前言 在协同过滤推荐算法总结(机器学习(36)之协同过滤典型算法 ...

  5. SIGIR 2019 开源论文 | 基于图神经网络的协同过滤算法

    作者丨纪厚业 单位丨北京邮电大学博士生 研究方向丨异质图神经网络,异质图表示学习和推荐系统 引言 协同过滤作为一种经典的推荐算法在推荐领域有举足轻重的地位.协同过滤(collaborative fil ...

  6. 推荐系统笔记:基于非负矩阵分解的协同过滤

    1 非负矩阵分解 非负矩阵分解 (NMF) 可用于非负的评级矩阵. 这种方法的主要优势不一定是准确性,而是它在理解用户-项目交互方面提供的高度可解释性. 与其他形式的矩阵分解的主要区别在于因子 U 和 ...

  7. java基于springboot+vue的协同过滤算法的图书推荐系统 nodejs

    "互联网:"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物力造成 ...

  8. 推荐系统学习(二)基于用户/物品的协同过滤算法(User-CF / Item-CF)

    User-CF 思想是根据用户相似度推荐商品,计算步骤如下: 步骤1. 得到用户矩阵 得到n表示用户,m为商品的评分大矩阵,矩阵的值可以是用户对物品的评价,是否收藏等数据 步骤2. 得到计算预估评分的 ...

  9. 关联规则挖掘算法_基于Apriori关联规则的协同过滤算法

    Apriori 算法 apriori关联规则算法的原理设计较为简单,著名的"啤酒和尿布"说的就是Apriori算法,通俗来讲apriori旨在寻找频繁项集,以帮助商家将消费者有可能 ...

最新文章

  1. linux释放内存命令
  2. 使用lua实现一个简单的事件派发器
  3. #ifdef _DEBUG
  4. 同学遇见过的面试问题
  5. 【深度学习】新人如何入门Pytorch的路线?有哪些资源推荐?
  6. ICML 2020 | Google提出最强生成式摘要预训练模型——天马
  7. synchronized的实现原理
  8. map平均准确率_第五篇 目标检测评价标准—MAP
  9. Android 学习笔记--android基本
  10. Seaborn学习笔记4
  11. C语言解释器的实现--让脚本跑起来(六)
  12. 计算机房通气换气次数,不知道换气次数如何确定?各种换气次数汇总,暖通设计师的宝典...
  13. QDir过滤文件的坑
  14. Excel多级下拉菜单的制作
  15. 史上最全的英语连读规则一网打尽
  16. 结构体类型(struct)
  17. Definer 预言机攻击事件分析
  18. (EPROCESS/KPROCESS/ETHREAD/KTHREAD)进程与线程内核层中的结构
  19. socket常用参数解释
  20. [置顶]乔布斯的斯坦福演讲(双语)

热门文章

  1. Nginx学习系列二Linux下Nginx实现负载均衡
  2. linux下ssh通过公钥登录服务器
  3. 鸡蛋学运维-2:Rsync同步配置步骤
  4. ios添加设备真机测试,以及Undefined symbols for architecture x86_64:''错误
  5. JS引用类型 -- Array类型
  6. 常见的php笔试题(附答案)搜集整理
  7. SQLServer、Mysql、Oracle 创建、删除用户和授予用户权限
  8. 公钥,私钥和数字签名
  9. springMVC3学习(十一)--文件上传CommonsMultipartFile
  10. Couchbase概述