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. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法

    ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改  ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容  export PS1='[\u@\ ...

  2. Visual Studio 2012+jQuery-1.7.1

    今天用Visual Studio 2012开发一个网站项目,在集成jqplot图表控件并进行调试的时候(使用的是MVC4框架),加载网页绘制图表的时候总是报错(提示$.jqplot.barRender ...

  3. Word或者Excel中怎么把 "空格" 替换成 "换行 "

    word中ctrl+h打开替换,将" "替换为^pexcel替换成alt+小键盘区的10

  4. windows 下mysql每日定时备份的几种方法

    第一种:新建批处理文件 backup.dat,里面输入以下代码:  代码如下 复制代码 net stop mysql xcopy "C:/Program Files/MySQL/MySQL ...

  5. 数论 UVA 10943

    这是一道关于组合数和隔板法的数论题目.题目说的是选出k个不同且不大于N的数字进行相加,要求这些数字之和等于N,结果要求输出这样的数有多少组.这里可以将问题利用隔板法来转换,那么题目的叙述可以转换成:这 ...

  6. linux下oracle 10g的sqlplus无法使用

    问题如标题所示. 解决办法, 1,root用户登录,建立软连接 cd / cd /usr/bin ln -s /home/oracle/product/10.2.0/db_1/bin/sqlplus ...

  7. 安装配置sock5代理

    环境准备及安装 yum -y install pam-devel openldap-devel cyrus-sasl-devel yum -y install openssl-devel.x86_64 ...

  8. 蓝牙协议栈中的 OSAL

    蓝牙协议栈里的操作系统叫做 OSAL(操作系统抽象层).它并非一个真正意义上的操作系统,它只是实现了操作系统的一些功能,如任务切换.内存管理. OSAL 产生的根源:基于蓝牙协议栈开发的产品,实际上是 ...

  9. 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.

    // 复制数据至剪切板BOOL CopyToClipboard(const char* pszData, const int nDataLen){ if(::OpenClipboard(NULL)) ...

  10. 合并excel-MergeExcel

    MergeExcel 将需要合并的excel放入该目录下,包含xls和xlsx 点击运行按钮: 输入包含多少列: 等待运行,完毕! 基于python编写,源码和exe于 TTyb