理解曼哈顿距离

2025年7月10日 | 阅读5分钟

距离度量在衡量空间中点或对象之间的分离程度方面起着非常重要的作用。神经网络在机器学习、机器人技术和地理信息系统等领域得到了广泛应用。模式识别、聚类和空间分析是一些可以通过测量距离来解决的任务示例,这些任务对企业和研究人员都感兴趣。

其中,曼哈顿距离(也称为L1距离(或出租车距离))在计算网格状轨迹或多维空间中的距离时特别有用。下面将讨论其数学基础以及如何在 PythonR 中应用曼哈顿距离的概念。

可视化和计算曼哈顿距离

如前所述,曼哈顿距离是通过将任意两点精确坐标之间的绝对差相加来计算的。以下是二维和三维示例,以说明这一点。

二维示例

考虑两个点 A(1, 1) 和 B(4, 5)

|x 1 - x 2| = |1 4| = 3

|y 1 - y 2| = |1 5| = 4

总和:3+ 4 = 7

因此,使用曼哈顿距离计算的 A 和 B 之间的距离为 7。

三维示例

取三维空间中的两个点 A(1, 2,3) 和 B(4, 5, 6)

|x1 - x2| = |1- 4| = 3

|y 1 - y 2| = |2 - 5| = 3

|z 1 - z 2| = |3 -6| = 3

总和:3 + 3 +3 = 9

因此,这两点之间的曼哈顿距离为 9。

曼哈顿距离的应用

曼哈顿距离在计算机科学、数据分析和地理空间技术中都有应用。它在以下一些领域非常有用:

路径查找算法(例如 A* 算法)

在网格空间的情况下,曼哈顿距离是确定点之间距离的有效启发式算法。它通常用于 A* 算法,以指导在仅限于水平和垂直方向移动的场景中的搜索,例如城市路线规划、迷宫解决和某些视频游戏 AI 路径查找任务。

聚类技术(例如 K-Means 聚类)

这种相对特殊的曼哈顿距离可以应用于聚类,尤其是在处理高维或稀疏数据集时。与欧氏距离相比,这可能会带来更好的结果,因为它不易受单个维度中的异常值和极端值的影响。因此,当需要进行文本分类、文档聚类或其他特征空间稀疏的任务时,它是一个不错的选择。

图像识别

在模板匹配任务中,曼哈顿距离能够比较像素值或特征向量,用于在较大的图像中查找较小的图像。它也用于目标识别、图像数据库模式匹配等领域,特别是在速度比欧氏距离的微小差异更重要的应用中。

异常检测

由于曼哈顿距离对单个维度中的极端值不敏感,因此它通常应用于异常检测应用,例如欺诈检测或网络安全。例如,在金融系统中,它可以在不被个人特征中的异常值扭曲的情况下,对异常的交易模式发出警报。

地理信息系统 (GIS)

曼哈顿距离在 GIS 模型中很有用,因为在网格格式的网络上移动,这些模型用于城市规划和物流。它应用于位置分配、可达性分析和城市配送路线优化。规划者还使用它来分析沿道路或河流的缓冲区,或分析公共服务的分布。

Python 和 R 中的曼哈顿距离

现在,我们将观察如何在 Python 和 R 中计算曼哈顿距离,包括自定义计算方法和库方法。

Python 示例

在 Python 中有几种不同的方法可以计算曼哈顿距离。以下是两种方法:

1. 使用 NumPy 数组

输出

 
Manhattan distance (NumPy): 12

这是使用 NumPy 处理海量数据的有效且方便的方法。

2. 使用 SciPy 的 cityblock() 函数

输出

 
Manhattan distance (SciPy): 12

一旦你在例程中使用了 SciPy,cityblock() 就能让你轻松有效地计算曼哈顿距离。

R 示例

在 R 中有许多计算曼哈顿距离的函数。以下是两种方法:

1. 使用自定义函数

输出

 
"Manhattan distance (custom function): 6"

在这种策略中,定义了坐标之间绝对成对差值之和的简单函数。

2. 使用 stats 库

输出

 
"Manhattan distance: 12"

stats 包有一个有用的 dist() 函数,当需要对矩阵或涉及多个位置的数据执行计算时,该函数在测量曼哈顿距离方面特别有用。

结论

在某些应用中,曼哈顿距离因其简单性、计算效率和对异常值的抵抗能力而受到青睐。与欧氏距离相比,它在基于网格的系统中更直观,并且计算效率更高,尤其是在高维空间中。

像曼哈顿距离这样的距离度量在各个领域都非常重要——应用于机器学习系统、聚类、异常识别等。像 Python 中机器学习工作流设计、R 中聚类分析以及 Python 中异常检测 等课程都强调了距离度量在分类、降维和特征缩放等过程中的实际应用。

距离度量的选择会对你的模型产生重大影响。掌握曼哈顿距离的知识和实践将为你提供创建高效数据驱动解决方案所需的最重要技能之一。