距离度量方法

news2024/12/25 8:55:28

距离度量方法

  • 一、欧式距离(Euclidean Distance)
  • 二、余弦相似度(Cosine Similarity)
  • 三、汉明距离(Hamming Distance)
  • 四、曼哈顿距离(Manhattan Distance)
  • 五、切比雪夫距离(Chebyshev Distance)
  • 六、闵可夫斯基距离(Minkowski Distance)
  • 七、Jaccard Index
  • 八、Haversine Distance
  • 九、Sørensen-Dice Index
  • References

世界上最遥远的距离,不是生与死的距离,不是天各一方,而是,我就站在你的面前,你知道我爱你。 —— 木子李

学习数据科学中距离的度量方法,这里有一篇来自知乎的中文博文可以阅读,原文中有的内容就不赘述了,以下只是我对这些距离衡量方法的提炼、思考和理解。

距离本身的意思是,两个地点之间相距的距离,但被延申后距离应该指两个对象之间相异的程度(即有多大的不同或相同),差异不同于远近,因此我不认为计算机中的许多术语翻译成距离是合适的,距离一词容易让人联想到现实中的距离,差异比距离更合适,例如余弦距离,应该叫余弦差异,余弦相似度的翻译是取“差异”的反面。

一、欧式距离(Euclidean Distance)

D ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 D(x,y) = \sqrt{\sum_{i=1}^{n}{(x_i - y_i)^2}} D(x,y)=i=1n(xiyi)2

文章中说:“欧式距离不是尺度不变的,这意味着所计算的距离可能会根据特征的单位发生倾斜”,根据上述公式,即便是同样的距离如100cm和1m,单位为cm所计算出的数值会比单位m“大100倍,这就是根据特征的单位发生倾斜的含义的具体表现之一。

文中又说:“随着数据维数的增加,欧式距离的作用就越小。这与维数灾难(curse of dimensionality)有关。”,这里我貌似理解,但没有实际的例子可供举例。

二、余弦相似度(Cosine Similarity)

D ( x , y ) = c o s ( θ ) = x ⋅ y ∣ ∣ x ∣ ∣ ∣ ∣ y ∣ ∣ D(x,y) = cos(\theta) = \frac{x·y}{||x||||y||} D(x,y)=cos(θ)=∣∣x∣∣∣∣y∣∣xy

当数据是高维,且向量的大小不重要时,使用余弦相似度。

三、汉明距离(Hamming Distance)

又叫海明距离,可用于计算机网络传输时的错误纠正/检测,此处需复习计算机网络。

四、曼哈顿距离(Manhattan Distance)

D ( x , y ) = ∑ i = 1 k ∣ x i − y i ∣ D(x,y) = \sum_{i=1}^{k}{|x_i - y_i|} D(x,y)=i=1kxiyi

“当数据有离散或二进制属性时,此距离似乎很起效。”

五、切比雪夫距离(Chebyshev Distance)

切比雪夫距离定义为两个向量在任意坐标维度上的最大差值。但是它为什么又被称作棋盘距离?

国王可以上下左右斜着走,如果将国王所处位置视作原点,其向量是(0,0),而从该点出发到其它棋格的向量视作(x,y),套用刚刚的“两个向量在任意坐标维度上的最大差值”,则可以得到下面这张图,用来展示国王走到其它棋格的最小步数,来自百度百科。
切比雪夫距离

实践中,切比雪夫距离经常用于仓库物流,道理也简单,机械臂可以同时沿着x轴与y轴移动。

六、闵可夫斯基距离(Minkowski Distance)

D ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p D(x,y) = (\sum_{i=1}^{n}{|x_i - y_i|}^p)^{\frac{1}{p}} D(x,y)=(i=1nxiyip)p1

这么美的公式,会不会有什么直观的几何含义? 换言之,这公式可视化出来是什么样子?在维度是二维(对于上面这个公式就是 n = 2 n=2 n=2)的前提下,图形长这个样子[4],蓝色线的含义是,蓝线上的点与原点 O O O之间的距离,套用上面的公式时,其计算值都一样,类似于等高线,最显眼的形状分别是 p = 1 , 2 , ∞ p=1,2,\infty p=1,2,
在这里插入图片描述

其中,有点意思的是 p = ∞ p=\infty p=的推导过程,我们只取两个点,一个点是 ( x , y ) (x,y) (x,y),一个点是 ( 0 , 0 ) (0,0) (0,0),维度 n = 2 n = 2 n=2,由于计算时带了绝对值,所以只考虑第一象限 ( x > 0 , y > 0 ) (x>0, y>0) (x>0,y>0),其余象限可以用对称性推导出来。
D = lim ⁡ p → ∞ [ ( x − 0 ) p + ( y − 0 ) p ] 1 p = lim ⁡ p → ∞ ( x p + y p ) 1 p = y = a x lim ⁡ p → ∞ [ x p + ( a x ) p ] 1 p = lim ⁡ p → ∞ [ ( 1 + a p ) x p ] 1 p = lim ⁡ p → ∞ ( 1 + a p ) 1 p x       ( a > 0 ) D = \lim_{p \rightarrow \infty}[(x-0)^p + (y-0)^p]^{\frac{1}{p}} \\ =\lim_{p \rightarrow \infty}(x^p + y^p)^{\frac{1}{p}} \\ \overset{y=ax}= \lim_{p \rightarrow \infty}[x^p + (ax)^p]^{\frac{1}{p}} \\ = \lim_{p \rightarrow \infty}[(1 + a^p)x^p]^{\frac{1}{p}} \\ = \lim_{p \rightarrow \infty}(1 + a^p)^{\frac{1}{p}}x \space\space\space\space\space(a>0) D=plim[(x0)p+(y0)p]p1=plim(xp+yp)p1=y=axplim[xp+(ax)p]p1=plim[(1+ap)xp]p1=plim(1+ap)p1x     (a>0)
分类讨论:

(1)当 a = 1 a = 1 a=1时。 D = lim ⁡ p → ∞ ( 2 x p ) 1 p = lim ⁡ p → ∞ 2 1 p x = x D =\lim_{p \rightarrow \infty} (2x^p)^{\frac{1}{p}} = \lim_{p \rightarrow \infty} 2^{\frac{1}{p}}x = x D=limp(2xp)p1=limp2p1x=x,此时 y = a x = x y = ax = x y=ax=x

符号 p p p 作为自由变量,大多数人的眼睛应该是看不习惯的,下面,回归到纯粹的高等数学习题上,将符号 p p p 替换成符号 x x x ,久违的高数习题的感觉扑面而来,请求以下式子的极限值
lim ⁡ x → ∞ ( 1 + a x ) 1 x       ( a > 0 , a ≠ 1 ) \lim_{x \rightarrow \infty}(1 + a^x)^{\frac{1}{x}} \space\space\space\space\space(a>0, a\neq1) xlim(1+ax)x1     (a>0,a=1)
(2)当 a < 1 a < 1 a<1时。令 a x = u a^x = u ax=u,则 x = l o g a u x = log_{a}{u} x=logau,原式等价于求
lim ⁡ u → 0 ( 1 + u ) 1 log ⁡ a u = lim ⁡ u → 0 ( 1 + u ) l n a l n u = lim ⁡ u → 0 [ ( 1 + u ) 1 l n u ] l n a = lim ⁡ u → 0 [ e l n ( 1 + u ) 1 l n u ] l n a = lim ⁡ u → 0 [ e l n ( 1 + u ) l n u ] l n a = 洛 lim ⁡ u → 0 [ e u 1 + u ] l n a = 1 l n a = 1 \lim_{u \rightarrow 0}(1 + u)^{\frac{1}{\log_{a}{u}}} \\ = \lim_{u \rightarrow 0}(1 + u)^{\frac{lna}{lnu}} \\ = \lim_{u \rightarrow 0} [(1 + u)^{\frac{1}{lnu}}]^{lna} \\ = \lim_{u \rightarrow 0} [e^{ln(1+u)^{\frac{1}{lnu}}}]^{lna} \\ = \lim_{u \rightarrow 0} [e^{ \frac{ln(1+u)}{lnu} }]^{lna} \\ \overset{洛}{=} \lim_{u \rightarrow 0} [e^{ \frac{u}{1+u} }]^{lna} \\ = 1^{lna} \\ = 1 u0lim(1+u)logau1=u0lim(1+u)lnulna=u0lim[(1+u)lnu1]lna=u0lim[eln(1+u)lnu1]lna=u0lim[elnuln(1+u)]lna=u0lim[e1+uu]lna=1lna=1
(3)当 a > 1 a > 1 a>1时。沿用上面的式子
= 洛 lim ⁡ u → ∞ [ e u 1 + u ] l n a = e l n a = a \overset{洛}{=} \lim_{u \rightarrow \infty} [e^{ \frac{u}{1+u} }]^{lna} \\ = e^{lna} \\ = a =ulim[e1+uu]lna=elna=a
总结:

(1)当 a = 1 a = 1 a=1时。 D = ( 2 x p ) 1 p = 2 1 p x = x D = (2x^p)^{\frac{1}{p}} = 2^{\frac{1}{p}}x = x D=(2xp)p1=2p1x=x,此时 y = a x = x y = ax = x y=ax=x

(2)当 a < 1 a < 1 a<1时, D = 1 ⋅ x = x D = 1·x = x D=1x=x,此时 y = a x < x y = ax < x y=ax<x

(3)当 a > 1 a > 1 a>1时。 D = a ⋅ x = y D = a·x = y D=ax=y,此时 y = a x > x y = ax > x y=ax>x

也就是说,取两个向量在任意坐标维度上的最大差值。这也就是切比雪夫距离,又叫棋盘距离。

闵可夫斯基这属于犯规了,一个公式可以根据不同的参数,把欧氏距离,曼哈顿距离(这词就他发明的),切比雪夫距离全部包括进去,生的晚还是有好处的。

七、Jaccard Index

D ( x , y ) = 1 − ∣ x ⋂ y ∣ ∣ x ⋃ y ∣ D(x,y) = 1 - \frac{|x \bigcap y|}{| x \bigcup y|} D(x,y)=1xyxy

文中说:“Jaccard索引经常用于使用二进制或二进制化数据的应用程序中。当你有一个深度学习模型来预测一幅图像(例如一辆汽车)的片段时,Jaccard索引就可以用来计算给出真实标签的预测片段的准确性。同样,它也可以用于文本相似度分析,以衡量文档之间的选词重叠程度。因此,它可以用来比较模式集。”

八、Haversine Distance

d = 2 R ⋅ a r c s i n (   s i n 2 ( φ 2 − φ 1 2 ) + c o s ( φ 1 ) c o s ( φ 2 ) s i n 2 ( λ 2 − λ 1 2 )   ) d = 2R·arcsin \big(\space \sqrt{ sin^2{ (\frac{\varphi_2 - \varphi_1}{2}) } + cos(\varphi_1)cos(\varphi_2)sin^2{ (\frac{\lambda_2 - \lambda_1}{2}) } } \space \big) d=2Rarcsin( sin2(2φ2φ1)+cos(φ1)cos(φ2)sin2(2λ2λ1)  )

哈弗辛距离是球面上的两点在给定经纬度条件下的距离,公式的证明见 Distance between the Points on the Earth’s Surface[5] 一文,链接置于文末。此处可以说一句,嗯,我爱数学。

九、Sørensen-Dice Index

D ( x , y ) = 2 ∣ x ∩ y ∣ ∣ x ∣ + ∣ y ∣ D(x,y) = \frac{2|x\cap y|}{|x|+|y|} D(x,y)=x+y2∣xy

“它衡量的是样本集的相似性和多样性,通常用于图像分割任务或文本相似度分析。”

References

[1] 一图看遍9种距离度量,图文并茂,详述应用场景!—— 知乎

[2] 9 Distance Measures in Data Science —— 原文

[3] [美]特南鲍姆(Tanenbaum, A.S.),[美]韦瑟罗尔(Wetherall, D.J.). 计算机网络(第5版)[M].严伟,潘爱民.北京:清华大学出版社,2012.

[4] Minkowski distance [Explained]

[5] Distance between the Points on the Earth’s Surface

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++--类和对象】开篇

内联 在频繁调用一个函数时&#xff0c;会建立栈帧&#xff0c;如何减少内存的消耗 int add(int x,int y) { return (xy)*10; } c语言中&#xff0c;用宏函数 #define add(x,y) (((x)(y))*10) 若不加括号会出现一些问题 宏优势 不需要建立栈帧&#xff0c;提高调用效率&a…

【文末送书】2023年以就业为目的学习Java还有必要吗?

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高&#xff0c;软件测试也不断受到重视。但是&#xff0c;国内软件测试过程的不规范&#xff0c;重视开发和轻视测试的现象依旧存在。因此&#xff0c;对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…

外卖配送系统开发指南:打造高效、智能的外卖服务

随着外卖市场的蓬勃发展&#xff0c;餐厅和外卖平台需要不断提高外卖服务的效率和智能性&#xff0c;以满足不断增长的需求。在本文中&#xff0c;我们将探讨如何开发一个高效、智能的外卖配送系统&#xff0c;同时提供一些关键代码示例来帮助您入门。 环境准备 在开始外卖配…

驱动开发 day3

总结&#xff1a;自动创建设备节点udev的流程 1.如何创建节点 手动创建&#xff1a;mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建&#xff1a;devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…

图论第一天|深度优先搜索理论基础、广度优先搜索理论基础、797.所有可能的路径

深度优先搜索理论基础 文档讲解 &#xff1a; 代码随想录 - 深度优先搜索理论基础Hello 算法 9.3 图的遍历 状态&#xff1a;开始学习。 dfs&#xff08;深度优先搜索&#xff09;与bfs&#xff08;广度优先搜索&#xff09;区别 dfs是可一个方向去搜&#xff0c;不到黄河不回…

视频监控/安防监控/AI视频分析/边缘计算EasyCVR平台如何调取登录接口获取token?

安防视频监控管理平台/视频汇聚/视频云存储平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、AI智能分析等&#xff0c;视频监控智能分析平台EasyCVR融合性强、…

(JavaEE)线程的状态

前言&#xff1a;进程的状态&#xff0c;最核心的就是 就绪状态 和 阻塞状态&#xff0c;这对于线程同样适用&#xff0c;在Java中&#xff0c;又赋予了线程一些其他的状态。 线程的所有状态 NEW : Thread对象已经有了&#xff0c;但是start 方法还没调用。TERMINATED : Thre…

uniapp H5生成画布,插入网络图片。下载画布

因为网络图片不能直接使用ctx.drawImage(&#xff09;插入。得使用uni.getImageInfo()方法下载后插入。 但是当画布中存在多张网络图片时&#xff0c;必须等待uni.getImageInfo()下载完成后才行。这样得下载套下载。太过于繁琐。所以定义了一个递归下载方法。同时避免下载图片异…

【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题

文章目录 堆的概念性质图解 向上调整算法算法分析代码整体实现 向下调整算法算法分析整体代码实现 堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆 堆排序创建堆调整堆整合步骤 TopK问题 堆的概念 堆就是将一组数据所有元素按完全二叉树的顺序…

四川玖璨电子商务有限公司:新媒体视频运营

新媒体视频运营是随着互联网技术的发展而兴起的一种新型媒体运营方式。它通过制作、发布和推广优质视频内容&#xff0c;以吸引受众眼球&#xff0c;提升品牌知名度和影响力。四川玖璨电商小编在此次新媒体视频运营实验中&#xff0c;我们对新媒体视频运营的关键要素进行了探索…

大数据精准营销适合什么行业,面临哪些问题?

大数据营销适合的行业还是非常多的&#xff0c;毕竟现在大部分的企业都是通过网络方式来获得客户的&#xff0c;只要同领域有网站&#xff0c;而且他们存在竞价或者是优化&#xff0c;或者是使用了相关的软件&#xff0c;这种情况下都是完全可以运用的。比较常见的行业有金融行…

高端知识竞赛中选手台桌设计方案和配套软件

高端知识竞赛选手台桌用于知识竞赛现场选手台&#xff0c;集成了知识竞赛软硬件设备&#xff0c;包括台前计分一体机或LED屏、抢答按钮等&#xff0c;和天纵竞赛软件配合使用&#xff0c;实现高端竞赛的计分需要。 知识竞赛选手台桌前计分屏可以显示丰富的内容&#xff0c;包括…

(JavaEE)多线程带来的的风险-线程安全 (第一部)

前言&#xff1a;线程安全是整个多线程中&#xff0c;最为复杂的部分&#xff0c;也是最重要的部分。 目录 什么是线程安全问题&#xff1f; 线程不安全的原因 ⁜⁜总结 &#xff1a;线程安全问题的原因 ⁜⁜ 解决方法1 ——加锁 synchronized &#xff08;监视器锁monitor…

客户画像的作用是什么?

1、深度挖掘 客户画像包括客户的基本信息和个人行为数据&#xff0c;这些都可以作为企业成员和客户沟通的基础&#xff0c;且在此基础上可以更好地共情并深度挖掘客户真正想要什么。 2、分层精细运营 根据客户画像能充分了解客户的需求&#xff0c;再结合产品属性和企业文化…

【memmove函数的功能介绍及模拟实现】

memmove函数的功能介绍及模拟实现✍️ 1.memmove函数的功能介绍&#x1f9d0; 1.1函数结构&#x1f575;️ void * memmove ( void * destination, const void * source, size_t num );1.2 功能介绍&#x1f92f; 根据cplusplus网站上对memmove函数的介绍&#xff1a; 它的…

全栈测试平台RunnerGo你了解嘛

在当今这个数字化时代&#xff0c;应用程序的性能至关重要。一款可靠的性能测试工具&#xff0c;能够为企业带来无数的好处。最近&#xff0c;一款名为RunnerGo的开源性能测试工具备受瞩目。本文将详细介绍RunnerGo的特点、优势以及如何解决性能测试中的痛点。 RunnerGo产品介绍…

02-Redis持久化

上一篇&#xff1a;01-Redis核心数据结构与高性能原理 1.RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”…

MemJam: A false Dependency attack against constant-time crypto implementations【存储缓存】

作者&#xff1a;A. Moghimi, J. Wichelmann, T. Eisenbarth, and B. Sunar. 发布&#xff1a;International Journal of Parallel Programming 时间&#xff1a;Aug 2019. 笔记&#xff1a; 缓存定时攻击 1、攻击原理 共享缓存存在定时侧信道的风险&#xff08;例如在处理…

C++信息学奥赛1168:大整数加法

#include <iostream> #include <string> #include <cstring> using namespace std;char ArrString[205], BrrString[205];// 自定义的取最大值函数 int max(int a, int b){if(a > b){return a;}else{return b;} }int main(){int len 0;cin >> ArrS…