算法笔记\python 笔记: 相似性度量

本文介绍了多种距离度量方法,包括欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、马氏距离、夹角余弦、汉明距离、杰卡德距离、相关距离以及半正矢距离(球面距离)。这些方法在处理不同类型的数据和问题时有不同的适用性和优缺点,如欧氏距离易受离群点影响,马氏距离则考虑了变量的相关性和量纲。
摘要由CSDN通过智能技术生成
  • 1 欧氏距离

 

1.1 python实现:

from scipy.spatial import distance
distance.euclidean([1,2],[2,1])
#1.4142135623730951

1.2 标准化欧氏距离

先将数据标准化

 

(减去的均值两两抵消)

1.3 欧氏距离缺点

  • 欧式距离一个最大的问题就是会被噪声或是离群点所影响
    • 比如以下两对时间序列:第一组是十个时间点、均值为0方差为1的时间序列,第二组是十个时间点、均值为0方差为0.6的时间序列,其中一个时间序列包含一个离群点
    • 我们可以调整离群点的值使得两对时间序列的欧式距离接近
    • 如果在物理意义上,我们期望这两组时间序列的距离是不一致的,这就说明我们的定义是不合理的
    • 因此我们希望我们的距离定义能够具有普适性,以适应不同时间序列特性的区分(比如后面的闵可夫斯基距离)

 2 曼哈顿距离

又称为城市街区距离

2.1 python 实现

from scipy.spatial import distance
distance.cityblock([1,2],[2,1])
#2

 3 切比雪夫距离

也称为棋盘距离,因为它是两个实值向量之间任意维度上的最大距离

 等价形式

3.1 python实现

from scipy.spatial import distance
distance.chebyshev([1,2],[2,1])
#1

 4 闵可夫斯基距离 minkowski

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离

4.1 闵可夫斯基距离的缺点

  • 各个分量的量纲(scale),也就是“单位”当作相同的看待
  • 没有考虑各个分量的分布(期望,方差等)可能是不同的
    • eg,二维样本(身高,体重),有三个样本:a(180,50),b(190,50),c(180,60)。
      • 那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?

4.2 python实现

from scipy.spatial import distance
distance.minkowski([1,2],[2,1],4)
#1.189207115002721

5 马氏距离 Mahalanobis

  • 有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,
    • 其中样本向量X到μ的马氏距离
    • 其中向量Xi与Xj之间的马氏距离

  • ——>马氏距离和量纲无关,排除变量之间的相关性的干扰

6 夹角余弦

6.1 python实现

from scipy.spatial import distance
distance.cosine([1,2],[2,1])
#0.19999999999999996

 7 汉明距离

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数

例如字符串“11010”与“10011”之间的汉明距离为2。

对向量按元素进行比较,并对差异的数量进行平均

如果两个向量相同,得到的距离是0之间,如果两个向量完全不同,得到的距离是1

from scipy.spatial import distance
distance.hamming([1,2],[2,1])
# 1 
# 第一个元素和第二个元素都不同,所以汉明距离为(1+1)/2=1


distance.hamming([1,2],[1,1])
#0.5
#(1+0)/2=0.5

8 杰卡德距离 Jaccard

8.1 杰卡德相似系数

8.2 杰卡德距离

8.2.1 python 实现

from scipy.spatial import distance
distance.jaccard([1,2],[2,1])
#1


distance.jaccard([1,1],[2,1])
#0.5

9 相关距离

9.1 相关系数

  •  相关系数的取值范围是[-1,1]。
    • 相关系数的绝对值越大,则表明X与Y相关度越高。
    • 当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)

9.2 相关距离

10 半正矢距离 haversine

  • 球面上两点之间的最短距离
    • 常用于导航
    • 经度、纬度和曲率对计算都有影响

10.1 python 实现

from sklearn.metrics.pairwise import haversine_distances
haversine_distances([[1,2],[2,1]])
'''
array([[0.        , 0.87152123],
       [0.87152123, 0.        ]])
'''

11 Sorensen-Dice

 

from scipy.spatial import distance
distance.dice(vector_1, vector_2)

 参考内容:机器学习中的相似性度量总结 (qq.com)

10个机器学习中常用的距离度量方法 (qq.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值