推荐算法的秤砣之相似性度量方法解析

132 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

相似性度量


1、余弦相似度

余弦相似度只能度量不同对象在维度之间的差异,没办法对各维度数值的差异进行度量;

cos(u,k)=rujrkjrujrujcos(u, k) = \frac{r_{uj}*r_{kj}}{|r_{uj}|*|r_{uj}|}

公式中,r_uj表示用户u对j物品的评分,r_kj表示用户k对j物品的评分,通过u、k两个用户对同一物品的评分,计算余弦相似度,就可以基于用户(Based-User)进行协同过滤(Collaborative Filter,CF)推荐。

在现实生活中,我们往往会收集两个用户之间共同评分的资源集合,定义为Iset,即通过对多个物品的评分结果计算相似度。

因此,两个用户的相似度计算就变为:

cos(u,k)=jIsetrujrkjjIsetruj2jIsetrkj2cos(u,k) = \frac{\sum_{j∈Iset}{r_{uj}*r_{kj}}}{\sqrt{\sum_{j∈Iset}r_{uj}^2}*\sqrt{\sum_{j∈Iset}r_{kj}^2}}

2、皮尔逊相关系数

皮尔逊相关系数衡量的是两变量的变化趋势;

相同地,皮尔逊系数也可以用于计算两个用户对多个物品的评分结果。bar(r_u)表示用户u对所有物品评分的平均,bar(r_k)表示用户k对所有物品评分的平均。

对于u、k两个用户共同评分的资源集合定义为Iset,则对多个物品评分计算皮尔逊系数,有:

ρ(u,k)=jIset(rujruˉ)(rkjrkˉ)jIset(rujruˉ)2jIset(rkjrkˉ)2\rho(u,k) = \frac{\sum_{j∈Iset}(r_{uj}-\bar{r_u})*(r_{kj}-\bar{r_k})}{\sqrt{\sum_{j∈Iset}(r_{uj}-\bar{r_u})^2}*\sqrt{\sum_{j∈Iset}(r_{kj}-\bar{r_k})^2}}

3、欧式距离

欧式距离是通过向量间的距离来评判向量的相似程度,距离越近就代表越相似,它将对象不同属性之间的差别同等看待,从而使得在很多情况下无法满足实际要求。

在n维空间中,对于两个向量的欧式距离,可以定义为:

d(x,y)=i=1n(xiyi)2d(x,y) = \sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}

用欧几里得距离表示相似度时,可以将其限制在(0,1]区间内,相似度公式定义为:

sim(x,y)=11+d(x,y)sim(x,y)=\frac{1}{1+d(x,y)}

4、加权欧式距离

因此常采用加权欧式距离,通过对不同的属性设置不同的权重来改善传统欧式距离在特征相似性度量中区分能力弱的不足;

由于每个x分量可以表示为一个特征,对于不同特征可以设置不同的评分权重,以提高推荐效果。则可以将欧式距离作如下变换:

d(x,y)=i=1nwi(xiyi)2d(x,y) = \sqrt{\sum_{i=1}^{n}w_i*(x_i-y_i)^2}

5、马氏距离

马氏距离是由统计学家马哈诺比斯(P.C.Mahalanobis)提出的,它是一种能够有效计算两个未知样本集相似度的方法,与欧式距离不同的是,它考虑到了各特征之间的联系与特征之间是尺度无关的,比如体重与身高组成的向量,在欧式距离中等同对待,这样是不恰当的。而马氏距离则不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关,它的计算是建立在总体样本的基础上。

dm(x,y)=(xy)TS1(xy)d_m(x,y) = \sqrt{(x-y)^TS^{-1}(x-y)}

其中,S为x,y满足同一分布的协方差矩阵,关于x:

x=(x1,x2,x3,...,xn)Tx = (x_1, x_2, x_3, ..., x_n)^T

关于μ:

y=(y1,y2,y3,...,yn)Ty = (y_1, y_2, y_3, ..., y_n)^T