很多算法中,无论是自动驾驶算法还是人工智能算法,都会涉及到距离测量的内容。例如:欧氏距离或者cos相似度,在KNN、UMAP、HDBSCAN等算法中很常见。

理解这些距离测量使用的具体领域,对于我们理解不同类型的算法至关重要。以KNN为例,一般而言,KNN经常使用欧式距离,从欧式距离本身来说,就是一种非常优异的距离测量方法。

但是,如果你的测试数据纬度很高,那么,欧氏距离是否还适用?如果你的数据中包含地理空间信息,这样的话或许使用haversine距离来测量更合适。

本文中,我们将讲解多种不同测量距离方法的使用,并且探索如何在不同场景下,使用哪种测量距离。此外,我们将总结不同测量距离的不足之处,这样你就可以在实际工作或学习中,熟练驾驭这些测量距离。

1. 欧氏距离

首先,我们介绍最简单常用的欧氏距离。简而言之,欧氏距离----测量由两点连接的一端距离的长度。

公式也是相当直观,使用勾股定理计算笛卡尔坐标系中的点之间距离关系。

1.1. 不足之处

尽管它是一种常见的距离度量,但欧几里得距离不是尺度不变的,这意味着计算的距离可能会根据数据的单位而出现偏差。因此,需要在使用此距离度量之前对数据进行归一化

此外,随着数据维度的增加,欧几里得距离变得越来越没用。这与维度灾难有关,造成纬度灾难的一个原因是高维空间中的运行状态与我们所认为的二维或三维空间运行状态大相径庭。

华盛顿大学Pedro Domingos教授的一篇文章解释“来自三维世界的直觉通常不适用于高维世界。在高维中,多元高斯分布的大部分质量不在均值附近,而是在其周围越来越远的“壳”中;而高维橙的大部分体积都在皮,而不是果肉。如果恒定数量的示例均匀分布在一个高维超立方体中,则在某些维度之外,大多数示例更靠近超立方体的一个面,而不是它们最近的邻居。如果我们通过将超球面刻在超立方体中来近似超球面,那么在高维中,几乎所有超立方体的体积都在超球面之外。这对于机器学习来说是个坏消息,其中一种类型的形状通常由另一种类型的形状近似。”

1.2. 用例

当你拥有低维数据并且向量的大小对测量很重要时,欧几里得距离非常有效。如果在低维数据上使用欧几里德距离,kNN 和 HDBSCAN 等方法会显示出很好的开箱即用结果。

尽管已经开发了许多其他度量来解决欧几里得距离的缺点,但它仍然是最常用的距离度量之一,这是有充分理由的。它使用起来非常直观,易于实现,并在许多用例中显示出很好的结果。

2. Cosine相似度

余弦相似度经常被用来解决欧几里得距离的高维问题,余弦相似度只是两个向量之间夹角的余弦值。如果将它们归一化为长度均为 1,则它也具有相同的向量内积。

具有完全相同方向的两个向量的余弦相似度为 1,而彼此截然相反的两个向量的相似度为 -1。请注意,它们的大小并不重要,因为这是方向的度量。

2.1. 不足之处

余弦相似度的一个主要缺点是不考虑向量的大小,只考虑它们的方向。在实践中,这意味着没有充分考虑值的差异。以推荐系统为例,余弦相似度并没有考虑到不同用户之间评分量表的差异。

2.2. 用例

当我们有高维数据并且向量的大小不重要时,我们经常使用余弦相似度。对于文本分析,当数据以字数表示时,此度量非常常用。例如,当一个词在一个文档中比另一个更频繁地出现时,这并不一定意味着一个文档与该词更相关。可能是文档的长度不均匀,计数的大小不太重要。然后,我们最好使用忽略大小的余弦相似度。

3. 汉明距离

汉明距离是两个向量之间不同的值的数量。它通常用于比较两个相等长度的二进制字符串。它还可以用于字符串,通过计算彼此不同的字符数来比较它们彼此的相似程度。

3.1. 不足之处

如你所料,当两个向量长度不同时,汉明距离很难使用。你可以将相同长度的向量用汉明距离相互比较,以了解哪些位置不匹配。

此外,只要它们不同或相等,它就不会考虑实际值。因此,当幅度是重要的度量时,不建议使用此距离度量。

3.2. 用例

典型的用例包括数据通过计算机网络传输时的纠错/检测。它可用于确定二进制字中失真位的数量,作为估计误差的一种方式。此外,您还可以使用汉明距离来衡量分类变量之间的距离。

4. 曼哈顿距离

曼哈顿距离,通常称为出租车距离或城市街区距离,用于计算实值向量之间的距离,想象一下在棋盘等统一网格上描述对象的向量。曼哈顿距离指的是两个向量之间的距离,如果它们只能移动直角,计算距离时不涉及对角线运动。

4.1. 不足之处

尽管曼哈顿距离似乎适用于高维数据,但它是一种不如欧几里德距离直观的度量,尤其是在用于高维数据时。此外,它更有可能给出比欧几里德距离更高的距离值,因为它不是可能的最短路径。这不一定会产生问题,但你应该考虑到这一点。

4.2. 用例

当你的数据集具有离散和/或二元属性时,曼哈顿距离似乎工作得很好,因为它考虑了在这些属性的值内实际可以采用的路径。以欧几里得距离为例,它会在两个向量之间创建一条直线,而实际上这可能实际上是不可能的。

5. 切比雪夫距离

切比雪夫距离定义为两个向量在任意坐标维度上的最大差值。换句话说,它只是沿一个轴的最大距离。由于其性质,它通常被称为棋盘距离,因为国王从一个方格移动到另一个方格所需的最小移动次数等于切比雪夫距离。

5.1. 不足之处

切比雪夫通常用于非常特定的情况下,这使得它难以用作通用距离度量,例如欧几里得距离或余弦相似度。因此,建议仅在你完全确定它适合你的用例时才使用它。

5.2. 用例

如前所述,切比雪夫距离可用于提取从一个方格移动到另一个方格所需的最小移动次数。此外,在允许不受限制的8向移动的游戏中,它可能是一个有用的措施。在实践中,切比雪夫距离通常用于仓库物流,因为它非常类似于桥式起重机移动物体所需的时间。

6. 闵氏距离

闵氏距离比大多数测量更复杂一些。它是在标准化向量空间(n 维实空间)中使用的度量,这意味着它可以在距离可以表示为具有长度的向量的空间中使用。

它有三个要求:

• 零向量----零向量的长度为零,而其他所有向量的长度为正。例如,如果我们从一个地方旅行到另一个地方,那么这个距离总是正的。但是,如果我们从一个地方旅行到它自己,那么这个距离就是零。

• 尺度因子----当你将向量与正数相乘时,其长度会发生变化,同时保持其方向。例如,如果我们在一个方向上走一定距离并添加相同的距离,则方向不会改变。

• 三角不等性----两点之间最短的距离是直线。

关于这个距离测量最有趣的是参数 p 的使用。我们可以使用此参数来操纵距离度量,使其与其他度量非常相似。p 的常见值为:

• p=1 ---- 曼哈顿距离

• p=2 ---- 欧氏距离

• p= ---- 切比雪夫距离

6.1. 不足之处

闵氏距离与它们所代表的距离度量具有相同的缺点,因此对曼哈顿、欧几里得和切比雪夫距离等度量的充分理解非常重要。此外,参数p实际上可能很难使用,因为根据你的用例,找到正确的值可能在计算上效率很低。

6.2. 用例

p 的好处是可以迭代它并找到最适合你的用例的距离度量,它为你的距离度量提供了极大的灵活性,如果你非常熟悉p和许多距离度量,这将是一个巨大的好处。

7. Jaccard 距离

Jaccard 指数(或 Intersection over Union)是一种用于计算样本集相似性和多样性的指标,它是交集的大小除以样本集的并集的大小。

在实践中,它是集合之间相似实体的总数除以实体的总数。例如:如果两个集合共有 1 个实体,总共有 5 个不同的实体,那么 Jaccard 指数将为 1/5 = 0.2。

要计算 Jaccard 距离,我们只需从 1 中减去 Jaccard 指数:

7.1. 不足之处

Jaccard 索引的一个主要缺点是它受数据大小的影响很大。大型数据集会对索引产生很大影响,因为它可以显着增加联合,同时保持交叉点相似。

7.2. 用例

Jaccard 索引通常用于使用二进制或二进制数据的应用程序中。当你有一个深度学习模型来预测图像的片段(例如:汽车)时,可以使用 Jaccard 指数来计算给定真实标签的预测片段的准确度。
类似地,它可以用于文本相似性分析来衡量文档之间有多少单词选择重叠。因此,它可用于比较模式集。

8. Haversine距离

Haversine距离是给定经度和纬度的球体上两点之间的距离。它与欧几里得距离非常相似,因为它计算两点之间的最短线。主要区别在于不可能有直线,因为这里的假设是两个点在一个球体上。

8.1. 不足之处

这种距离测量的一个缺点是假设点位于球体上。在实践中这种情况很少发生,例如地球不是完美的圆形,这在某些情况下可能会使计算变得困难。相反,看看文森特距离会很有趣,它假设一个椭球体。

8.2. 用例

显而易见,Haversine距离常用在导航计算中。例如:如果你刚好从其中一个国家飞往另外一个,你可以用它来计算两个国家之间的距离。注意的是:如果实际的距离不是很大的话,haversine就有点不太合适,因为曲度对于这种距离有很大的影响。

9. Dice距离

Dice指数和Jaccard指数非常相似,因为Dice也是用来衡量样本集合的相似度和差异度。虽然Dice和Jaccard很相似,但是Dice指数更加直观,因为它可以看作两个集合交集的百分比,因此它的计算值范围在0和1之间:

9.1. 不足之处

与 Jaccard 指数一样,它们都夸大了几乎没有或几乎没有基本真值正集的集合的重要性。因此,它可能会主导多组的平均得分。它对每个项目的权重与相关集的大小成反比,而不是平等对待它们。

9.2. 用例

Dice用例与 Jaccard 索引相似(如果不相同)。你会发现它通常用于图像分割任务或文本相似性分析。

我们一共总结了9种常用的距离计算测量方法,并且给出每种测量方法的不足之处和使用案例。在实际工程计算和科学计算领域,针对维度较小的数据集,我们使用较多的是欧氏距离,在维度较高的数据集中使用cos距离,对于每条数据尺度相同的数据中,使用汉明距离,曼哈顿距离特别适合网格类数据集计算,切比雪夫距离是计算最远的距离,闵氏距离是欧氏距离、曼哈顿距离和切比雪夫距离的泛化,集合操作常用Jaccard和Dice距离,以及带有经纬度信息的数据集常用haversine距离。

在实际的距离测量中,远远不止这9中测量距离,因此,我们只是对基础常用的测量距离进行总结,希望大家在此基础上,进一步学习研究。

工程计算和数据科学中常用的9种测量距离相关推荐

  1. 数据科学中常见的9种距离度量方法(包括曼哈顿距离、欧氏距离、半正矢距离等)

    数据科学中常见的9种距离度量方法(包括曼哈顿距离.欧氏距离.半正矢距离等) 1.欧氏距离(Euclidean Distance) 2.余弦相似度(Cosine Similarity) 3.汉明距离(H ...

  2. 数据可视化中常用的16种图表

    在信息爆炸的时代,越来越多的数据堆积.但是,这些密集数据没有重点关注并且可读性较差.因此,我们需要 数据可视化  以帮助数据易于理解和接受.相反,可视化更加直观和有意义,并且使用适当的图表来可视化数据 ...

  3. 机器学习和数据科学中常用的公开数据集(含计算机视觉最全数据集汇总)

    数据集查找器 Google Dataset Search:与Google Scholar的工作方式类似,Dataset Search 可以让你在任何托管的地方找到数据集,无论是出版商的网站,还是数字图 ...

  4. 数据科学中常见的9种距离度量方法

    选自towardsdatascience 作者:Maarten Grootendorst 机器之心编译 编辑:陈萍 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本 ...

  5. 数据科学中常见的9种距离度量方法,包括欧氏距离、切比雪夫距离、半正矢距离等

    1.欧氏距离(Euclidean Distance) 欧式距离可解释为连接两个点的线段的长度.欧式距离公式非常简单,使用勾股定理从这些点的笛卡尔坐标计算距离. 代码实现: import numpy a ...

  6. r怎么对两组数据统计检验_数据科学中最常用的统计检验是什么

    r怎么对两组数据统计检验 Business analytics and data science is a convergence of many fields of expertise. Profe ...

  7. 数据科学中一些不常用但很有用的Python库

    Parul Pandey 2020-09-22 Tuesday ➤ 00导读 提到数据科学的python包,大家想到的估计是numpy,pandas,scikit-learn之类的,这里给大家介绍一些 ...

  8. 编译原理 数据流方程_数据科学中最可悲的方程式

    编译原理 数据流方程 重点 (Top highlight) Prepare a box of tissues! I'm about to drop a truth bomb about statist ...

  9. 中ridge_10种线性代数在数据科学中的强大应用(内附多种资源)

    原文选自 | Analytics Vidhya 作者 | Khyati Mahendru 本文转载自 TalkingData数据学堂 ,未经允许禁止转载 本文摘要 线性代数为各种各样的数据科学算法和应 ...

最新文章

  1. 《JS权威指南学习总结--第九章 类和模板》
  2. TIBCO EMS MESSAGE
  3. 编程开发使用的软件大全
  4. 张睿:OpenH264拥有产品级的鲁棒性 欢迎contribute
  5. win10 uwp unix timestamp 时间戳 转 DateTime
  6. centos7 如何重启web服务_如何重启web服务器
  7. android 全局对话框6,[Android][Framework]从全局AlertDialog聊聊WindowManager
  8. 自然语言处理总复习(七)—— 概率上下文无关文法
  9. ARM920T的Cache
  10. (报错解决)Exception encountered during context initialization
  11. oracle10g迁移到11g配置,Windows下Oracle10g32位迁移到11g64位
  12. python降低图像分辨率_降低DDS图像的分辨率
  13. c语言数字的写法田字格,数字100田字格怎么写
  14. addEventListener()使用方法
  15. 2021-08-02网关http或tcp收发等极简物联网通用json协议设计
  16. python xmind_2018-09-14 python-xmind文件解析
  17. JAVA中d.x=7是什么意思_JVM配置参数之(-D、-X、-XX的区别)
  18. 用python画竹子_初识Python
  19. DNW PL2303驱动解决问题
  20. Google Earth选项中的重要设置

热门文章

  1. R语言 图片识别文字 PNG JPG图片转文字 OCR tesseract包
  2. c语言处理文本断句空格,c语言怎么断句
  3. 《Total Commander:万能文件管理器》——第7.3节.总结与作业
  4. MacTeX新手学习笔记
  5. 微信二维码图片长按没有出现“识别图中的二维码”
  6. 护眼灯色温多少k最合适?2023儿童护眼灯色温范围是多少
  7. iOS定位从 “始终”定位,改变成“使用期间”定位
  8. 常用、免费的API接口网址
  9. 手机、浏览器的分辨率、状态栏参数
  10. api-ms-win-crt-stdio-l1-1-0.dll丢失问题解决