莫卡洛夫斯基距离:全面指南

距离度量是数据科学和机器学习中众多算法的基础,它使得能够度量数据点之间的相似性或差异性。在这篇指南中,我们将探索闵可夫斯基距离的基础知识、它的数学特性以及它的实现方法。我们将研究它与其他常见距离度量的关系,并通过Python和R的编程示例来展示它的使用。

无论你是在开发聚类算法,还是在异常检测上工作,或者在分类模型上进行微调,理解闵可夫斯基距离都可以增强你对数据分析和方法开发的方法。让我们来看一下。

什么是闵可夫斯基距离?

闵可夫斯基距离是一个在范数向量空间中广泛使用的多功能度量,以德国数学家赫尔曼·闵可夫斯基的名字命名。它是几种众所周知距离度量的推广,使其成为数学、计算机科学和数据分析等领域的基本概念。

在其核心,闵可夫斯基距离提供了一种衡量多维空间中两点之间距离的方法。其特别有用之处在于,通过一个参数p,它可以包含其他距离度量作为特例,主要是通过参数p。这个参数使得闵可夫斯基距离能够适应不同的问题空间和数据特征。闵可夫斯基距离的一般公式为:

其中:

  • xy 是 n 维空间中的两点

  • p 是一个确定距离类型的参数(p ≥ 1)

  • |xi - yi| 表示 x 和 y 在每个维度上坐标的绝对差

闵科夫斯基距离之所以有用,主要有两个原因。首先,它让您可以根据需要在曼哈顿或欧氏距离之间灵活切换。

在实践中,参数 p 通常是通过结合训练/测试验证工作流来选择的。通过在交叉验证过程中测试不同的 p 值,您可以确定哪个值能够为特定数据集提供最佳的模型性能。

闵科夫斯基距离的工作原理

让我们来看看闵科夫斯基距离与其他距离公式的关系,然后通过一个示例进行说明。

其他距离度量的概括

首先要考虑的是闵科夫斯基距离公式是如何包含曼哈顿、欧几里得和切比雪夫距离公式的。

曼哈顿距离(p = 1):

p 设为 1 时,闵科夫斯基距离变为曼哈顿距离。

曼哈顿距离也称为城市街区距离或 L1 规范,它测量绝对差值的总和。

欧几里得距离(p = 2):

p 设置为 2 时,闵科夫斯基距离变为欧几里得距离。

欧几里得距离是最常见的距离度量,它表示两点之间的直线距离。

切比雪夫距离(p → ∞):

切比雪夫距离,也称为棋盘距离,它测量任意维度上的最大差值。

通过一个例子来理解

为了真正掌握闵可夫斯基距离的功能和力量,让我们通过一个例子来理解。这个探索将帮助我们了解参数p如何影响多维空间中距离的计算和解释。

考虑一个二维空间中的两个点:

  • 点A:(2, 3)
  • 点B:(5, 7)

我们将为不同的p值计算这两个点之间的闵可夫斯基距离。

闵可夫斯基距离公式中的参数p控制了对各个分量差异的敏感性:

  • 当p=1时:所有差异线性贡献。
  • 当p=2时:较大的差异由于平方而产生更大的影响。
  • 当p>2时:更大的差异被更加重视。
  • 当p→∞时:所有维度上的最大差值是唯一重要的。

随着p的增加,明可夫斯基距离通常会减小,接近切比雪夫距离。这是因为更高的p值更加关注最大差异,而对较小差异的关注减少。

为了可视化不同p值如何影响点A(2,3)和点B(5,7)之间的距离计算,让我们来看下面的图表:

观察图表,我们可以看到随着p值的增加,距离测量是如何变化的:

  • 曼哈顿距离(p=1),用绿色路径表示,产生最长的路径,因为它严格遵循网格。
  • 欧几里得距离(p=2),用橙色直线表示,提供了一条直线路径。
  • 切比雪夫距离(p=∞),用红色虚线表示,仅关注最大坐标差异,创建了一条在一个维度上最大化移动后再处理另一个维度的路径。
  • 带有p=3的明可夫斯基距离以紫色显示出轻微的曲线,暗示着欧几里得和切比雪夫距离之间的过渡。

这种可视化有助于我们理解为什么不同的p值可能会被选择用于不同的应用。例如,曼哈顿距离可能在城市导航问题中更为适用,而欧几里得距离通常用于物理空间计算。更高的p值,如明可夫斯基p=3的情况,可以在需要强调较大差异的情景中使用,而切比雪夫距离可能在任何维度中最大差异是最关键因素时更受青睐。

明可夫斯基距离的应用

闵科夫斯基距离的参数 p 可以调整,是一种灵活的工具,可用于各个领域。通过改变 p ,我们可以定制测量点间距离的方法,使其适用于不同的任务。

机器学习和数据科学

在机器学习和数据科学中,闵科夫斯基距离是依赖于测量数据点之间相似性或不相似性的算法的基础。k-Nearest Neighbors(k-NN)算法就是一个突出的例子,该算法根据数据点最近邻居的类别对数据点进行分类。

Pattern recognition

模式识别涉及识别数据中的模式和规律性,例如手写识别或面部特征检测。在这种情况下,闵科夫斯基距离测量代表模式的特征向量之间的差异。例如,在图像识别中,每幅图像都可以用像素值向量来表示。计算这些向量之间的闵科夫斯基距离可以量化图像的相似或不同程度。

通过调整p,我们可以控制距离度量对特定特征差异的敏感性。较低的p可以考虑所有像素的整体差异,而较高的p可以强调图像某些区域的显著差异。

异常检测

异常检测旨在识别与大多数数据点显著偏离的数据点,这在诸如欺诈检测、网络安全和系统故障检测等领域至关重要。明科夫斯基距离用于衡量数据点与数据集中其他数据点的距离。距离较大的点可能是异常值。通过选择适当的p,分析人员可以提高异常检测系统对其特定背景下最相关偏差的敏感性。

计算几何和空间分析

在计算几何和空间分析中,Minkowski距离用于计算空间中点之间的距离,它是许多几何算法的基础。例如,在这些领域中,碰撞检测依赖于Minkowski距离来确定物体何时接近到可以相互作用。通过调整p,开发者可以创建各种碰撞边界,从角状(较低p)到圆形(较高p)。

除了碰撞检测之外,Minkowski距离在空间聚类和形状分析中也有用。改变p的值可以让研究人员强调空间关系的不同方面,从城市街区距离到整体形状相似性。

Minkowski距离的数学特性

Minkowski距离不仅在实际应用中是一个多功能的工具,而且在数学理论中也是一个重要的概念,特别是在度量空间和范数的研究中。

度量空间特性

Minkowski距离满足度量空间中函数被视为度量所需的四个基本属性:

  • 非负性:任何两点之间的Minkowski距离总是非负的,d(x,y)≥0。这是显而易见的,因为它是一个非负项的和的p次方根(绝对值提升到p次幂)。
  • 相同元素的同一性:如果且仅当两个点相同时,它们之间的Minkowski距离为零。数学上,d(x,y) = 0如果且仅当x=y。这是因为相同的分量之间的绝对差异为零。
  • 对称性:Minkowski距离是对称的,意味着d(x,y)=d(y,x)。这个性质成立是因为绝对值项的减法顺序不会影响结果。
  • 三角不等式:闵可夫斯基距离满足三角不等式,该不等式表明对于任意三个点x、y和z,从x到z的距离不超过从x到y和从y到z的距离之和;正式表述为d(x,z)≤d(x,y)+d(y,z)。这个性质不能直接从公式中证明,通常需要更高级的数学知识,但本质上确保了在两点之间采取直接路径是最短的路线。

范数推广

闵可夫斯基距离是一个统一的框架,通过范数的概念将数学空间中测量距离的各种方法统一起来。简单来说,一个范数是一个将向量空间中的向量分配一个非负长度或大小的函数,本质上测量向量“长短”。通过调整闵可夫斯基距离公式中的参数p,我们可以平滑地过渡到不同的范数,每种范数都提供了一种独特的方法来计算向量长度。

例如,当p=1时,闵可夫斯基距离变成曼哈顿范数,它通过计算每个维度上绝对差值的和来衡量距离——想象自己在城市街道的网格中导航。当p=2时,它变成了欧几里得范数,计算两点之间的直线(“直线飞行”)距离。随着切比雪夫范数,其中距离由维度之间最大的单次差值确定。这种灵活性使得闵可夫斯基距离能够适应各种数学和实际场景,使其成为在不同情况下测量距离的多功能工具。

计算Minkowski距离的Python和R实现

让我们探讨使用Python和R实现Minkowski距离计算的方法。我们将研究可以实现这一目标的现成包和库。

Python示例

要在Python中计算Minkowski距离,我们可以使用SciPy库,该库提供了各种距离度量的有效实现。以下是一个计算不同p值的Minkowski距离的示例:

import numpy as np from scipy.spatial import distance # 示例点 point_a = [2, 3] point_b = [5, 7] # 不同的p值 p_values = [1, 2, 3, 10, np.inf] print("Minkowski distances using SciPy:") for p in p_values: if np.isinf(p): # 当p为无穷大时,使用切比雪夫距离 dist = distance.chebyshev(point_a, point_b) print(f"p = ∞, Distance = {dist:.2f}") else: dist = distance.minkowski(point_a, point_b, p) print(f"p = {p}, Distance = {dist:.2f}")

运行此代码后,读者可以观察到随着不同p值的变化,距离如何变化,这加强了文章中之前讨论的概念。

Minkowski distances using SciPy: p = 1, Distance = 7.00 p = 2, Distance = 5.00 p = 3, Distance = 4.50 p = 10, Distance = 4.02 p =, Distance = 4.00

这段代码演示了:

  1. 如何使用SciPy的距离函数来计算Minkowski和Chebyshev距离。
  2. 包括无穷大在内的各种p值的距离计算。
  3. Minkowski距离与其他度量标准(曼哈顿距离、欧几里得距离、切比雪夫距离)之间的关系。

R示例

对于R,我们将使用来自stats库的dist()函数:

# 使用stats::dist定义Minkowski距离函数 minkowski_distance <- function(x, y, p) { points <- rbind(x, y) if (is.infinite(p)) { # 对于p = Inf,使用method = "maximum"来计算Chebyshev距离 distance <- stats::dist(points, method = "maximum") } else { distance <- stats::dist(points, method = "minkowski", p = p) } return(as.numeric(distance)) } # 示例使用 point_a <- c(2, 3) point_b <- c(5, 7) # 不同的p值 p_values <- c(1, 2, 3, 10, Inf) cat("Minkowski distances between points A and B using stats::dist:\n") for (p in p_values) { distance <- minkowski_distance(point_a, point_b, p) if (is.infinite(p)) { cat(sprintf("p = ∞, Distance = %.2f\n", distance)) } else { cat(sprintf("p = %g, Distance = %.2f\n", p, distance)) } }

这段代码演示了:

  1. 如何使用stats中的dist()函数创建一个名为minkowski_distance的函数。

  2. 处理不同的p值,包括计算切比雪夫距离时的无穷大值。

  3. 计算不同p值下的明科夫斯基距离。

  4. 格式化输出,显示距离保留两位小数。

此代码的输出将会是:

Minkowski distances between points A and B using stats::dist: p = 1, Distance = 7.00 p = 2, Distance = 5.00 p = 3, Distance = 4.50 p = 10, Distance = 4.02 p =, Distance = 4.00

这个R实现提供了一个对应Python示例的实现,让读者可以看到如何在不同的编程环境中计算明科夫斯基距离。

结论

闵可夫斯基距离提供了一种灵活且适应性强的方法,用于测量多维空间中的距离。它通过参数p将其他常见距离度量泛化为一种有价值的工具,在数据科学和机器学习的各个领域中发挥着重要作用。通过调整p,从业者可以根据数据的特定特性和项目的需求来定制他们的距离计算,从而在聚类到异常检测等任务中 potentially enhancing results。

在您在自己的工作中应用闵可夫斯基距离时,我们鼓励您尝试不同的p值并观察它们对您的结果的影响。对于那些希望深化理解和技能的人,我们推荐探索Python中设计机器学习工作流程课程,并考虑我们的数据科学家认证职业项目。这些资源可以帮助您在各种情况下有效地应用距离度量知识。

Source:
https://www.datacamp.com/tutorial/minkowski-distance