协同过滤方法是推荐系统采用的主要技术之一,这篇文章将要介绍此类方法中中的Weighted Slope One算法。

Slope算法的核心思想来自线性回归分析。在线性回归分析中,给定一个训练集S={<x1,y1>,<x2,y2>...<xn,yn>}, Slope One算法假设xi和yi之间符合y=x+b的线性关系,根据最小二乘法进行线性拟合的方法,可以得到令目标函数:

达到最小值的参数:

b的估计值即为训练集中数对只差的算术平均值。因此,由训练我们可以得到线性拟合公式y=x+b^.

上面即为Slope One算法的思想。其实,这个算法非常简单,举个例子:

user  item_1  item_2

A      2      3

B     3              5

C        4               ?

假设用户A对item_1这个东西的打分是2,对item_2的打分是3,用户B对item_1的打分是3,对item_3的打分是5,用户C只对item_1进行了打分,那么该如何预测C对item_2的打分呢?

按照Slope One的思想,先求item_1与item_2之间的差距d=((3-2)+(5-3))/2=1.5 . 既然C给item_1打了4分,那么按照item_2与item_1的预测差距,C给item_2的打分应该是4+1.5=5.5分。

在举一个稍微复杂点的例子:

user  item_1  item_2  item_3

A      2      3       1

B     3              5       3

C        4               ?              2

上一个例子拿item_1和item_2来进行了预测,这个例子中又出现了item_3,因此item_c也应该参加到预测中。item_3的与item_2的差距d=((3-1)+(5-3))/2=2,那么按照上面的预测方式C对item_2的打分应该是2+2=4。有个两个预测一个是5.5一个是4,那么最终的预测是(5.5+4)/2=4.75.

这就是Slope One算法,简单但是有效。其实,我个人理解,每个人对一个东西的打分肯定是和个人喜好有关系的,所以当数据量少的时候,两个item之间不一定呈现y=x+b关系,但是当数据量大的时候,这个模型是有效的。

再举一个例子,来说明Weighted Slope One. 假设有个新用户D

user  item_1  item_2  item_3

A      2      3       1

B     3              5       3

C        4               ?             2

D        3               4              ?

现在要预测D对item_3的打分,按照上面的做法,先计算d(item_3,item_1)=((2-4)+(3-3)+(1-2))/3=-1. 然后计算d(item_3,item_2)=((3-5)+(1-3))/2=-2。按照slope one的思路就是预测item_3的分数为r=((3-1)+(4-2))/2=2.25。但是,有三个用户A,B,C提供了item_1,item_3之间差距的信息,但是只有量个提供了item_2和item_3之间的差距信息,那么明显的item_1和item_3之间的信息应该更加靠谱些,因此Weighted Slope One算法的做法就是给计算次数多的预测赋予更更高的权重,因此最终的预测是((3-1)*3+(4-2)*2)/(3+2)=2.

Weight Slope的公式是:

下面提供一个简单的wso的python代码:

myd={}  # data container in the memory
f=open('../testdata/cn')
for line in f:line=line.strip()if not line: continuemyl=line.split()user=myl.pop(0)myd[user]=[float(i) for i in myl]   def predict(user,item):tp=0tf=0for i,rate in enumerate(myd[user]):if myd[user][i]<0: continue  # the one has not been rate, so passdiff=0   # differencefres=0  # frequencyfor us in myd.keys():if us==user: continueif myd[us][item]>0 and myd[us][i]>0:   # have rateddiff+=myd[us][item]-myd[us][i]fres+=1tf+=1tp+=(rate+diff/fres)*fresreturn tp/tfif __name__=='__main__':p1=predict('C',1)print p1p2=predict('D',2)print p2  

这端代码的输入是一个cn的文件,内容是:

A 2 3 1

B 3 5 3

C 4 -1 2

D 3 4 -1

其中的-1表示没有打分,需要预测。

实际中的数据量往往是很大的,需要采取一些其他方法来实现大数据下的运算。我曾用hadoop实现了一个wso,用了5个map-reduce过程!

转载于:https://www.cnblogs.com/naniJser/archive/2013/03/22/2976508.html

Weighted Slope One 算法相关推荐

  1. slope one算法matlab,求助我这个寻峰算法该怎么提高灵敏度

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本人不懂matlab,现在有网上找的线程的寻峰算法函数,我已经可以从程序中调用,但是对数学这块不懂,我不知道该传什么样的参数值,以下是.m寻峰算法的说明, ...

  2. Apache Mahout中推荐算法Slope one源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 关于推荐引擎 如今的互联网中,无论是电子商务还是社交网络,对数据挖掘的需求都越来越大了,而推荐引擎正是数据挖掘完美体现:通过分 ...

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

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

  4. Slope one推荐算法原理

    推荐算法Slope one的原理 Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢? U ...

  5. slope one 推荐算法python 代码_基于协同的SlopeOne推荐算法原理介绍和实现

    Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法. --文章概要 该篇文章主要介绍Slope One算法.Slope ...

  6. slope one matlab代码,经典推荐算法之 Slope one

    title: 经典推荐算法之 Slope one date: 2017/5/16 15:29:24 tags: 推荐系统 Machine Learning categories: 推荐系统 Slope ...

  7. 语音去混响算法之WPE( Weighted Prediction Error for speech dereverberation)

    目录 简介 信号模型 WPE 算法(Weighted prediction error) TVG 模型(time-varying Gaussian model) 目标函数 迭代求权重离线解 参考文献 ...

  8. Mahout推荐算法API详解

    Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, ...

  9. [论文笔记]slope one predictors for online rating-based collaborative filtering

    作者:Daniel Lemire, Anna Maclachlan. 论文概要: slope-one是一种item-based的协同过滤算法,核心思想是线性回归f(x) = x+b.根据用户对item ...

最新文章

  1. AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生
  2. Redis + Tomcat + Nginx 集群实现 Session 共享
  3. 有没有python与机械结合的工作-用 Python 自动化办公,我与大神之间的差距一下就...
  4. 百度工程师控制公司服务器“挖矿”:4个月赚10万 判刑3年
  5. Leetcode 560. Subarray Sum Equals K
  6. 使用Freemarker来页面静态化,与Spring整合使用
  7. ZooKeeper的工作原理
  8. Windows Phone开发(44):推送通知第二集——磁贴通知
  9. 聚类——层次聚类(Hierarchical Clustering)
  10. 文本分类的python实现-基于Xgboost算法
  11. 在springboot中一些框架和插件的配置
  12. php查询过滤字段,php 字符过滤类,用于过滤各类用户输入的数据
  13. 计算机excel函数lookup,详细介绍数据查找VLookup函数在Excel中的应用举例
  14. 通过定位position=fixed实现网页内容的固定层效果
  15. 大数运算(加减乘除,阶乘,取余)
  16. Python 使用 LibSVM
  17. 关于ROS功能包里package.xml和CMakeList.txt的源码分析
  18. Quartz技术简介
  19. 淘宝技术发展 - 子柳撰写
  20. C语言总结这一篇就够了(不收藏必后悔系列)

热门文章

  1. 9行代码提高少样本学习泛化能力! ICLR2021 Oral,代码已开源
  2. 22课时、19大主题,CS 231n进阶版课程视频来了
  3. ROBEL:谷歌推出低成本机器人训练平台
  4. 到华为去,到AI最前沿去~ 华为杭州研究所欢迎您!
  5. ECCV18 | 无监督难分样本挖掘改进目标检测
  6. 【python教程入门学习】7个习惯提升python效率
  7. 民办大学计算机专业教师,干货!民办大学和独立院校教师创新排行榜,这五个高校最亮眼...
  8. 一切为了开放科学!Papers with Code 新增CS、物理、数学、统计学等多个学科
  9. 基础知识(十二)Opengl回顾记录
  10. 机器学习(二)逻辑回归