零、引入
亚马逊的推荐算法,主要结合两类信息来推荐:1.用户A评论的a书(比如说给0-5颗星),2.其他评论过a书的用户(比如B,C,D等等),他们评论过的其他书的信息。由于这种推荐算法借助了别的用户的评论信息,所以被称作协作过滤算法。假如你想要被推荐一本书,系统搜索其他用户看过的书,发现这本和你的风格更像,然后就把这本书推荐给你。那么怎么样才能解决这个“更像”的问题呢?
现在有A,B,C三个同学看过了两本书a和b,并且分别对这2本书做了如下评星:
a书 | b书 | |
A同学 | 5星 | 5星 |
B同学 | 2星 | 5星 |
C同学 | 1星 | 4星 |
我们现在有一个同学X,他也看过a书和b书(这是前提!!!),他对a书评4星,b书评2星,通过A,B,C同学的对这两本书的评星记录来分析ABC当中哪个同学“更像”X同学的风格,然后就可以从“更像”的这个同学看过的而X没看过的书中推荐几本给X,在协同过滤算法中我们有四种方法来解决这个“更像”的问题。
一、Manhattan Distance 曼哈坦距离
我们可以把每个同学的评星记录写成坐标形式,比如B同学对a,b分别评2星和5星,那么就记作(2,5),那么X同学就是(4,2)。曼哈坦距离简单的讲就像高中时候学的求两个坐标水平距离和垂直距离之和,那么就可以写成绝对值求和运算,即
distance(BX) = |2-4| + |5-2| = 5,
distance(AX) = |5-4| + |5-2| = 4,
distance(CX) = |1-4| + |4-2| = 5.
可见A同学和X同学距离比BC要小,那么我们就可以认为A同学的读书风格“更像”X同学,并且可以从A同学的读书记录中挑一本不是a,b的书来推荐给X同学。
曼哈坦距离计算起来速度快,适合大规模数据计算。
二、Euclidean Distance 欧几里得距离
同样使用方法一中的坐标形式,欧几里得距离,其实就是初中学过的两个坐标之间的直线距离,如下,勾股定理就搞定了,结果依然是A同学“更像”X同学。。
distance(BX) = sqrt((2-4)**2 + (5-2)**2) = 3.61,
distance(AX) = sqrt((5-4)**2 + (5-2)**2) = 3.16,
distance(CX) = sqrt((1-4)**2 + (4-2)**2) = 3.61.
拓展:
上面介绍的都是两本书,评星之后的坐标形式是二维的(x,y),如果有更多书的评星记录是不是得出的“更像”程度会更深呢?当然可以这样子,如果有多本书的话,那么就不再是二维平面距离了,就是多维空间的欧几里得距离了,举个栗子:
a | b | c | d | e | f | g | h | |
X同学 | - | 4 | 1 | 4 | - | - | 4 | 1 |
A同学 | 3 | - | - | 5 | 4 | 2.5 | 3 | - |
B同学 | - | 4.5 | 4 | 5 | 5 | 4.5 | 4 | 4 |
distance(AX) = sqrt((5-4)**2 + (3-4)**2) = 1.414,
distance(BX) = sqrt((4.5-4)**2 + (4-1)**2 + (5-4)**2 + (4-4)**2 + (4-1)**2) = 4.387,
A和X更像,那么就可以将A看过X没看过的a书,e书,f书推荐给X同学了。
以上一和二方法都是属于闵可夫斯基距离(明氏距离),它是曼哈坦距离和欧几里得距离的推广,可到维基脑补。
三、Pearson Correlation Coefficient 皮尔逊相关系数
a | b | c | d | e | f | g | h | |
X同学 | - | 4 | 1 | 4 | - | - | 4 | 1 |
C同学 | 2 | 3.5 | 4 | - | 2 | 3.5 | - | 3 |
B同学 | - | 4.5 | 4 | 5 | 5 | 4.5 | 4 | 4 |
X同学评星不是1就是4,C同学评星主要分布在2~4,B同学评星主要是4~5,这并不是好现象,如果说X同学的1是差评,4是好评,那么B同学只给打4~5之间,B的4是差评还是好评呢?我倒觉得B的4是差评,5是好评。这时候我们遇到了grade inflation(等级膨胀)的问题,就好比现在有些学校学生成绩普遍都是80分以上(80~85差,85~90中,90~95良,95+优),而有的学校依然是采用传统的方法(70分以下差,70~80中,80~90良,90+优),这样子一来,使用方法一和二就不具有普遍可比性,我们采用皮尔逊相关系数来解决“更像”的问题。公式如下:r值在[ -1,1 ]之间,1表示正相关性最强,0表示不相关,-1表示负相关性最强。我们求出r(XB)和r(XC),然后选择最大的作为推荐者,将他看过,而X没有看过的书推荐给X。
四、Cosine Similarity 余弦相似度
余弦相似度,类似与皮尔逊相关系数,它也是衡量两组变量的相关程度的,值在[ -1,1 ]之间,1表示正相关性最强,0表示不相关,-1表示负相关性最强,公式如下:
这种方法常用于对比变量当中零值较多,即未评星的书籍较多的情况。