几种距离的度量方式

简介: 几种距离的度量方式

欧氏距离(Euclidean Distance)


欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。


1.png


二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离:


2.png


三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:


3.png


n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量):


4.png


Matlab计算欧氏距离:


Matlab计算距离使用pdist函数。若X是一个m×n的矩阵,则pdist(X)将X矩阵每一行作为一个n维行向量,然后计算这m个向量两两间的距离。


X=[1 1;2 2;3 3;4 4];

d=pdist(X,‘euclidean’)

d=1.4142 2.8284 4.2426 1.4142 2.8284 1.4142


曼哈顿距离(Manhattan Distance)


顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。


111.png


二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离:


5.png


n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离:


6.png


Matlab计算曼哈顿距离:


X=[1 1;2 2;3 3;4 4];

d=pdist(X,‘cityblock’)

d= 2 4 6 2 4 2


切比雪夫距离 (Chebyshev Distance)


国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。


7.png


二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离:


8.png


n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的切比雪夫距离:


9.png


Matlab计算切比雪夫距离:


  X=[1 1;2 2;3 3;4 4];
  d=pdist(X,'chebychev')
  d= 1 2  3   1   2  1


闵可夫斯基距离(Minkowski Distance)


闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。

闵氏距离定义:

两个n维变量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:


10.png


其中p是一个变参数:


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


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


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


因此,根据变参数的不同,闵氏距离可以表示某一类/种的距离。


闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。

e.g. 二维样本(身高[单位:cm],体重[单位:kg]),现有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c的闵氏距离。但实际上身高的10cm并不能和体重的10kg划等号。

闵氏距离的缺点:

(1)将各个分量的量纲(scale),也就是“单位”相同的看待了;

(2)未考虑各个分量的分布(期望,方差等)可能是不同的。


Matlab计算闵氏距离(以p=2的欧氏距离为例):


 X=[1 1;2 2;3 3;4 4];
  d=pdist(X,'minkowski',2)
  d=
    1.4142    2.8284    4.2426    1.4142    2.8284    1.4142


标准化欧氏距离 (Standardized Euclidean Distance)


定义: 标准化欧氏距离是针对欧氏距离的缺点而作的一种改进。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的“标准化变量”表示为:


11.png


标准化欧氏距离公式:


12.png


如果将方差的倒数看成一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance)。

Matlab计算标准化欧氏距离(假设两个分量的标准差分别为0.5和1):


X=[1 1;2 2;3 3;4 4];
  d=pdist(X,'seuclidean',[0.5,1])
  d=
    2.2361    4.4721    6.7082    2.2361    4.4721    2.2361


马氏距离(Mahalanobis Distance)


马氏距离的引出:


13.png


上图有两个正态分布的总体,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近?或者说A有更大的概率属于谁?显然,A离左边的更近,A属于左边总体的概率更大,尽管A与a的欧式距离远一些。这就是马氏距离的直观解释。


概念:马氏距离是基于样本分布的一种距离。物理意义就是在规范化的主成分空间中的欧氏距离。所谓规范化的主成分空间就是利用主成分分析对一些数据进行主成分分解。再对所有主成分分解轴做归一化,形成新的坐标轴。由这些坐标轴张成的空间就是规范化的主成分空间。


马氏距离概念


14.png


定义:有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到μ的马氏距离表示为:


15.png


向量Xi与Xj之间的马氏距离定义为:


16.png


若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则Xi与Xj之间的马氏距离等于他们的欧氏距离:


17.png


若协方差矩阵是对角矩阵,则就是标准化欧氏距离。


欧式距离&马氏距离:


18.png


19.png


马氏距离的特点:

量纲无关,排除变量之间的相关性的干扰;

马氏距离的计算是建立在总体样本的基础上的,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;

计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。

Matlab计算马氏距离:


 X=[1 2;1 3;2 2;3 1];
 d=pdist(X,'mahal')
 d=
        2.3452    2.0000    2.3452    1.2247    2.4495    1.2247


余弦距离(Cosine Distance)


几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。

二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:


20.png


两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:


21.png


即:


22.png


夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。


Matlab计算夹角余弦(Matlab中的pdist(X, ‘cosine’)得到的是1减夹角余弦的值):


 X=[1 1;1 2;2 5;1 -4];
  d=1-pdist(X,'cosine')
  d=
    0.9487    0.9191   -0.5145    0.9965   -0.7593   -0.8107


汉明距离(Hamming Distance)


23.png


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


The Hamming distance between “1011101” and “1001001” is 2.


  The Hamming distance between "2143896" and "2233796" is 3. 
  The Hamming distance between "toned" and "roses" is 3.


汉明重量:是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,如果向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。


应用:汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。比如在信息编码过程中,为了增强容错性,应使得编码间的最小汉明距离尽可能大。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。


Matlab计算汉明距离(Matlab中2个向量之间的汉明距离的定义为2个向量不同的分量所占的百分比):


 X=[0 1 1;1 1 2;1 5 2];
  d=pdist(X,'hamming')
  d=
    0.6667    1.0000    0.3333


杰卡德距离(Jaccard Distance)


杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:


24.png


杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度:


25.png


Matlab计算杰卡德距离(Matlab中将杰卡德距离定义为不同的维度的个数占“非全零维度”的比例):

X=[1 1 0;1 -1 0;-1 1 0];

d=pdist(X,‘jaccard’)

d=

0.5000 0.5000 1.0000


相关距离(Correlation distance)


26.png


相关系数:是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关):


27.png


相关距离:


222.png


Matlab计算相关系数与相关距离:


 X=[1 2 3 4;3 8 7 6];
  c=corrcoef(X') %返回相关系数矩阵
  d=pdist(X,'correlation') %返回相关距离
  c=
    1.0000    0.4781
    0.4781    1.0000
  d=
    0.5219


信息熵(Information Entropy)


以上的距离度量方法度量的皆为两个样本(向量)之间的距离,而信息熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。系统内样本分布越分散(或者说分布越平均),信息熵就越大。分布越有序(或者说分布越集中),信息熵就越小。


29.png

信息熵的由来:请参考博客:XXXXXXXX。

计算给定的样本集X的信息熵的公式:


30.png


参数的含义:


n:样本集X的分类数


pi:X中第 i 类元素出现的概率


信息熵越大表明样本集S的分布越分散(分布均衡),信息熵越小则表明样本集X的分布越集中(分布不均衡)。当S中n个分类出现的概率一样大时(都是1/n),信息熵取最大值log2(n)。当X只有一个分类时,信息熵取最小值0。


目录
相关文章
|
数据安全/隐私保护
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
14026 1
ev4加密视频破解 ev4转换mp4转换工具 【无须授权密码】
|
开发框架 JSON 前端开发
Go主流框架对比:Gin Echo Beego Iris
由于go的标准库非常丰富,尤其是net/http包的存在,基本上把别的语言需要通过框架搞的事情都做了,不用框架光用标准库也能顺畅的开发需求了。
3206 0
|
Kubernetes Cloud Native 安全
云原生|kubernetes|多集群管理之kubeconfig文件配置和使用(定义,使用方法,合并管理多集群)(一)
云原生|kubernetes|多集群管理之kubeconfig文件配置和使用(定义,使用方法,合并管理多集群)
2761 0
云原生|kubernetes|多集群管理之kubeconfig文件配置和使用(定义,使用方法,合并管理多集群)(一)
|
8月前
|
人工智能 自然语言处理 运维
解锁2025企业选型难题:十大智能客服品牌实测榜单与权威解读
智能客服市场进入“主动服务+生态协同”成熟期,企业选型面临同质化、适配难等挑战。本文基于技术实力、场景落地与未来潜力,发布2025年十大品牌实测榜单,涵盖瓴羊、智齿、轻简AI、科大讯飞等主流厂商,从核心技术、行业适配到成本效益全面解析,助力企业精准匹配需求,实现服务升级与效率跃迁。
|
监控 搜索推荐 API
苏宁易购电商 API 接口,家电销售数据精准导航
在数字化时代,苏宁易购电商API接口助力开发者高效获取家电销售数据,实现精准导航,优化销售策略,提升用户体验。本文详解其功能、应用与优势。
|
JSON API PHP
ICP备案查询免费API接口使用教程
本文介绍如何通过接口盒子提供的免费API接口查询域名ICP备案信息,包含请求地址、参数说明及PHP和Python调用示例,适用于开发者快速集成备案查询功能。
1021 1
|
存储 缓存 监控
深入理解Visual Basic内存管理和性能优化
【4月更文挑战第27天】本文探讨了Visual Basic的内存管理和性能优化,包括自动内存管理(垃圾回收)、堆栈区分以及垃圾回收机制的影响。提出减少临时对象创建、选择值类型、优化字符串操作、利用缓存和异步编程等优化策略。同时,讨论了.NET的代际垃圾回收、大对象堆和手动内存管理。通过案例分析和实践建议,强调理解内存模型和监控性能对提升应用性能的重要性。
462 1
|
域名解析 网络协议 数据建模
通配符SSL证书申请教程
本文介绍了如何申请和安装通配符SSL证书的步骤:首先选择DV类型的通配符SSL证书并生成CSR,建议使用DNS方式进行验证,随后在域名注册商处添加相应解析记录,待验证通过后,即可下载SSL证书,整个过程大约需要10-15分钟。
1040 7
|
存储 监控 Linux
【亮剑】在Linux系统中,有一个特殊的目录经常被用户和管理员所忽视——/tmp。
【4月更文挑战第30天】`/tmp`目录在Linux系统中扮演着重要角色,用于存储临时文件,涉及程序运行、系统操作、用户文件及网络通信。它在系统维护、软件开发、数据处理和网络操作等场景中广泛应用。为保障系统稳定和数据安全,需进行权限控制、定期清理、设置磁盘配额、安全审计以及用户教育。理解和管理`/tmp`目录对于优化系统性能和防范风险至关重要。
1152 1
|
JavaScript 前端开发 数据安全/隐私保护
🔒 一文带你了解多文件混淆加密
JavaScript 代码多文件混淆加密可以有效保护源代码不被他人轻易盗取。虽然前端的 JS 无法做到纯粹的加密,但通过一系列的混淆操作,可以让源码变得难以阅读,增加他人复制的难度。强烈推荐您试一试 ipaguard代码加密工具,它能够为您的代码提供更强的保护。