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)

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

  1. Mahout分布式运行实例:基于矩阵分解的协同过滤评分系统(一个命令实现文件格式的转换)

     Apr 08, 2014  Categories in tutorial tagged with Mahout hadoop 协同过滤  Joe Jiang 前言:之前配置Mahout时测试过一个简 ...

  2. 基于用户的最近邻协同过滤算法(MovieLens数据集)

      基于用户的最近邻算法(User-Based Neighbor Algorithms),是一种非概率性的协同过滤算法,也是推荐系统中最最古老,最著名的算法. 我们称那些兴趣相似的用户为邻居,如果用户 ...

  3. 【RS】List-wise learning to rank with matrix factorization for collaborative filtering - 结合列表启发排序和矩阵分解的协同过滤

    [论文标题]List-wise learning to rank with matrix factorization for collaborative filtering   (RecSys '10 ...

  4. 【机器学习笔记一】协同过滤算法 - ALS

    参考资料 [1]<Spark MLlib 机器学习实践> [2]http://blog.csdn.net/u011239443/article/details/51752904 [3]线性 ...

  5. spark机器学习从0到1协同过滤算法 (九)

      一.概念 协同过滤算法主要分为基于用户的协同过滤算法和基于项目的协同过滤算法.   基于用户的协同过滤算法和基于项目的协同过滤算法 1.1.以用户为基础(User-based)的协同过滤 用相似统 ...

  6. 推荐系统实践 0x0b 矩阵分解

    前言 推荐系统实践那本书基本上就更新到上一篇了,之后的内容会把各个算法拿来当专题进行讲解.在这一篇,我们将会介绍矩阵分解这一方法.一般来说,协同过滤算法(基于用户.基于物品)会有一个比较严重的问题,那 ...

  7. 吴裕雄--天生自然HADOOP操作实验学习笔记:协同过滤算法

    实验目的 初步认识推荐系统 学会用mapreduce实现复杂的算法 学会系统过滤算法的基本步骤 实验原理 前面我们说过了qq的好友推荐,其实推荐算法是所有机器学习算法中最重要.最基础.最复杂的算法,一 ...

  8. Slope one—个性化推荐中最简洁的协同过滤算法

    Slope One 是一系列应用于 协同过滤的算法的统称.由 Daniel Lemire和Anna Maclachlan于2005年发表的论文中提出. [1]有争议的是,该算法堪称基于项目评价的non ...

  9. 电影推荐系统---协同过滤算法(SVD,NMF)

    SVD 参考 https://www.zybuluo.com/rianusr/note/1195225 1 推荐系统概述   1.1 项目安排     1.2 三大协同过滤   1.3 项目开发工具 ...

随机推荐

  1. UWP/Win10新特性系列—UserConsentVerifier

    在UWP开发中,微软提供了新的用户许可验证方式-指纹(生物识别).Pin.密码验证.在爆料的新型Win10 Mobile移动设备中,会增加虹膜识别等先进的用户身份识别技术,微软现在统一了身份验证的AP ...

  2. php之无限极分类

    首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...

  3. ex26 纠正练习

    题目中给出的代码如下: def break_words(stuff): """This function will break up words for us." ...

  4. RocketMQ消费者示例程序

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 本博客实现了一个简单的RocketMQ消费者的示例,MQ里存储的是经过Avro序列化的消息数据,程序读取数据并反序列化后, ...

  5. svn Q&A

    Q1:在svn commit的时候,会出现某某文件 is missing.这是因为此次提交时:远程repository中并没有该文件,而且本地repository也没有该文件. 具体原因: 1.可能因 ...

  6. excel导入导出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using FS.Exten ...

  7. Spring4 + Quartz-2.2.0集成实例

    Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...

  8. [转载]QQ空间技术架构之深刻揭密

    1. 拥有5.5亿的活跃用户 2. 过万台的设备 3. 数千万级别的同时在线 4. 数十亿级别的全站PV 5. P级的UGC存储量 6. 每天千亿级别的服务请求 图1--QQ空间海量服务数据规模 接下 ...

  9. windows server 2008服务器 做raid0

    dell服务器,启动后,根据提示按F10进入raid设置,设置成raid0 我们的服务器是4块硬盘,每块600G,做raid0时,生成一个虚拟磁盘vdisk. 做完raid之后,做OS部署 重启服务器 ...

  10. 2012年第三届蓝桥杯C/C++程序设计本科B组决赛

    1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几[结果填空] (满分5分)    1949年的国庆节(10月1日)是星期六.     ...