【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

news/2024/11/20 13:29:07/

欧式距离和曼哈顿距离是两种常用的距离度量方法,用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。

1. 欧式距离

概念

欧式距离(Euclidean Distance)是最常见的直线距离度量方法,源于欧几里得几何学。它表示两点之间的直线距离,类似于二维或三维空间中两点间的最短路径。

公式

在 n-维空间中,给定两点 P = (x_1, x_2, ..., x_n)Q = (y_1, y_2, ..., y_n),欧式距离公式为:

d(P, Q) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2}

欧式距离的发现

欧式距离的起源可以追溯到古希腊数学家欧几里得(Euclid,约公元前300年),其在著作《几何原本》(Elements)中系统化了几何学的基础知识。
欧式几何定义了空间中点与点之间的最短距离,即“直线距离”,由此衍生出欧式距离的概念。

  • 基本原理:勾股定理 欧式距离公式源于勾股定理:在直角三角形中,斜边的平方等于两直角边的平方和。

    c^2 = a^2 + b^2 \quad \implies \quad c = \sqrt{a^2 + b^2}

    推广到 n-维空间,给定两点 P = (x_1, x_2, ..., x_n) 和 Q = (y_1, y_2, ..., y_n),距离公式扩展为:

    d(P, Q) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2}
  • 主要特点 欧式距离定义了连续空间中两点之间的“几何距离”,强调的是全局最短路径。这一概念与自然界中的最短路径问题高度吻合。

经典应用案例

  1. 聚类分析:例如 K-Means 聚类算法使用欧式距离衡量样本点与聚类中心的距离。
  2. 图像处理:计算图像像素值的差异。

2. 曼哈顿距离

概念

曼哈顿距离(Manhattan Distance)也称为“城市街区距离”或“L1 距离”,表示两点之间的路径长度,假设只能沿水平和垂直方向移动,类似于网格状街道上的步行距离。

公式

在 n-维空间中,给定两点P = (x_1, x_2, ..., x_n)Q = (y_1, y_2, ..., y_n),曼哈顿距离公式为:

d(P, Q) = \sum_{i=1}^n |x_i - y_i|

曼哈顿距离的发现

曼哈顿距离的概念起源于网格化城市模型的研究,最初应用于街道规划和城市交通问题。名字来源于美国纽约的曼哈顿区,该区域的街道呈现规则的网格状布局。

  • 基本思想 在曼哈顿街道中,车辆或行人通常沿着水平和垂直方向移动,因此实际距离是路径上水平方向和竖直方向的距离之和,而非欧式距离的直线距离。

  • 数学化描述 对于二维空间中两点 P = (x_1, y_1)Q = (x_2, y_2),其曼哈顿距离定义为:

    d(P, Q) = |x_1 - x_2| + |y_1 - y_2|

    推广到 n-维空间,计算每一维的绝对差值并累加即可,公式为:

    d(P, Q) = \sum_{i=1}^n |x_i - y_i|
  • 主要特点 曼哈顿距离描述了离散空间或网格系统中最短路径,适合用于模拟实际城市中路径优化和步行距离等问题。

经典应用案例

  1. 推荐系统:衡量用户偏好之间的距离。
  2. 路径规划:模拟城市中的最短步行距离。

3. Python 实现及图例

以下代码对欧式距离和曼哈顿距离进行计算,并通过图形化展示两种距离的差异。

代码示例

import numpy as np
import matplotlib.pyplot as plt# 定义两点
P = np.array([1, 2])
Q = np.array([4, 6])# 计算欧式距离
euclidean_distance = np.sqrt(np.sum((P - Q) ** 2))# 计算曼哈顿距离
manhattan_distance = np.sum(np.abs(P - Q))# 打印结果
print(f"欧式距离: {euclidean_distance}")
print(f"曼哈顿距离: {manhattan_distance}")# 图示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(8, 6))
plt.scatter(P[0], P[1], color='blue', label='Point P (1, 2)')
plt.scatter(Q[0], Q[1], color='red', label='Point Q (4, 6)')
plt.plot([P[0], Q[0]], [P[1], Q[1]], color='green', linestyle='--', label='Euclidean Path')# 曼哈顿路径
plt.plot([P[0], Q[0]], [P[1], P[1]], color='orange', linestyle='-', label='Manhattan Path')
plt.plot([Q[0], Q[0]], [P[1], Q[1]], color='orange', linestyle='-')# 坐标轴与图例
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.xlim(0, 7)
plt.ylim(0, 7)
plt.grid()
plt.title("欧式距离与曼哈顿距离")
plt.legend()
plt.show()
欧式距离: 5.0
曼哈顿距离: 7

运行结果

  • 欧式距离:从 P 到 Q 的最短直线路径,图中为绿色虚线。
  • 曼哈顿距离:从 P 到 Q 沿水平和垂直移动的路径,图中为橙色折线。

4. 比较与总结

特性欧式距离曼哈顿距离
移动方式直线垂直+水平
应用场景连续数据、物理距离离散数据、网格路径
计算复杂度二次方和开平方计算绝对值和累加
优点更适合度量几何意义简单计算,鲁棒性强

欧式距离更适合分析连续空间中的距离,而曼哈顿距离更适合离散或网格化的场景。根据应用需求选择合适的度量方式尤为重要。


http://www.ppmy.cn/news/1548496.html

相关文章

C/C++实现tcp客户端和服务端的实现(从零开始写自己的高性能服务器)

目录 tcp客户端通信流程 tcp客户端设计 1、创建通信对象 2、链接服务器 3、发送数据 / 读取数据 4、关闭通信 tcp服务端设计 1、创建通信对象 2、绑定服务器地址信息 3、设置服务器为监听模式 4、接收客户的链接请求 编写tcp客户端和服务端,实现双向通信…

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…

[模板总结] - 单向链表LinkedList操作

题目汇总 Leetcode 21, 82, 160, 206, 237, 268 Leetcode 21. 合并两个有序链表 归并排序的思路,创建一个哨兵节点从两个链表中按大小插入即可。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(…

【Redis_Day4】内部编码和单线程模型

【Redis_Day4】内部编码和单线程模型 五大数据类型内部编码object encoding key1:查询key1对应值的内部编码 redis中的单线程模型 redis中的数据都是以键值对的方式存的,redis内部用哈希表组织这些键值对。 五大数据类型 站在用户角度, 在一…

汽车科技前沿:Spring Boot资讯快车道

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

如何删除pdf里的任意一页?删除PDF里任意一页的几种方法

如何删除pdf里的任意一页?尽管PDF文件具有许多优点,如跨平台兼容性和格式保真性,但在编辑和修改方面,它与像Word或Excel这类文档格式不同,通常不能像其他文档那样轻松进行直接的内容删除或修改。这让很多人以为&#x…

VMware高危漏洞VMSA-2024-0019修复堆溢出和权限提升漏洞

一、概述 VMware vCenter Server 高危漏洞(CVE-2024-38812、CVE-2024-38813)再次受到攻击,需要升级补丁,详情查看之前文章紧急通告VMware vCenter高危漏洞CVE-2024-38812和CVE-2024-38813修复方案 再次更新了漏洞 二、漏洞影像描…

纯血鸿蒙NEXT-组件导航 (Navigation)

Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件…