个性化推荐系统的简单实现
by 于哲 2014.7.11
!
⺫⽬目 录
• 课题背景介绍
• 算法介绍
• 系统介绍
• 运⾏行
• Q&A
课题背景
互联⺴⽹网的出现和普及给⽤用户带来了⼤大量的信息,
满⾜足了⽤用户在信息时代对信息的需求,但随着⺴⽹网络的
迅速发展⽽而带来的⺴⽹网上信息量的⼤大幅增⻓长,使得⽤用户
在⾯面对⼤大量信息时⽆无法从中获得对⾃自⼰己真正有⽤用的那
部分信息,对信息的使⽤用效率反⽽而降低了,这就是所
谓的信息超载(information overload)问题。
!
解决信息超载问题⼀一个⾮非常有潜⼒力的办法是推荐
系统,它是根据⽤用户的信息需求、兴趣等,将⽤用户感
兴趣的信息、产品等推荐给⽤用户的个性化信息推荐系
统。
推荐系统的基本要素
1.推荐候选对象
!
2.⽤用户
!
3.推荐⽅方法
协同过滤算法
⺫⽬目前⽤用的⽐比较多、⽐比较成熟的推荐算法是协同过滤
(Collaborative Filtering,简称CF)推荐算法。从92年
开始,发展到现在也有20年了。CF的基本思想是根据⽤用
户之前的喜好以及其他兴趣相近的⽤用户的选择来给⽤用户
推荐物品。
!
CF分为两个过程,⼀一个为预测过程,另⼀一个为推荐
过程。预测过程是预测⽤用户对没有购买过的物品的可能
打分值,推荐是根据预测阶段的结果推荐⽤用户最可能喜
欢的⼀一个或Top-N个物品。
思想:把和你有相似爱好的其他的⽤用户的物品推荐给你。
如果⽤用户A喜欢物品a,⽤用户B喜欢物品a、b、c,⽤用户C喜
欢a和c,那么认为⽤用户A与⽤用户B和C相似,因为他们都喜
欢a,⽽而喜欢a的⽤用户同时也喜欢c,所以把c推荐给⽤用户
A。
可以推荐⾳音乐,电影。
!
涉及到:1.相似性度量,2.邻居⽤用户的计算(通过相似性
度量)kNN聚类算法
!
基于⽤用户的协同过滤
item1 item2 item3 item4 …
user1 2.1 4 1 none
user2 none 2 3.1 4.8
user3 3 2.8 4.1 5
…
user1向量 u1=(2.1, 4, 1, 0, …)
!
user2向量 u2=(0, 2, 3.1, 4.8, …)
!
计算u1与u2的距离
!
!
基于⽤用户的协同过滤
相似性度量
在模式识别、计算机视觉等多个领域,都会涉及到相似性的
度量这⼀一问题,⽤用来衡量不同对象间的差异性(距离)或相似
性(相似度)。这⾥里的对象可以是⺴⽹网⻚页,图像,也可以是⽂文本,
集合,但最终在数学上都可以表⽰示为向量或者向量的集合。
!
这⾥里假设两个向量为x,y,他们分别为n维的向量
X=(x1,...,xn),Y=(y1,...,yn)。距离函数d(x,y)或相似度函数
s(x,y)。
!
举例:⽪皮尔逊相关系数
公式:
1 表⽰示变量完全正相关, 0 表⽰示⽆无关,-1 表⽰示完全负相
关。
!
!
常⻅见距离测量公式:
!
欧⼏几⾥里得距离,⽪皮尔逊相关系数,闵可夫斯基距离,曼哈
顿距离,切⽐比雪夫距离,⻢马⽒氏距离,余弦相似度,汉明距
离,杰卡德相似系数…
!
!
!
!
距离函数各有优缺点,如变量数越多,欧式距离的区分能
⼒力就越差,pearson系数可以忽略⽤用户间的评判习惯。
kNN算法
KNN算法是机器学习⾥里⾯面⽐比较简单的⼀一个分类
算法,整体思想⽐比较简单:计算⼀一个点A与其他所
有点之间的距离,取出与该点最近的k个点,然后
统计这k个点⾥里⾯面所属分类⽐比例最⼤大的,则点A属
于该分类。
!
时间复杂度n(n-1)/2
1)算距离:给定测试对象,计算它与训练集中的每个
对象的距离
!
2)找邻居:圈定距离最近的k个训练对象,作为测试
对象的近邻,k的⼤大⼩小很重要,k=3时,红⾊色占2/3,k=5
时,蓝⾊色占3/5
!
3)做分类:根据这k个近邻归属的主要类别,来对测
试对象分类
类别的判定
!
1.投票决定:少数服从多数,近邻中哪个类别的点最多就分为
该类。
!
2.加权投票法:根据距离的远近,对近邻的投票进⾏行加权,距
离越近则权重越⼤大(权重为距离平⽅方的倒数)
!
!
优点
!
简单,易于理解,易于实现,⽆无需估计参数,⽆无需训练
!
!
缺点
!
懒惰算法,对测试样本分类时的计算量⼤大,内存开销⼤大,评分慢
!
可解释性较差,⽆无法给出决策树那样的规则。
k增⼤大时,
准确率和召唤率并不和k呈线性关系
覆盖率减⼩小,流⾏行度增加,因为更倾向于推荐热⻔门产品
监督学习&&⽆无监督学习
1.有监督学习(supervised learning):对具有概念标记
(分类)的训练样本进⾏行学习,以尽可能对训练样本集外
的数据进⾏行标记(分类)预测。这⾥里,所有的标记(分类)
是已知的。因此,训练样本的岐义性低。⽐比如kNN算法。
just like ⼤大⼈人教⼩小孩,这是⻦鸟啊,那是房⼦子啊~⻅见得多了泛
化概念⾃自⼰己也认识~
!
2.⽆无监督学习(unsupervised learning):对没有概念标
记(分类)的训练样本进⾏行学习,以发现训练样本集中的
结构性知识。这⾥里,所有的标记(分类)是未知的。因此,
训练样本的岐义性⾼高。⽐比如聚类算法。
just like看画展,看得多了⾃自⼰己会区分派别,哪个更朦胧~
哪个更写实~
基于⽤用户的协同过滤预测
⽤用户1: ⼩小⽶米盒⼦子: 1*0.25 = 0.25
note2: 1*0.25 = 0.25
蜡烛: 1*0.25 = 0.25
⽤用户2: 润肤霜: 1*0.8 = 0.8
⽤用户1&⽤用户2: 肥皂: 1*0.8+1*0.25=1.05
User-based算法存在两个重⼤大问题:
1. 数据稀疏性。⼀一个⼤大型的电⼦子商务推荐系统⼀一般有⾮非常多的物
品,⽤用户可能买的其中不到1%的物品,不同⽤用户之间买的物品重叠性
较低,导致算法⽆无法找到⼀一个⽤用户的邻居,即偏好相似的⽤用户。
2. 算法扩展性。最近邻居算法的计算量随着⽤用户和物品数量的增
加⽽而增加,不适合数据量⼤大的情况使⽤用。
!
Item-based
基本思想是预先根据所有⽤用户的历史偏好数据计算物品之间的相似
性,然后把与⽤用户喜欢的物品相类似的物品推荐给⽤用户。还是以之
前的例⼦子为例,可以知道物品a和c⾮非常相似,因为喜欢a的⽤用户同
时也喜欢c,⽽而⽤用户A喜欢a,所以把c推荐给⽤用户A。
!
因为物品直接的相似性相对⽐比较固定,所以可以预先在线下计算好
不同物品之间的相似度,把结果存在表中,当推荐时进⾏行查表。
基于物品的协同过滤算法
ItemCF不利⽤用物品的内容属性计算物品之间的相似度。
主要通过分析⽤用户的⾏行为记录物品之间的相似度。
!
1.计算物品之间的相似度
2.根据物品的相似度和⽤用户的历史⾏行为给⽤用户产⽣生推荐
!
例如:|N(i)|为喜欢物品i的⽤用户数
c[i][j]记录了同时喜欢物品i和物品j的⽤用户数
⼀一般来说,同系列,同国家,同⻛风格,同地区的电影
有较⼤大相似度
预测⽤用户对物品的评分
!
!
!
!
N(u)是⽤用户喜欢的物品集合
!
S(j,k)是与物品j最相似的K个物品
!
是物品j和物品i的相似度
!
是⽤用户u对物品i的兴趣(隐反馈数据,如果⽤用户对物品i有
!
过⾏行为,可令等于1)
k增加时
!
精确度和召回率不呈线性关系,适当选取k值
降低覆盖率
流⾏行度逐渐增⾼高,后趋于平稳(与UserCF不同)
系统技术构成
• 基于Python语⾔言实现
• 依赖第三⽅方库Numpy、Scipy
• 协同过滤算法、kNN聚类算法
• 距离测量公式,如⽪皮尔逊相关系数等
系统功能图
recommendation system
similarityrecommendermodeldistance
参考
1.推荐系统实践-响亮
2.机器学习实战
3.crab
Q&A
谢谢

推荐系统的简单实现