【漫话机器学习系列】115.曼哈顿距离(Manhattan Distance)

server/2025/3/6 15:09:00/

曼哈顿距离(Manhattan Distance)详解

1. 引言

在数据科学、机器学习和计算几何中,距离度量(Distance Metric) 是一个核心概念。距离度量帮助我们衡量点与点之间的相似性、分类数据、进行聚类分析等。其中,曼哈顿距离(Manhattan Distance) 是一种常见的距离度量方式,尤其适用于网格状结构(如城市街区或棋盘上的路径规划)。

本文将详细介绍曼哈顿距离的定义、数学公式、计算示例、应用场景以及与欧几里得距离的对比分析。


2. 曼哈顿距离的定义

曼哈顿距离,也称为 L1 距离(L1 Distance)城市街区距离(City Block Distance),用于计算仅允许沿水平和垂直方向移动的两个点之间的距离。

该名称来源于美国纽约市曼哈顿区的街道布局:曼哈顿的街道呈网格状,行人和车辆只能沿着南北(纵向)或东西(横向)行走,而不能直接对角线行进。因此,在这个街区内,两个点之间的实际行走距离是沿水平和垂直方向的总步数,而不是欧几里得直线距离。


3. 数学公式

假设在 n 维空间中,点 P = (p_1, p_2, ..., p_n) 和点 Q = (q_1, q_2, ..., q_n) 之间的曼哈顿距离定义如下:

d_{\text{Manhattan}}(P, Q) = \sum_{i=1}^{n} | p_i - q_i |

其中:

  • P 和 Q 是两个 n 维向量(即 n 维坐标点)。
  • | p_i - q_i |表示第 i 个维度上两个点的绝对差值。
  • 结果是两个点在各个维度上的坐标差值之和

该公式的核心思想是:从点 P 到点 Q 的距离等于在每个维度上相差的绝对值的总和,类似于在网格地图上只能沿着横纵方向移动的步数。


4. 计算示例

示例 1:二维平面

假设我们有两个点:

  • P(1,2)
  • Q(4,5)

使用曼哈顿距离计算:

d_{\text{Manhattan}}(P, Q) = |1 - 4| + |2 - 5|= 3 + 3 = 6

解释

  1. 从 (1,2) 到 (4,2) 需要水平移动 3 步。
  2. 从 (4,2) 到 (4,5) 需要垂直移动 3 步。
  3. 总步数 = 3 + 3 = 6

示例 2:三维空间

设 P(2, 3, 5) 和 Q(6, 1, 8),则:

d_{\text{Manhattan}}(P, Q) = |2 - 6| + |3 - 1| + |5 - 8|= 4 + 2 + 3 = 9 

解释

  • 在 x 轴方向移动 4。
  • 在 y 轴方向移动 2。
  • 在 z 轴方向移动 3。
  • 总步数 = 4 + 2 + 3 = 9

5. 曼哈顿距离的应用

5.1 机器学习中的应用

  • 特征空间中的相似度计算
    • 在 KNN(K-近邻)算法、K-Means 聚类等方法中,曼哈顿距离可用于衡量数据点之间的相似性,尤其是在高维稀疏数据中表现良好。
  • 正则化技术
    • L1 正则化(Lasso 回归)使用曼哈顿距离来限制模型的参数,使得部分参数变为零,实现特征选择。

5.2 计算机视觉

  • 图像处理
    • 在像素网格中,曼哈顿距离可用于测量像素间的距离,适用于某些模式识别算法。
  • 路径规划
    • 在 A* 算法和 Dijkstra 算法中,曼哈顿距离用于计算网格地图上的启发式路径估计。

5.3 计算几何

  • 在计算凸包、最短路径、最近邻搜索等问题中,曼哈顿距离是常见的度量方式之一。

5.4 机器人与游戏开发

  • 机器人在网格地图上导航时,通常使用曼哈顿距离来计算移动步数。
  • 游戏 AI 需要计算角色在离散网格上的最短路径,例如迷宫游戏中的路径规划。

6. 曼哈顿距离 vs 欧几里得距离

对比项曼哈顿距离(L1 距离)欧几里得距离(L2 距离)
定义只能沿水平或垂直方向移动的总步数直线距离(最短路径)
公式\sum_{i=1}^{n} | p_i - q_i |

\sqrt{\sum_{i=1}^{n} (p_i - q_i)^2}
移动方式只能水平或垂直任意方向(包括对角线)
适用场景离散网格、城市交通、L1 正则化连续空间、物理运动、L2 正则化
计算复杂度计算简单,适合高维稀疏数据计算稍复杂,适合低维密集数据
特性对离群点更鲁棒对离群点更敏感

直观理解

  • 曼哈顿距离 适用于“街道网格”环境,强调方向上的独立性。
  • 欧几里得距离 适用于“直线距离”场景,衡量最短直线路径。

示例对比

  • 曼哈顿距离(点 A 和点 B 只能水平/垂直移动):
    • A(0,0) 到 B(3,4) 的曼哈顿距离 = |3 - 0| + |4 - 0| = 7
  • 欧几里得距离(直线移动):
    • A(0,0) 到 B(3,4) 的欧几里得距离 = \sqrt{(3-0)^2 + (4-0)^2} = 5

7. 结论

  • 曼哈顿距离用于网格状结构(如城市交通、棋盘路径、机器人导航)。
  • 适用于高维稀疏数据,且计算比欧几里得距离简单。
  • 机器学习、路径规划、计算机视觉等多个领域有广泛应用。

理解曼哈顿距离的特性,可以帮助我们更好地选择合适的距离度量方式,提高算法的效率和准确性。


http://www.ppmy.cn/server/172894.html

相关文章

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和pe…

不懂ui->layout()->removeWidget(bar);

ui->layout()->removeWidget(bar);解释起来就是:ui->layout()返回一个指针,然后这个指针再调用->removeWidget(bar)。 你提到的语法 ui->layout()->removeWidget(bar) 确实可能让人感到困惑,尤其是如果你对 Qt 的 UI 系统不…

unity学习63,第2个小游戏:用fungus做一个简单对话游戏

目录 1 目标用fungus做一个简单的剧情对话游戏 1.1 先创建一个新的3D项目 1.2 fungus是什么 1.2.1 怎么获得 1.2 在AssetStore里搜索fungus (插件类)--千万别买收费的错的! 1.3 fungus的官网 1.3.1 官网给的3个下载链接,unity的果然已经失效了 …

纯前端使用 Azure OpenAI Realtime API 打造语音助手

本文手把手教你如何通过纯前端代码实现一个实时语音对话助手,结合 Azure 的 Realtime API,展示语音交互的未来形态。项目开源地址:https://github.com/sangyuxiaowu/WssRealtimeAPI 1. 背景 在这个快节奏的数字时代,语音助手已经…

Pandas 批量拆分与合并Excel文件

将一个大的excel等份拆分成多个excel将多个小excel合并成一个大excel,并标记来源 import pandas as pdwork_dir rC:\TELCEL_MEXICO_BOT\A\Weather.xlsx df_source pd.read_excel(work_dir) print(df_source.head())ymd bWendu yWendu tianqi fengxiang fengji aqi aqiInfo …

DeepSeek 隐私泄露?

大家好,我是钢板兽。 最近,一位社科专业的朋友问我:“如果把一些自己研究方向相关的涉密英文材料上传到 DeepSeek,让它帮忙提取文本并翻译,其他用户会不会通过拷打AI或其他方式获取这些材料的内容?”换句话…

快速开始React开发(一)

快速开始React开发(一) React是一个JavaScript库,用于构建交互式网站,并且能够快捷创建SPA(Single Page App),其组件化的思想也是被一再传播,无论是普通的Web网站还是嵌入移动端交互…

Qt中txt文件输出为PDF格式

main.cpp PdfReportGenerator pdfReportGenerator;// 加载中文字体if (QFontDatabase::addApplicationFont(":/new/prefix1/simsun.ttf") -1) {QMessageBox::warning(nullptr, "警告", "无法加载中文字体");}// 解析日志文件QVector<LogEntr…