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. 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)

    1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...

  2. Win10/UWP新特性系列—使用打印机

    微软在Win10时代终于完成的设备系统的大统一,"56个民族,56支花……"(⊙o⊙)…,既然统一了,那么也就意味着API也统一了,所以在UWP中,我们就可以使用统一的打印API来 ...

  3. 关于EEG参考电极

    今天搞ADS1299,里面的BIAS偏置运放原来是设置参考电极的. The input multiplexer has EEG-specific functions for the bias driv ...

  4. C++访问托管类(C#类库)

    1.新建C# 类库项目Airth,新建类 using System; using System.Collections.Generic; using System.Linq; using System ...

  5. Oracle表空间不足

    Oracle临时表空间不足 -- 用户的缺省表空间.临时表空间 select t.username, t.default_tablespace, t.temporary_tablespace from ...

  6. 二、Spring——AoP

    AOP概述 AOP是OOP的有益补充,他为程序开发提供了一个崭新的思考角度,可以将重复性的横切逻辑抽取到统一的模块中,通过OOP的纵向抽象和AOP的横向抽取,程序才能真正解决复杂性代码问题. Spri ...

  7. PHP入门part2

    PHP的数据类型 php数据类型分为三大类, 标量类型:整型.浮点型.布尔型和字符串型 复合类型:数组型和对象(object) 特殊类型:空类型和资源型 !资源型以后会讲 整形(int)就是整数的数值 ...

  8. python模块介绍- SocketServer 网络服务框架

    来源:https://my.oschina.net/u/1433482/blog/190612 摘要: SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServe ...

  9. buildbot的codebaseGenerator

    buildbot的codebaseGenerator文档非常简单,简单到令人发指. 也没有一个例子,唉,辛苦了好几个小时才研究清楚怎么设置. 赶紧记录下吧,不然下次又要纠结. 应用场景:web sta ...

  10. Sql的一些概念

    聚合函数 聚合函数可以返回整个或者几个列或者一个列的汇总数据,它常用来计算SELECT语句查询的统计值.聚合函数经常与SELECT语句的GROUP BY 子句一同使用.