推荐系统最早在亚马逊的网站上应用,根据以往用户的购买行为,推荐出购买某种产品同时可能购买的其他产品,国内做的不错的当当网,有时候买书,它总能给我推荐出我感兴趣的其他书来,也算是技术极大的促进了销售。
一般的协同过滤算法,首先是收集用户对事物(产品)的评分情况,一种直接对某本书,或者某个歌曲打分,另种是隐性的打分,比如商务系统中,购买了表示打2分,浏览了打1分,其他的0分。我比较看好隐性打分,因为直接打分需要用户的参与程度比较高,很多网站都在内容页中留一个打分的按钮,从1~5选一个,我可能喜欢这篇文章,可我哪里知道我喜欢的程度是几分啊,还要我去思考,而网站设计中一条很重要的原则是:Do not let me think!,于是我就胡打一个分数或者不打,而隐性的打分则不同,只有你喜欢的图书你才会购买,只有你喜欢的歌曲才会听多次。
收集好用户的打分之后,通过最近邻搜索到和某个事物或者某个人特征或者兴趣相近的其他事物或者人,最近邻搜索算法一般是皮尔森相关系数(Person Correlation Coefficient)、余弦相似性(Cosine-based Similarity)以及调整余弦相似性(Adjusted Cosine Similarity)。关于余弦定理在数据挖掘中的应用,google黑白报有过介绍,可以参考数学之美 系列 12 - 余弦定理和新闻的分类。
剩下的工作就是根据最近邻集进行推荐了。
最近邻集的运算相对来说成本比较高,尤其是大量数据的时候,今天和大家分享的是一种简单高效的协同过滤算法:Slope one
基本原理
用户 |
对事物A打分 |
对事物B打分 |
X |
3 |
4 |
Y |
2 |
4 |
Z |
4 |
? |
用户Z对事物B的打分可能是多少呢?股票上有个说法是平均值可以掩盖一切异常波动,所以股票上的各个技术指标收拾不同时间段的平均值的曲线图或者柱状图等。同样的,Slope one算法也认为:平均值也可以代替某两个未知个体之间的打分差异,事物A对事物B的平均很差是:((3 - 4) + (2 - 4)) / 2 = -1.5,也就是说人们对事物B的打分一般比事物A的打分要高1.5,于是Slope one算法就猜测Z对事物B的打分是4 + 1.5 = 5.5
是不是非常的简单?
加权算法
有n个人对事物A和事物B打分了,R(A->B)表示这n个人对A和对B打分的平均差(A-B),有m个人对事物B和事物C打分了,R(B->C)表示这m个人对B和对C打分的平均差(B-C),注意都是平均差而不是平方差,现在某个用户对A的打分是ra,对C的打分是rc,那么A对B的打分可能是:
rb = (n * (ra - R(A->B)) + m * (rb + R(B->C)))/(m+n)
开源的Slope one的程序包
还有一些其他语言的版本,请参考http://en.wikipedia.org/wiki/Slope_One,即将面世的,居于PHP & Mysql的Slope one算法实现将会在http://code.google.com/p/openslopeone/开源出来,主要优化的是海量数据以及分布式处理,目前在我的笔记本上(迅驰+1.5G内存),对440W打分记录进行测试,单一线程,3小时47分处理完。速度还算是不错了,最近工作实在太忙了,等我整理好会开源出来放在上面的地址。过几天会有一篇我的算法的详细介绍,盼诸位批评指正,共同学习,共同进步。
本文来自:http://chaoqun.17348.com/2008/09/slope_one/
相关阅读:
Slope One 算法
Slope One:简单高效的协同过滤算法(Collaborative Filtering)
Slope One算法的C#实现
分享到:
相关推荐
基于差分隐私的Slope One协同过滤推荐算法,王辉,何杰,Slope One算法是一种简洁高效且推荐精度高的协同过滤推荐算法,然而其很难提供一个严格的隐私保证。潜在攻击者可以通过观察用户的推
针对传统协同过滤算法存在冷启动、数据稀疏、运行效率低下等问题,分析了较传统协同过滤算法更加高效准确的Slope One算法的优点、原理及流程。针对Slope One算法未考虑用户兴趣变化和用户相似性这两方面的问题,提出...
针对传统的用户个性化推荐中使用的协同过滤算法存在稀疏性和可扩展性不足的问题,提出了一种基于用户特征聚类和Slope One填充的协同过滤算法。该算法首先以用户属性特征作为聚类依据,利用基于最小生成树K-means聚类...
一种改进的Slope One推荐算法,柴华,刘建毅,Slope One算法是一种简单高效的典型协同过滤推荐算法,数据稀疏性是影响其推荐准确率的主要问题。为了克服该问题,本文提出了一种改
该代码是一个完整的slope one 案例,里面有main函数和初始化值,可以直接运行观测结果,代码结构清晰,方便用户修改或研究使用
基于奇异值分解的Slope One算法,林德军,孟祥武,Slope One算法是一种基于项目的协同过滤推荐算法,利用线性回归模型来预测评分。Slope One算法在数据稀疏的情况下推荐效果不好,而矩阵
该算法使用slope-one算法计算出来的评分预测值来填充评分矩阵中的未评分项目,然后在填充后的用户—项目评分矩阵上通过基于用户的协同过滤方法给出推荐。利用slope-one算法计算出来的评分预测值作为回填值,既能降低...
Slope One算法是一种基于项目的协同过滤推荐算法,它对项目属性内和属性间依赖耦合关系的考虑较为欠缺,推荐效果并不理想。基于此,提出一种基于耦合关系的加权Slope One算法。该算法构造了项目属性耦合关系模型和...
文档基于Slope one算法的电影推荐系统电影推荐系统提取方式是百度网盘分享地址
针对因Slope One算法没有考虑相似性,而导致个性化推荐准确率不高的问题,提出了一种基于用户相似性的加权Slope One算法(BUS weighted Slope One算法)。通过先评定用户活跃度,筛选出活跃用户,然后依据项目间相似...
融合Slope One的协同过滤推荐模块-中期源码
一种基于机器学习的加权SlopeOne算法改进.doc
Slope One算法在Hadoop平台的改进实现,鲍崴崴,苏放,近年来电子商务网站对精确投放广告的需求日益加大,协同过滤的推荐算法作为一种力求准确推测用户需求的方案,应用越来越普遍。本
SlopeOne推荐算法的Ruby实现_Ruby_下载.zip
SlopeOne算法
快速协同推荐算法,java实现。该系列算法的简洁特性使它们的实现简单而高效,而且其精确度与其它复杂费时的算法相比也不相上下。
融合改进加权Slope One的协同过滤算法.docx
slope one 算法python实现
Slope One 评分预测推荐算法采用简单的线性回归模型解决数据稀疏问题,具有易于实现、评分预测速度快的特点,但它在训练阶段生成项目之间评分差的时间和空间消耗大,训练阶段需离线进行。为解决以上问题,提出一种...
Slope One 算法基于简单的线性回归模型,通过减少响应...基于项目的 Slope One 算法结合基于用户的协同过滤算法,提出新的混合推荐算法 US-Slope One。在 MovieLens数据集上的实验结果表明,该算法与原 Slope One算法相比