您的位置:首页 > 产品设计 > UI/UE

[读书笔记]A Programmer's Guide to Data Mining - chapter 2 Get Started with Recommendation Systems

2013-04-23 13:05 411 查看
这一章的主要内容是讲解 Collaborative filtering.


Contents

How a recommendation system works.

How social filtering works

How to find similar items

Manhattan distance

Euclidean distance

Minkowski distance

Pearson Correlation Coefficient

Cosine similarity

implementing k-nearest neighbors in Python

the Book Crossing dataset

首先我们先看看我们手上的数据:



现在,有一位神秘的MR. X, 他给 Snow Crash 4 星,并且给了The Gril with the Dragon Tattoo 2星的评价,我们需要给MR.X 推荐一本书。那么首先我们需要找到和MR.X最为相似的人。

Manhattan Distance
这是最简单的测量距离的方式

具体公式如下:


那么得到如下的结果:



到这里,我们可以确定Amy和MR.X最为相似,那么我们查看Amy的历史数据,将她最喜欢的Paolo Bacigalupi's The Windup Girl,推荐给MR.X

Euclidean Distance
欧几里得距离实际上就是计算两点之间的直线距离,使用勾股定理即可



然后我们得到对应的结果:



N-Dimensional Scenario
现在看一下N-D空间下的情况





我们计算Angelica和Bill的相似度,这里只需要计算两个人共同评分的项目即可。

manhattan distance



Euclidean Distance



A Flaw




我们发现这种方法计算Hailey和Veronica,Hailey和Jordyn,的距离会出现一些问题,前两个人只有2项共同评分的项目,而后者两人有5个共同评分的项目,这样就出现一个问题,两个距离分别是2维空间和5维空间的距离.

Manhattan Distance 和 Euclidean Distance在没有缺失项目评分的时候工作的很好,但是如何处理这种有空缺项目的情况呢,我们后面会提到。

Minkowski Distance




下面的极限情况被称为Chebyshev distance,我们可以发现这个距离的结果是r的单调函数,也就是r越大,那么距离差越大的那个dimension的距离就会越起主导作用。






一个问题




根据上图计算距离的结果中Angelica和Veronica是最为接近的邻居,我们要向Angelica推荐一个电影的话,遍历Veronica的所有项发现,Angelica都已经看过了,怎么办,我们后面会提到。

诡异的用户评分模式



不同的用户有着自己不同的评分标准,很难说两个用户相同的分值表示相同的意愿。那么如何解决这个问题呢?

Pearson Correlation Coefficient




相关系数:考察两个事物(在数据里我们称之为变量)之间的相关程度。

如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:
(1)、当相关系数为0时,X和Y两变量无关系。
(2)、当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间。
(3)、当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间。

相关系数的绝对值越大,相关性越强,相关系数越接近于1或-1,相关度越强,相关系数越接近于0,相关度越弱。
通常情况下通过以下取值范围判断变量的相关强度:

相关系数 0.8-1.0 极强相关

0.6-0.8 强相关

0.4-0.6 中等程度相关

0.2-0.4 弱相关

0.0-0.2 极弱相关或无相关

由于计算上式需要多次遍历全部数据,这里我们采用他的另外一种形式



下面我们直观的感受一下皮尔逊相关系数表达的含义

下面一张图片是皮尔逊相关系数为1的时候的情况,Clara和Robert的评分匹配成为一条直线



下面这张图片表示的是皮尔逊相关系数为0.91的情况:



很明显皮尔逊相关系数必须要计算两个人共同评分的项目才可以起作用,如果一个人有评分,另一个人没有评分,这种情况讨论他们的相关性没有意义。


Cosine Similarity
我们拿itunes里面的音乐为例子,itunes里面大概有150,000,000首歌曲,但是我们如果比较两个人在音乐上的相似度的话,必然会有很多的音乐是两个人都没有听过的,也就是说两个人会有很多共同播放数为0的曲目,而且会有很多。于是这里我们引入cosine相似度计算,它直接忽略那些0-0的曲目。



[-1,1],-1表示完全负相关,1表示完全正相关

Which similarity measure to use?



好,我们进一步解释为什么数据稀疏的时候,不适合使用以上提到的距离测量法。

Linda 和 Eric 两个人喜欢同种类型的音乐,他们又20首相同的音乐,而且他们对这些音乐的评分的平均差只是0.5.那么这种情况下manhattan 距离 20*0.5 = 10,而欧几里得距离 d = 5^0.5 - 2.236

Jake 和 Linda仅仅共同评价了同一首歌曲,一个人给了5分一个人给了3分,那么两个人之间的距离,manhattan距离是2,欧几里得距离是2.两个数据都表示Jake更加接近Linda。这很明显很不合理。

恩,那么,如果把他没有评分的项目默认设置为0的话呢???

来,我们试一下。这样的话,我们稍微调整一下,给出一个新的场景。

Cooper,Kelsey, and Jake

Jake 评价了25首歌曲,Cooper评价了26首,其中25首和Jake相同,而且平均差值为0.25.

Kelsey评价了150首歌曲,25首和Jake相同,而且平均差值为0.25.

我们的只管感受是COOPER,KELSEY和JAKE的相似度应该是一样的。

但是如果把未评分项默认取值0的话,COOPER会远远的偏离jake。

这种数据稀疏的情况,更适合使用Cosine Similarity。

K-nearest neighbor
以上都是基于单个最相似的人来进行推荐的,但是可能有这样的情况:

Billy和我最相似,但是我可能由于朋友的道义,必须给我的好朋友Bob的歌曲打最高的分数。但这显然不适合推荐给Billy.

那么,我们可以计算出多个相似的人,然后共同推荐。每个人的相似度可以作为他打的分数的权重。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: