有如下几种计算相似性方法:
点积相似度
向量内积的结果是没有界限的,解决办法就是先归一化再相乘,就是下面的余弦相似度了。
余弦相似度
余弦相似度衡量两个向量在方向上的相似性,并不关注两个向量的实际长度,即对绝对数据不敏感。
示例
用户对内容评分,5分制。A和B两个用户对两个商品的评分分别为A:(1,2)和B:(4,5)。使用余弦相似度得出的结果是0.98,看起来两者极为相似,但从评分上看A不喜欢这两个东西,而B比较喜欢。造成这个现象的原因就在于,余弦相似度没法衡量每个维数值的差异,对数值的不敏感导致了结果的误差。
需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值。
比如A和B对两部电影评分的均值分别是(1+4)/2=2.5,(2+5)/2=3.5。那么调整后为A和B的评分分别是:(-1.5,-1.5)和(1.5,2.5),再用余弦相似度计算,得到-0.98,相似度为负值,显然更加符合现实。
注:为什么是在所有用户对同一物品的打分上求均值,每个人打分标准不一,对所有用户求均值,等于是所有用户的打分映射到了同一空间内。上述是在计算两个用户的相似度,以此类推计算两个物品的相似度,就要计算所有物品的均值了。
修正的余弦相似度可以说就是对余弦相似度进行归一化处理的算法,公式如下:
$R_{A,i}$ 表示用户A在商品i上的打分,$\bar{R_i}$表示商品i在所有用户上的打分均值。
皮尔逊相关系数
Pearson 相关系数是用来检测两个连续型变量之间线性相关的程度,它解决了余弦相似度会收到向量平移影响的问题。取值范围为 [−1,1],正值表示正相关,负值表示负相关,绝对值越大表示线性相关程度越高:
如果把 $x’=x-\bar{x}, y’=y-\bar{y}$ ,那么皮尔逊系数计算的就是 $x’ 和 y’$ 的余弦相似度。
- 皮尔逊相关系数评估的是两个连续型变量的相关性,是两列,比如睡眠与考试成绩的关系
- 余弦相似度评估的是两个向量的相关性,是两行