集体智慧编程:第二章,推荐算法

有一个网站,允许用户对她看过的电影打分。一个可能的结果是:

用户1:{电影1=5;电影2=3;电影3=4}

用户2:

用户3:

省略其他用户。

现在网站向一个用户Jack推荐电影,最直接的方式是,找出与Jack品味最接近的人,也就需要把所有用户按照他们与jack的相似度排序。

怎么计算相似度呢?

第一种方式是向量距离,也就是常用的(x1-x2)^2+(y1-y2)^2开根号。

第二种方式是pearson相关系数,利用的是斜率,比如jack喜欢打高分(A:5,B:4)tom喜欢打低分(A:3,B:2),那么还是认为jack和tom是类似的,虽然向量距离相差很远。

----------------------------------------------------------------------------

这样你就找到了与jack类似的人,比如

u1:0.9

u2:0.8

u3:0.2

那么你是否应该直接依赖u1呢,看她推荐的,如果他给某个电影打了高分,而jack又没看过,就推荐?

这样做有两个问题:

1. u1看的电影可能很少,找不到jack没看过的电影;

2. u1可能有独特的口味,对一步烂片可能打高分;

怎么避免这种情况呢,我们还需要对所有电影打分,不过不同用户打分的权重不一样,和我们相似度高的权重高,否则权重低,这样我们就能给所有电影打分,然后推荐分数高的电影给Jack。这样我们就能给某个用户推荐最好的电影。

-----------------------------------------------------------------------------

但是怎么根据一步电影推荐另一部电影呢?可能这个用户什么电影都没看过,但正在浏览一步电影,我们向他推荐类似的电影?

这种情况下,我们需要做一个transform,把之前的数据变成movie:(user1:points)*的格式。然后我们就需要找出电影之间的相似度:

movie1:0.9

movie2:0.8

movie3:0.7

当用户在浏览电影时,系统就会根据相识度列出哪些类似的电影。

----------------------------------------------------------------------------

对于大型购物网站来说,有上千万的商品,一个用户通常只买其中的很小一部分。

user1 {prod1, prod2, prod3….}

如果要计算user和其他user的相似度,计算量非常的巨大。而且每个用户都需要计算一次,实时推荐就比较困难了。

这个时候我们就需要利用基于item的过滤方式。通过获得item:(user:grade)*的数据,利用pearson系数计算出各个item之间的相似度。更重要的是这个item之间的相似度变化比较缓慢,不必频繁的更新。

但是如果只是利用这个相似度,给所有人的推荐就完全一样了,这也不够个性化。怎样才能做出个性化的推荐呢?

假设item的相似度词典是这样的:

  item11 item12 item13 item14
item1 .9 0.8 0.7 .6
item2 .8 .7 0.6 .5

用户给item1和item2打了分的,但是对item1x没打分,怎么根据item1和item2的分推算出item1x的分呢?答案就是

item1的分 * item1与它的相似度+ item2的分* item2与它的相似度

这样就能对item1x进行排序,推荐出用户最喜欢的产品。

--------------------------------------------------------------------------

所以推荐的方法大概有两种,基于item的推荐,以及基于user的推荐。当user和item是很稠密的时候用user的,很稀疏的时候用item的。

计算相似度的两种方法,欧氏距离或pearson相似度,是上述推荐的基础,是衡量item或者user类似程度的手段。

时间: 2024-10-26 07:06:16

集体智慧编程:第二章,推荐算法的相关文章

集体智慧编程-第二章-提供推荐

2.1 协作型过滤 定义:对一大群人进行搜索,对这些人所偏爱的其他内容进行考察,并将他们组合起来构造出一个经过排名的推荐列表. 2.2 判断相似性 欧几里德距离 皮尔逊相关系数 定义:最佳拟合线(best-fit line)的相关系数(最小二乘法中的R) 计算公式 适用场景 非normalized 修正grade inflation 2.3 两种协作型过滤 基于人的协作型过滤 基于物品的协作型过滤 原文地址:https://www.cnblogs.com/ryu-manager/p/930210

集体智慧编程_第二章(提供推荐)_1

前言:最近正在拜读Toby Segaran先生写的集体智慧编程,首先感谢Toby Segaran先生将知识以书本的方式传播给大家,同时也感谢莫映和王开福先生对此书的翻译,谢谢各位的不辞辛苦.首先在写随笔之前,跟各位分享一下我的编程环境:win7系统,python版本是2.7.10,开发环境我选择的是pycharm程序.本书的第一章为集体智慧导言,主要介绍的何为集体智慧和机器学习的相关概念和其局限性,以及与机器学习相关的例子和应用场景.下面开始机器学习第二章--提供推荐的相关内容. 本章主要内容:

集体智慧编程--勘误表(1-4章)

最近在工作之余的时间在阅读集体智慧编程这本书,在随书码字的过程中遇到的一些问题,就在这里记录一下: (注:下面的页码针对于英文的非影印版) chapter1 标题: 没什么说的,浏览下就好. chapter2 提供推荐: 1.书上的源码是基于python 2.x,而在3.x中print是被当作一个函数处理,所以要自己加上括号; 2.在P42利用del.icio.us提供的rss订阅源构建数据集时,这本书发布时间较长的原因,python api pydelicious的 很多接口已经发生了改变,这

集体智慧编程——决策树建模(上)

本文主要介绍一种非常流行的分类算法:决策树分类算法. 例子:一个网站上有多少用户会愿意为某些高级会员功能而支付费用. 步骤一:导入数据: 新建一个treepredict.py的问价,将下面数据写入.数据的具体信息分别是:来源网站,位置,是否读过FAQ,浏览网页数,选择服务类型. my_data=[['slashdot','USA','yes',18,'None'], ['google','France','yes',23,'Premium'], ['digg','USA','yes',24,'B

集体智慧编程(一)推荐系统之欧里几德距离

在网上购物,听歌,看电影的网站上,网站都会根据我们的购物记录,听歌记录或着是观看记录给我们推荐一些商品,音乐或者是电影.那这些推荐系统是怎么实现的呢?首先,推荐一个东西,得是购物者所感兴趣的,那么怎么判断购物者对该物品感兴趣呢?那么,就得根据购物者的记录来判断了,假定购物者所购买的物品都是他所感兴趣的.那么跟该购物者的物品相似的物品就是可以推荐的,这种推荐是基于相似条目的.另外,可以相似的人会大都会有相同的爱好,因此可以根据购物者的该买记录找出相似的购物者,并把相似购物者购买的物品推荐出来,这就

C++ 编程第二章小结

switch()用法的注意事项 1:switch语句中的表达式只能是整形数据,字符型数据和枚举型数据,case后面的产量表达式的类型必须与switch括号后面的类型相匹配 2:各个case(包括default)的出现次序可以任意,每个case在带有break的前提下,case的次序不影响执行结果 循环设计 循环设计的几种分类方法这里介绍几种 1:字符图形类 2:素数判断类 3:逻辑判断类 4:级数逼近类 a:对于图形类的基本循环格式一般是 for(int i = 1; i < 10 ;i ++)

读书笔记:集体智慧编程(1)

概述: 协作性过滤,是一种目前广泛运用于电子商务.交友网站.在线广告等互联网领域的一项技术.其主要作用是为指定用户在广大的用户群中找到品味相同或者相似的人,从而帮助网站针对性的推荐产品给特定的用户,与此同时,用户本人也可以从一堆纷繁复杂的信息中,迅速找到自己喜欢的.感兴趣的那部分信息. 其主要有两种实现方法,一种是基于用户的(user-based),即通过分析用户间的相似性,生成最近的邻居,将邻居中“得分”最高的项目推荐给用户:另一种是基于物品的(item-based),即通过分析用户群体对物品

集体智慧编程中相关章节对应论文数

准备开题报告了,先要熟悉一下领域范围,<集体智慧编程>参考一下论点.简单的思路是看一下哪个话题最热门,用google学术来衡量一下论文数,虽然不够精确但是足以反应一点什么. 当然是选择最近比较热门的,同时参考一下国内的论文数目情况. 关键字 总的 2014 国内总数 2014 推荐 2,480,000 42,600 223,124 2728 协同过滤 194,000 4,350 11,239 112 聚类 2,550,000 54,600 141,003 1598 搜索与排名 2,120,00

集体智慧编程——决策树建模(下)

一.决策树的显示: 前面我们已经得到了一棵决策树,下一步也许我们该进行数的浏览了.下面这段函数就是一个以纯文本的方式显示决策树的方法,虽然输出不是很美观,但是对于显示节点不是太多的树而言,这也是一种简单的方式. def printtree(tree,indent=''): if tree.results!=None: print str(tree.results) else: print str(tree.col)+':'+str(tree.value)+'?' print indent+'T-

《集体智慧编程》 第三章 发现群组 笔记儿

啦啦啦聚类算法~ 我刚看到这一章的时候内心是崩溃的,许多傻瓜软件点一下鼠标就能完成的事儿,到书里这一章需要许多行代码来完成,也说明了,学数据挖掘,算法real重要.. 本章需要安装: feedparser(第二章安装pydelicious已经安装过了,pip install即可) BeautifulSoup,我也不记得自己是怎么装上的了,据说可以easy_install,大家试一试. PIL,下载地址:http://pythonware.com/products/pil/ 还涉及到一些正则表达式