构建企业级推荐系统:算法、工程实现与案例分析
上QQ阅读APP看书,第一时间看更新

4.7.4 相似度计算

前面讲过,协同过滤算法需要计算两个向量的相似度,本书前面采用的是余弦相似度。其实,计算两个向量相似度的方法非常多,余弦是被证明在很多场景下效果都不错的一个算法,但并不是所有场景使用余弦都是最好的,需要针对不同场景做尝试和对比。在这里,简单罗列一些常用的相似度计算的方法,供大家参考。

1.余弦相似度

前面已经花了很大篇幅讲解了余弦相似度的计算公式,这里不赘述。需要提一下的是,针对隐式反馈(用户只有点击等行为,没有评分),向量的元素要么为1要么为0,直接用余弦公式效果不是很好,本章参考文献[5]针对隐式反馈给出了一个更好的计算公式,具体如下:

其中,ru,p是用户u对标的物p的评分(对于隐式反馈,评分是0或者1,但是本章参考文献[5]针对用户不同的隐式反馈给出了不同的评分,而不是一律用1,比如浏览给1分、收藏给3分、分享给5分等,ru,p取用户u对标的物p所有的隐式反馈行为中得分最高的)。

2.皮尔森相关系数

皮尔森相关系数(Pearson Correlation Coefficient)是一种线性相关系数,用来反映两个变量线性相关程度的统计量。具体计算公式如下:

其中,(X1,X2,…,Xn)和(Y1,Y2,…,Yn)是两个向量,是这两个向量的均值。本章参考文献[9]中有对如何利用皮尔森相关系数做协同过滤的介绍,感兴趣的读者可以参考学习。

3.杰卡德系数

杰卡德系数(Jaccard Coefficient)用于计算两个集合之间的相似度,也比较适合隐式反馈类型的用户行为,假设两个标的物p、q,操作过这两个标的物的用户分别为

那么杰卡德系数的计算公式如下: