Programming Collective Intelligence 读书笔记之 Recommandation

第二章进入正题,Making Recommandation 引入一个重要概念: Collabrative Filtering, 即协同过滤。

书中以电影评价系统和推荐系统为例解析协同过滤的概念及应用。首先以nested dictionary为载体用python建立一系列包含人名,片名,评分的数据。然后抛出问题: how to find similar users? 即如何从海量数据分析中寻获品位相似的用户。

相似度计算体系:Euclidean Distance Score (欧式距离)
欧式距离在数学中的定义为N维欧式空间两点间的距离。书中以简单的二维空间为例



以书中图片为例,建立以两个片名为坐标轴的二维坐标系,将人名和他们对应的对于两部影片的评分作为点置于图中。然后计算每一个维度的距离平方,相加后再做方计算出值来表示这个距离。暂将这个值标位D。很明显,D的值随着两点间的距离变大而变大,取值范围飘忽不定。进一步优化公式,算的1/(1+D), 使得这个值永远介于0和1之间,数值越接近一,样本的相似度越高。

相似度计算体系:Pearson Correlation Score (皮尔逊相关系数)
这个系数是用来判断两组数的线性相关程度的。这个系数的计算更加复杂但是更为精确。大黄试着用大白话理解这里的意义,用电影评价的例子来看,有三个人A,B,C,其中A,B的欧式距离比B,C要小,但是观察数据发现,A,B对于很多电影的评分都有分歧,即对于某些电影A给分高,B给分低,另外一些相反。但是B,C的评价体系却非常相似,即对于某些电影B给了“高分”,C也是。这里的高分我用引号括起来,意思是相对高分,也就是在B自己的体系里,某一部电影分数高,但绝对分数并不一定。换一种说法就是B,C对于电影的绝对分数评价差距较大,但是对于这些电影给出的排名却非常一致,这时候我们就需要这个皮尔逊相关系数来判定他俩才是相似度较高的用户了。皮尔逊相关系数的数学表达式为 x和y的协方差/(x的标准差*y的标准差),这个结果会落在-1和1之间,越接近1,相关性越强。


CodeCogsEqn.gif

两两的问题解决后,我们自然可以以某一个目标用户为基础,计算所有其他用户和他的相关性,并找出和他相关性最高的那个人,从而将那个人的电影推荐给目标用户

在解决了上述相关性问题后,作者再次抛出疑问,找到一个相似性很高的用户是否已经足够去推荐电影,会不会出现一些情况比如有一些很适合我的电影,相关性很高的那个人并没有看过或者评分过,或者相关性很高的那个人在某一部电影的评分上和其他人完全相悖,给了个很低的分数,但其实在绝大部分人眼中那是部好电影。如果仅仅使用用户相关性,这样的电影推荐就会被忽视。这是下一个需要解决的问题。
解决这个问题的途径便是利用权重。再次截取书中的图表:


P2.PNG

图片中,每个用户和目标用户都有相关度数值,作为权重,都有对于某一部作品的评分,相乘后的积再求和,除以权重,得到最后的分数,可以看到最后一行的数据为判定推荐与否的终值。

下一部分书中简要介绍了另一个维度的推荐,即推荐产品相关性较高的其他产品,从编程的角度这并不难办,即将python的dictionary变更Key和Value来重新计算相关性。这种推荐常见于对目标用户数据不足的情况,比如书中列举的在amazon买书时,进入该书的页面后会看到“买了这本书的用户还买了”这样的推荐版块。

这一章节到此依然没有结束,作者引入了两个新概念:User-Based Filtering和Item-Based Filtering。之前的例子中基本都是基于用户的过滤,但是对于一个非常庞大,拥有指数级用户的网站或者系统,做这样的过滤是非常缓慢的,而且由于用户的行为非常频繁,所以计算的结果也需要实时变更,那么这个时候这种策略将失去优势。于是转向了基于项目的过滤,对于某一用户,先找出他的历史数据,将位列前排的项目提取出来,然后通过类似于前面介绍的权重体系获取其他项目的相关性。这样做的好处是项目的更新频率相对用户是更低的,很多计算不需要实时的数据,可以预先计算保留结果,大大提高了推荐系统的效率和速度。这种策略特别时候用户基数很大的情况。

最后,对于如何选择基于用户还是基于项目,作者给出一条结论:“Item-based filtering usually outperforms user-based filtering in sparse datasets, and the two perform about equally in dense datasets”。这样的结论是基于数据量和运算速度的,这两种过滤方式在现实中都有实际存在和应用的场景,不可以一概选择其中一种。

本章最后的练习中提到了另一个指标:Tanimoto score。这个指标是用于计算符号度量或布尔值度量的个体间的相似度的。当参考样本无法量化评分,而只是例如用是或否,大小这样的指标来衡量,则Tanimoto score是用来计算相似度的一个好方式。


CodeCogsEqn (1).gif

公式很简单,两者相同选项总数除以两者不同选项总数和。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容