常见的距离计算方式和相似度计算方式

1. 距离计算方式

1.1 欧式距离(直线距离)

x 和 y 分别为两个n维向量,距离计算公式为:

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

当不同维度的量纲不一致时,量纲大的维度权重会变大,解决方式为:

    1). 向量归一化

    2). 欧式距离标准化。其中s_i为第i个维度的标准差(根据整个数据集计算)

         dis(x,y)=\sqrt{\sum_{i=1}^{n}\frac{(x_i-y_i)^2}{s_i^2}}

    3). 马氏距离

        欧式距离:d(\textbf{x},\textbf{y})=\sqrt{(\textbf{x}-\textbf{y})^T(\textbf{x}-\textbf{y})}

        马氏距离:d(\textbf{x},\textbf{y})=\sqrt{(\textbf{x}-\textbf{y})^T {\sum}^{-1} (\textbf{x}-\textbf{y})}

        {\sum}^{-1}表示xy之间的协方差矩阵。

       优点:它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关。马氏距离还可以排除变量之间的相关性的干扰。 

       缺点:夸大了变化微小的变量的作用。受协方差矩阵不稳定的影响,马氏距离并不总是能顺利计算出。

1.2 曼哈顿距离(街区距离)

x 和 y 分别为两个n维向量,距离计算公式为:

dis(x,y)=\sqrt{\sum_{i=1}^{n}|x_i-y_i|}

1.3 切比雪夫距离

dis(x,y)=\lim_{p\rightarrow\infty}(\sum_{i=1}^{n}{|x_i-y_i|}^p)^{1/p}

1.4 明氏距离

明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述。p=1退化为曼哈顿距离;p=2退化为欧氏距离切比雪夫距离是明氏距离取极限的形式。公式为:

dis(x,y)=(\sum_{i=1}^{n}{|x_i-y_i|}^p)^{1/p}

下图给出了一个Lp球的形状随着P的减少的可视化图:

1.5 汉明距离

定义:在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。

场景:在海量物品的相似度计算中可用simHash对物品压缩成字符串,然后使用海明距离计算物品间的距离

2. 相似度计算方式

2.1 余弦相似度

余弦相似度表示两个向量之间夹角的余弦值,向量夹角越小,余弦值越大,越相似。

cos(x,y)=\frac{\sum_{i=1}^{n}{x_i}{y_i}}{\sqrt{\sum_{i=1}^{n}x_i^2}\sqrt{\sum_{i=1}^{n}y_i^2}}

缺点:只能分辨个体在维之间的差异,没法衡量每个维数值的差异(比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性)

修正后的余弦相似度,ai表示所有向量在第i个维度上的均值。

cos(x,y)=\frac{\sum_{i=1}^{n}(x_i-a_i)(y_i-a_i)}{\sqrt{\sum_{i=1}^{n}(x_i-a_i)^2(y_i-a_i)^2}}

2.2 皮尔逊相关系数

协方差表示两个变量的变化趋势,当两个变量变化趋势相同时,协方差为正值,变化趋势相反时,协方差为负值。

cov(x,y)=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{n-1}

虽然协方差能反映两个随机变量的相关程度(协方差大于0的时候表示两者正相关,小于0的时候表示两者负相关),但其数值上受量纲的影响很大,不能简单地从协方差的数值大小给出变量相关程度的判断。

为了消除这种量纲的影响,皮尔逊相关系数用两个变量的协方差除以它们的标准差得到:

cor(x,y)=\frac{cov(x,y)}{\sigma_x\sigma_y}=\frac{E(xy)-E(x)E(y)}{\sqrt{E(x^2)-E^2(x)}\sqrt{E(y^2)-E^2(y)}}=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^2} \sqrt{\sum_{i=1}^{n}(y_i-\bar{y})^2}}

2.3 杰卡德相关系数

衡量两个集合之间的相似度,关心集合之间共同拥有的个体这一问题。

Jaccard(X,Y)=\frac{X \cap Y}{X \cup Y}

Jaccard相关系数只能用于布尔值度量,无法用户实数值之间的差异。

广义Jaccard距离:

J(x,y)=\frac{xy}{||x||^2+||y||^2-xy}=\frac{\sum_{i=1}^{n}x_iy_i}{\sum_{i=1}^{n}x_i^2+\sum_{i=1}^{n}y_i^2-\sum_{i=1}^{n}x_iy_i}

2.4 KL散度

衡量两个取值为正的函数分布之间的相似性。

KL(f(x)||g(x))=\sum_{x \in X}p(x)log\frac{p(x)}{q(x)}

 

参考:https://www.cnblogs.com/arachis/p/Similarity.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值