机器学习的距离度量

2025年2月3日 | 阅读11分钟

引言

距离度量机器学习中扮演着重要角色。它们是几个广受欢迎且高效的机器学习算法的基础,例如用于无监督学习的 k 均值聚类和用于有监督学习的 k 最近邻算法。需要根据数据类型选择和使用各种距离度量。因此,理解如何应用和计算各种广泛使用的距离度量以及由此产生的分数背后的原理至关重要。

什么是距离度量?

距离度量是几种机器学习方法的重要组成部分。它们通常用于在有监督和无监督学习场景中查找数据点之间的相似性。无论是用于聚类还是分类,当距离度量有效时,我们的机器学习模型表现会更好。

为了解决分类或回归问题,假设您需要使用 K 均值聚类或 k 最近邻算法 (KNN) 等聚类技术来构建聚类。如果两个点具有相似的特征,我们可以说它们彼此相似。当我们映射这些点时,它们在距离上会更接近。因此,我们能够确定点之间的距离以及它们的相似程度。

距离度量有什么作用?

距离度量是一个客观的分数,描述了问题区域中两个事物之间的相对差异。

这两个对象通常是描述事件(如交易、索赔或诊断)或主题(如人、汽车或房屋)的数据行。

您可能遇到距离度量的最可能情况是,如果您使用某种强烈依赖它们的机器学习方法。这种最著名的方法是 KNN 算法,通常也称为 k 最近邻算法。

通过计算新示例(行)与训练数据集中每个示例(行)之间的距离,KNN 方法预测新示例是否将被分类为回归。然后,通过平均结果(回归的实际值的平均值或类标签的众数)来形成预测,该结果基于训练数据集中距离最短的 k 个案例的选择。

KNN 属于一类更广泛的算法,称为基于实例或基于案例的学习,其中大多数算法都以相似的方式使用距离度量。学习向量量化 (LVQ) 方法是另一种广受欢迎的基于实例的技术,它也使用距离度量。它可以被视为一种神经网络。

自组织映射算法 (SOM) 的性质与此类似,可用于有监督和无监督学习场景。SOM 也使用距离度量。另一种使用距离度量的无监督学习方法是 K 均值聚类算法。

以下是几个最著名的、根本依赖距离度量的机器学习算法

  • K 最近邻
  • 学习向量量化 (LVQ)
  • 自组织映射 (SOM)
  • K-Means 聚类

许多依赖核的技术也可以归类为基于距离的算法。支持向量机算法 (简称 SVM) 可能是最著名的核技术。

在回归相关问题中,数值误差也可以被认为是距离。例如,计算数据集中预期结果和预测结果之间总距离的一种方法是,取预期值和预测值之间的误差。这是一种一维距离度量,可以对测试集中的所有样本进行平均或求和。标准距离度量可能类似于误差的计算,例如均方误差或平均绝对误差。

机器学习中的距离度量类型

以下是机器学习中最常用的几种距离度量

汉明距离

汉明距离公式用于确定两个二进制向量(通常简称二进制字符串或比特字符串)之间的距离。

当您对分类数据列进行独热编码时,几乎肯定会出现比特字符串。

例如,如果一列包含“红色”、“绿色”和“蓝色”等类别,您可能已经对每个示例进行了独热编码,将其表示为一个比特字符串,其中每个列有一个比特。

红色 = [1, 0, 0]

绿色 = [0, 1, 0]

蓝色 = [0, 0, 1]

有两种可能的公式来计算它们之间的距离,其基本形式是两个比特字符串之间不同比特的平均数或总数。这就是汉明距离。

鉴于独热编码字符串总是 0 或 1,总结字符串之间比特差异的总和可能更有意义。

汉明距离 = sum for i to N abs(v1[i] - v2[i])

对于可能包含多个 1 比特的比特字符串,更典型的是确定比特差异的平均数,以提供 0(相同)到 1(完全不同)之间的汉明距离分数。

汉明距离 = (sum for i to N abs(v1[i] - v2[i])) / N

示例

运行示例后,报告两个比特字符串之间的汉明距离。

如我们所见,两个字符串每六个比特位置中有两个不同。这些差异的平均值,即 2/6,约为 1/3 或 0.333。

输出

0.3333333333333333

SciPy 的 hamming() 方法允许我们以另一种方式执行相同的计算。下面是整个示例。

通过运行示例并查看我们得到相同的结果,我们可以验证我们的手动实现。

输出

0.3333333333333333

欧几里得距离

欧几里德距离公式用于计算两个实值向量之间的距离。

当您计算两行数据之间的距离,其中某些字段包含浮点数或整数等数值数据时,通常使用欧几里德距离计算方法。在应用欧几里德距离之前,如果任何列包含具有不同比例的值,则对所有列中的数值进行归一化或标准化是标准程序。否则,距离度量将由具有高值的列主导。

欧几里德距离公式如下

欧几里德距离 = sqrt(sum for i to N (v1[i] - v2[i])^2)

为了加快计算速度,如果距离计算将运行数百或数百万次,通常的做法是消除平方根过程。经过此调整后,最终分数仍将具有相同的相对比例,并且可以有效地用于机器学习算法以识别最相似的案例。

欧几里德距离 = sum for i to N (v1[i] - v2[i])^2

此计算与 L2 向量范数有关,等于平方误差之和,如果加上平方根,则等于平方误差之和的根。

示例

运行示例后,报告两个向量之间的欧几里德距离。

输出

6.082762530298219

SciPy 方法 euclidean() 也可以用于执行相同的计算。下面是整个示例。

通过运行示例并查看我们得到相同的结果,我们可以验证我们的手动实现。

输出

6.082762530298219

曼哈顿距离(出租车距离或城市街区距离)

曼哈顿距离,也称为城市街区距离,是欧几里德实值向量空间中任意两点之间的距离。

对固定网格上的项目应用意义的向量,例如城市中的街区或棋盘,可能证明更有用。正如度量的名称所暗示的那样,出租车名称暗示了出租车在城市街区(网格坐标)之间行驶的最短路径的直观计算。

对于整数特征空间中的两个向量,计算曼哈顿距离而不是欧几里德距离可能更有意义。

两个向量的绝对差相加即可确定曼哈顿距离。

曼哈顿距离 = sum for i to N sum |v1[i] - v2[i]|

曼哈顿距离与平均绝对误差度量、绝对误差之和以及 L1 向量范数有关。

以下示例展示了如何计算两个整数向量之间的曼哈顿距离以说明这一点。

通过运行示例,可以得到两个向量之间的曼哈顿距离。

输出

13

SciPy 函数 cityblock() 允许我们以另一种方式执行相同的计算。下面是整个示例。

通过运行示例并查看我们得到相同的结果,我们可以验证我们的手动实现。

输出

13

闵可夫斯基距离

闵可夫斯基距离方法用于计算两个实值向量之间的距离。

添加了“阶数”或“p”参数,允许计算各种距离度量。它是欧几里德距离和曼哈顿距离度量的推广。

闵可夫斯基距离度量使用以下公式确定

闵可夫斯基距离 = (sum for i to N (abs(v1[i] - v2[i]))^p)^(1/p) ,其中“p”是阶数参数。

当 p 为 1 时,计算与曼哈顿距离相同。当 p 为 2 时,它等于欧几里德距离。

中间值提供了两种度量之间的受控平衡。

在开发使用距离度量的机器学习方法时,闵可夫斯基距离经常被使用,因为它提供了一个可调节的超参数“p”来控制用于实值向量的距离度量类型。

这是一个计算两个实向量之间闵可夫斯基距离的示例,以便我们了解此计算的工作原理。

当运行示例时,通过首先计算并打印 p 等于 1 的闵可夫斯基距离,然后将 p 等于 2 的闵可夫斯基距离(与前几节中计算的相同数据的值相对应),获得曼哈顿距离和欧几里德距离。

输出

13.0
6.082762530298219

SciPy 方法 minkowski_distance() 也可以用于执行相同的计算。以下是整个示例。

通过运行示例并查看我们得到相同的结果,我们可以验证我们的手动实现。

输出

13.0
6.082762530298219

余弦相似度

余弦相似度是数学计算的另一个特征,它评估n空间中两组项的向量之间的相似程度。它兼容任何类型的向量数据、书面文档、图像和任何类型的音频文件。在文本挖掘和信息检索活动中,余弦相似度是衡量两个文本内容相关程度的常用度量。在这种情况下,每个文档都表示为一个向量,每个维度表示文本词典中的一个短语或单词。每个维度的值表示短语在手稿中出现的频率或重要性。

我们首先使用加权系统(例如词频-逆文档频率 (TF-IDF))计算两个文本的各自向量,以确定它们之间的余弦相似度。之后,我们将这些向量的点积除以它们的模的乘积。接近 1 的值表示相似度越来越高。结果值的范围从 -1(相反)到 1(相同)。在比较和评估表示为 n 维空间中向量的数据时,余弦相似度是一个有价值的工具。它对于机器学习、自然语言处理和信息检索中的各种任务很有帮助,在这些任务中,确定两个对象或消息的相似程度对于得出结论或提供建议至关重要。

余弦相似度的优点

  • 余弦相似度之所以有用,是因为它允许两个相同的数据项之间的角度更小,即使它们的尺寸导致它们被欧几里德距离分开。角度越窄,事物越相似。
  • 当在多维空间中显示时,余弦相似度捕获数据项的方向(角度),而不是大小。
  • 余弦相似度可以处理不同长度的数据,而汉明距离只能检查大小相同的数据。在评估文本数据时,余弦相似度会为文本数据产生更高的相似度分数,因为它考虑了文档中频繁出现的单词,而汉明距离不考虑这一点,并从文本文档中产生较低的相似度指数。

杰卡德相似性

另一种常用的方法是 Jaccard 相似度方法,它用于比较两个数据集之间的相似度。然而,从原始意义上讲,Jaccard 相似度只是两个集合交集的数量除以两个集合的总数量。

A = {苹果,香蕉,橙子}

B = {香蕉,葡萄柚}

“香蕉”一词是这两个集合交集中存在的唯一元素。四个元素构成了这两个集合的合并:“葡萄柚”、“香蕉”、“橙子”和“苹果”。因此,A 和 B 之间的 Jaccard 相似系数是 1/4,即 0.25。

此系数的值范围从 0 到 1。如果系数接近 1,则两个集合彼此更具可比性,因为它表示它们之间有更多共同元素。

Jaccard 相似度有许多应用,涵盖了许多行业。例如,搜索引擎和其他信息检索系统采用 Jaccard 相似度来帮助根据用户输入的关键词查找相关出版物。此外,它对于在各种数据集中发现共性的机器学习算法至关重要,例如推荐系统和聚类。Jaccard 相似度是确定任意两个类别变量之间相关程度的简单有效技术。我们可以通过比较每个集合中日常项目相对于其总大小的比例来确定这些变量之间潜在的相关程度。广泛业务领域中需要精确数据分析测量的研究人员将从这种方法中受益匪浅。

结论

距离度量机器学习中至关重要,尤其是在聚类、分类和异常检测中。其中一些度量包括汉明距离、欧几里德距离、曼哈顿距离、闵可夫斯基距离、余弦相似度Jaccard 相似度。就数据类型而言,汉明距离适用于分类数据。欧几里德距离用于连续数据,而曼哈顿距离对于高维数据最有价值。余弦相似度最适合文本数据,因为它不考虑向量的大小,而只考虑它们的方向。这意味着所选择的距离度量将根据数据的类型、维度以及要解决的问题而异。选择正确的度量会不断提高模型的性能、准确性和速度,使各种距离度量的研究成为机器学习的关键方面。