算法笔记\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)
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_40206371/article/details/131659607

posted on   ExplorerMan  阅读(34)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2019-11-07 详解Nginx中HTTP的keepalive相关配置
2019-11-07 nginx的 keepalive_timeout参数是一个请求完成之后还要保持连
2019-11-07 nginx 并发数问题思考:worker_connections,worker_processes与 max clients
2019-11-07 关于 Nginx upstream keepalive 的说明
2019-11-07 如何区分浏览器发起的是基于http/1.x还是http/2的请求?
2019-11-07 关于limit_req和limit_conn的区别
2019-11-07 nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示