Slope One 是一种很好理解的推荐算法,因为它的简单性而备受关注。网上有很多相关的博文介绍它的原理,但很少见到比较全面而且数学性比较强的介绍。我下面主要从数学的角度比较全面的介绍相关的三个算法。里面使用红色标记的文字是我自己的感想,欢迎大家的指正。
一些很好的参考文献
- 算法提出的 paper:Slope One Predictors for Online Rating-Based Collaborative Filtering, Daniel Lemire, Anna Maclachlan, 2005
- 一个转载的中文博客:http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120790.html
- 一个转载的详细介绍利用python实现Slope One的博客:http://blog.csdn.net/Java2King/archive/2010/03/14/5378597.aspx
论文作者们试图建立满足如下性质的robust推荐算法:
1. 算法容易实现和维护
2. 对新的评分应该立即给予响应
3. 查询速度要快(虽然可能以牺牲存储量为代价)
4. 对新的用户也要能给出有效的推荐
5. 精度上要有竞争力
他们提出了三个算法,
Slope One
其基本的想法来自于简单的一元线性模型 w=f(v)=v+b。已知一组训练点 (vi,wi)ni=1,利用此线性模型最小化预测误差的平方和,我们可以获得
利用上式获得了b的取值后,对于新的数据点vnew,我们可以利用 wnew=b+vnew 获得它的预测值。
直观上我们可以把上面求偏移 b 的公式理解为 wi 和 vi 差值的平均值。
利用上面的直观,我们定义item i 相对于 item j 的平均偏差:
其中 Sj,i() 表示同时对item i 和 j 给予了评分的用户集合,而 card() 表示集合包含的元素数量。
有了上面的定义后,我们可以使用 获得用户 u 对 item j 的预测值。当把所有这种可能的预测平均起来,可以得到:
其中 Rj 表示所有用户 u 已经给予评分且满足条件 (i≠j 且 Sj,i非空) 的item集合。
对于足够稠密的数据集,我们可以使用近似
把上面的预测公式简化为
Weighted Slope One
Slope One中在计算 item i 相对于 item j 的平均偏差 devj,i 时没有考虑到使用不同的用户数量平均得到的 devj,i,其可信度不同。假设有 2000 个用户同时评分了 item j 和 k,而只有20 个用户同时评分了 item j 和 l,那么显然获得的 devj,k 比 devj,l 更具有说服力(类似于kNN中压缩相似度的思想)。所以一个修正是对最终的平均使用加权:
其中
(根据在Netflix上的经验,可能把 cj,i 再开方更合适)
Bi-Polar Slope One
Bi-Polar Slope One 进一步把用户已经给予评分的item划分为两类——like和dislike,而其划分的方法是判断对应的评分是否大于此用户的平均评分:
类似地,可以定义对item i 和 j 具有相同喜好的用户集合:
利用上面的定义,我们可以使用下面的公式为(like或dislike的item)获得新的偏差值:
这样可以计算从item i 计算得到的预测值:
最终 Bi-Polar Slope One 的预测公式为
最后的实验比较使用的度量为 MAE,其结果如下:
一些自己的想法:
1). Slope One 是基于一元线性模型 w=f(v)=v+b,那么是否可以使用多元线性组合?比如可以先利用关联规则方法获得一些关联规则,然后对于找出的每个关联规则使用线性模型。作者在文中也提到可以尝试使用二次或更高次的回归模型。显然这些做法都会让整个模型更加复杂。
2). 在具体应用中,Weighted Slope One 中的 weight 的选取应该可以找到更好的方法
3). 在 Bi-Polar Slope One 中,作者只是简单地使用用户的平均评分来判断like和dislike,这应该会引入比较大的误差。用户的评分往往会随着时间的不同而变动很大,是否可以学习一个更加合理的分割阈值(如 r+ru+rj)?还有,是否可以把这种binary的分割更加细化,分为三类,乃至更多类……
相关推荐
基于差分隐私的Slope One协同过滤推荐算法,王辉,何杰,Slope One算法是一种简洁高效且推荐精度高的协同过滤推荐算法,然而其很难提供一个严格的隐私保证。潜在攻击者可以通过观察用户的推
针对传统协同过滤算法存在冷启动、数据稀疏、运行效率低下等问题,分析了较传统协同过滤算法更加高效准确的Slope One算法的优点、原理及流程。针对Slope One算法未考虑用户兴趣变化和用户相似性这两方面的问题,提出...
一种基于机器学习的加权SlopeOne算法改进.doc
融合Slope One的协同过滤推荐模块-中期源码
基于奇异值分解的Slope One算法,林德军,孟祥武,Slope One算法是一种基于项目的协同过滤推荐算法,利用线性回归模型来预测评分。Slope One算法在数据稀疏的情况下推荐效果不好,而矩阵
Algorithm-slopeone.zip,一种基于加权斜率的协同过滤方案的php实现。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
一种改进的Slope One推荐算法,柴华,刘建毅,Slope One算法是一种简单高效的典型协同过滤推荐算法,数据稀疏性是影响其推荐准确率的主要问题。为了克服该问题,本文提出了一种改
内容推荐系统,协同过滤,ItemC,UserCF,SlopeOne
Slope One算法在Hadoop平台的改进实现,鲍崴崴,苏放,近年来电子商务网站对精确投放广告的需求日益加大,协同过滤的推荐算法作为一种力求准确推测用户需求的方案,应用越来越普遍。本
针对因Slope One算法没有考虑相似性,而导致个性化推荐准确率不高的问题,提出了一种基于用户相似性的加权Slope One算法(BUS weighted Slope One算法)。通过先评定用户活跃度,筛选出活跃用户,然后依据项目间相似...
快速协同推荐算法,java实现。该系列算法的简洁特性使它们的实现简单而高效,而且其精确度与其它复杂费时的算法相比也不相上下。
Slope One算法是一种基于项目的协同过滤推荐算法,它对项目属性内和属性间依赖耦合关系的考虑较为欠缺,推荐效果并不理想。基于此,提出一种基于耦合关系的加权Slope One算法。该算法构造了项目属性耦合关系模型和...
slope one 算法python实现
针对传统的用户个性化推荐中使用的协同过滤算法存在稀疏性和可扩展性不足的问题,提出了一种基于用户特征聚类和Slope One填充的协同过滤算法。该算法首先以用户属性特征作为聚类依据,利用基于最小生成树K-means聚类...
Daniel Lemire 写的介绍Slope one 算法的lecture。 想深入学习slope one的可以看看
该代码是一个完整的slope one 案例,里面有main函数和初始化值,可以直接运行观测结果,代码结构清晰,方便用户修改或研究使用
Slope One 算法基于简单的线性回归模型,通过减少响应时间和维护难度,显著提高了推荐性能。然而 Slope One 算法没有考虑用户内部的关联,同等地使用各个用户数据进行预测,容易造成偏差,影响推荐质量。本文提出了一种...
在 Movielens 数据集上利用按照时间戳排序后划分的测试集进行实验,结果表明 Simplified Slope One 算法对评分预测的准确性与原 Slope One 算法接近,但时间复杂度和空间复杂度均低于原 Slope One 算法,更适合在...
融合改进加权Slope One的协同过滤算法.docx
文档基于Slope one算法的电影推荐系统电影推荐系统提取方式是百度网盘分享地址