常见的相似性度量方法

有如下几种计算相似性方法:

点积相似度

X ⋅ Y = ∣ X ∣ ∣ Y ∣ c o s θ = ∑ i = 1 n x i ∗ y i \begin{aligned} X \cdot Y &= |X||Y|cos\theta \\ &= \sum_{i=1}^n x_i * y_i \end{aligned} XY=X∣∣Ycosθ=i=1nxiyi

向量内积的结果是没有界限的,解决办法就是先归一化再相乘,就是下面的余弦相似度了。

余弦相似度

X ⋅ Y = ∑ i = 1 n x i ∗ y i ∑ i = 1 n ( x i ) 2 ∗ ∑ i = 1 n ( x i ) 2 X \cdot Y = \frac{\sum_{i=1}^n x_i * y_i}{\sqrt{\sum_{i=1}^n (x_i)^2} * {\sum_{i=1}^n (x_i)^2}} XY=i=1n(xi)2 i=1n(xi)2i=1nxiyi

余弦相似度衡量两个向量在方向上的相似性,并不关注两个向量的实际长度,即对绝对数据不敏感。

示例

用户对内容评分,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,相似度为负值,显然更加符合现实。

注:为什么是在所有用户对同一物品的打分上求均值,每个人打分标准不一,对所有用户求均值,等于是所有用户的打分映射到了同一空间内。上述是在计算两个用户的相似度,以此类推计算两个物品的相似度,就要计算所有物品的均值了。

修正的余弦相似度可以说就是对余弦相似度进行归一化处理的算法,公式如下:
s ( A , B ) = ∑ i ∈ I ( R A , i − R i ˉ ) ( R B , i − R i ˉ ) ∑ i ∈ I ( R A , i − R i ˉ ) 2 ∑ i ∈ I ( R B , i − R i ˉ ) 2 s(A, B)=\frac{\sum_{i \in I}\left(R_{A, i}-\bar{R_i}\right)\left(R_{B, i}-\bar{R_i}\right)}{\sqrt{\sum_{i \in I}\left(R_{A, i}-\bar{R_i}\right)^2} \sqrt{\sum_{i \in I}\left(R_{B, i}-\bar{R_i}\right)^2}} s(A,B)=iI(RA,iRiˉ)2 iI(RB,iRiˉ)2 iI(RA,iRiˉ)(RB,iRiˉ)
R A , i R_{A,i} RA,i 表示用户A在商品i上的打分, R i ˉ \bar{R_i} Riˉ表示商品i在所有用户上的打分均值。

皮尔逊相关系数

Pearson 相关系数是用来检测两个连续型变量之间线性相关的程度,它解决了余弦相似度会收到向量平移影响的问题。取值范围为 [−1,1],正值表示正相关,负值表示负相关,绝对值越大表示线性相关程度越高:
ρ x , y = cov ⁡ ( x , y ) σ x σ y = E [ ( x − μ x , y − μ y ) ] σ x σ y = ∑ i ( x i − x ˉ ) ( y i − y ˉ ) ∑ i ( x i − x ˉ ) 2 ∑ i ( y i − y ˉ ) 2 \begin{aligned} \rho_{\boldsymbol{x}, \boldsymbol{y}} &= \frac{\operatorname{cov}(\boldsymbol{x}, \boldsymbol{y})}{\sigma_{\boldsymbol{x}} \sigma_{\boldsymbol{y}}} \\ &= \frac{E\left[\left(\boldsymbol{x}-\mu_{\boldsymbol{x}}, \boldsymbol{y}-\mu_{\boldsymbol{y}}\right)\right]}{\sigma_{\boldsymbol{x}} \sigma_{\boldsymbol{y}}} \\ &= \frac{\sum_i\left(x_i-\bar{x}\right)\left(y_i-\bar{y}\right)}{\sqrt{\sum_i\left(x_i-\bar{x}\right)^2} \sqrt{\sum_i\left(y_i-\bar{y}\right)^2}} \end{aligned} ρx,y=σxσycov(x,y)=σxσyE[(xμx,yμy)]=i(xixˉ)2 i(yiyˉ)2 i(xixˉ)(yiyˉ)
如果把 x ′ = x − x ˉ , y ′ = y − y ˉ x'=x-\bar{x}, y'=y-\bar{y} x=xxˉ,y=yyˉ ,那么皮尔逊系数计算的就是 x ′ 和 y ′ x' 和 y' xy 的余弦相似度。


参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值