Skip to content

Latest commit

 

History

History
211 lines (119 loc) · 8.7 KB

distance-metrics-euclidean-manhattan-minkowski-oh.md

File metadata and controls

211 lines (119 loc) · 8.7 KB

距离度量:欧几里得、曼哈顿、闵可夫斯基,哦我的!

原文:www.kdnuggets.com/2023/03/distance-metrics-euclidean-manhattan-minkowski-oh.html

距离度量:欧几里得、曼哈顿、闵可夫斯基,哦我的!

作者提供的图片

如果你对机器学习很熟悉,你会知道数据集中的数据点和随后工程化的特征都是 n 维空间中的点(或向量)。


我们的前三个课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求


任何两个点之间的距离也反映了它们之间的相似性。监督学习算法如 K 最近邻(KNN)和聚类算法如 K 均值聚类使用距离度量的概念来捕捉数据点之间的相似性

在聚类中,评估的距离度量用于将数据点分组。而在 KNN 中,该距离度量用于找到与给定数据点最近的 K 个点。

在这篇文章中,我们将回顾距离度量的属性,然后查看最常用的距离度量:欧几里得距离、曼哈顿距离和闵可夫斯基距离。接着我们将介绍如何使用 scipy 模块中的内置函数在 Python 中计算这些距离。

我们开始吧!

距离度量的属性

在我们学习各种距离度量之前,让我们回顾一下度量空间中任何距离度量应满足的属性 [1]:

1. 对称性

如果xy是度量空间中的两点,则xy之间的距离应等于yx之间的距离。

距离度量:欧几里得、曼哈顿、闵可夫斯基,哦我的!X

2. 非负性

距离应始终为非负值。这意味着它应大于或等于零。

距离度量:欧几里得、曼哈顿、闵可夫斯基,哦我的!X

只有当xy表示同一点时,即x = y,上述不等式才成立(d(x,y) = 0)。

3. 三角不等式

给定三点xyz,距离度量应满足三角不等式:

距离度量:欧几里得、曼哈顿、闵可夫斯基,哦我的!X

欧几里得距离

欧几里得距离是度量空间中任意两点之间的最短距离。考虑两个点xy,它们在二维平面上的坐标分别为 (x1, x2) 和 (y1, y2)。

xy之间的欧几里得距离如图所示:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!

作者提供的图片

这个距离由两个点的相应坐标之间的平方差的和的平方根给出。在数学上,二维平面中点xy之间的欧几里得距离为:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!X

扩展到 n 维,点xy的形式为x = (x1, x2, …, xn) 和 y = (y1, y2, …, yn),我们有以下欧几里得距离方程:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!X

在 Python 中计算欧几里得距离

文章中提到的欧几里得距离和其他距离度量可以使用 SciPy 中spatial模块的便利函数进行计算。

首先,让我们从 Scipy 的spatial模块中导入distance

from scipy.spatial import distance

然后我们初始化两个点xy如下:

x = [3,6,9]
y = [1,0,1]

我们可以使用euclidean便利函数来找到点xy之间的欧几里得距离:

print(distance.euclidean(x,y))
Output >> 10.198039027185569

曼哈顿距离

曼哈顿距离,也称为出租车距离或城市街区距离,是另一种流行的距离度量。假设你在一个二维平面内,并且只能沿着如图所示的轴移动:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!

作者提供的图片

xy之间的曼哈顿距离由下式给出:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!X

在 n 维空间中,每个点都有 n 个坐标,曼哈顿距离由下式给出:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!X

尽管曼哈顿距离不会给出任何两个给定点之间的最短距离,但在特征点位于高维空间中的应用中,它通常是首选的[3]。

在 Python 中计算曼哈顿距离

我们保留之前示例中的导入和 x、y:

from scipy.spatial import distance

x = [3,6,9]
y = [1,0,1]

要计算曼哈顿(或城市街区)距离,我们可以使用cityblock函数:

print(distance.cityblock(x,y))
Output >> 16

闵可夫斯基距离

以德国数学家赫尔曼·闵可夫斯基 [2] 的名字命名,闵可夫斯基距离在一个规范向量空间中的计算方法为:

距离度量:欧几里得,曼哈顿,闵可夫斯基,哦天哪!X

很容易看出,当p = 1时,闵可夫斯基距离方程与曼哈顿距离的形式相同:

距离度量:欧几里得,曼哈顿,Minkowski,哇!X

同样,对于 p = 2,Minkowski 距离等同于欧几里得距离:

距离度量:欧几里得,曼哈顿,Minkowski,哇!X

在 Python 中计算 Minkowski 距离

让我们计算点 xy 之间的 Minkowski 距离:

from scipy.spatial import distance

x = [3,6,9]
y = [1,0,1]

除了需要计算距离的点(数组)之外,计算距离的 minkowski 函数还需要参数 p

print(distance.minkowski(x,y,p=3))
Output >> 9.028714870948003

为了验证当 p = 1 时 Minkowski 距离是否等于曼哈顿距离,我们可以调用 minkowski 函数,将 p 设置为 1:

print(distance.minkowski(x,y,p=1))
Output >> 16.0

让我们还验证一下 p = 2 时的 Minkowski 距离是否等于我们之前计算的欧几里得距离:

print(distance.minkowski(x,y,p=2))
Output >> 10.198039027185569

这就是全部了!如果你熟悉规范向量空间,你应该能看到这里讨论的距离度量与 Lp 范数之间的相似性。欧几里得、曼哈顿和 Minkowski 距离等同于规范向量空间中差异向量的 L2、L1 和 Lp 范数。

总结

本教程到此为止。我希望你现在对常见的距离度量有所了解。下一步,你可以尝试在训练机器学习算法时使用你学到的不同度量。

如果你想开始学习数据科学,可以查看这个学习数据科学的 GitHub 仓库列表。祝学习愉快!

参考文献及进一步阅读

[1] 度量空间,Wolfram Mathworld

[2] Minkowski 距离,维基百科

[3] 高维空间中距离度量的惊人行为,CC Agarwal 等

[4] SciPy 距离函数,SciPy 文档

Bala Priya C 是一名技术写作人员,喜欢创建长篇内容。她的兴趣领域包括数学、编程和数据科学。她通过撰写教程、操作指南等方式与开发者社区分享她的学习成果。

更多相关内容