乐趣区

关于机器学习:10个机器学习中常用的距离度量方法

间隔度量是有监督和无监督学习算法的根底,包含 k 近邻、反对向量机和 k 均值聚类等。

间隔度量的抉择影响咱们的机器学习后果,因而思考哪种度量最适宜这个问题是很重要的。因而,咱们在决定应用哪种测量方法时应该审慎。但在做出决定之前,咱们须要理解间隔测量是如何工作的,以及咱们能够从哪些测量中进行抉择。

本文将简要介绍罕用的间隔度量办法、它们的工作原理、如何用 Python 计算它们以及何时应用它们。这样能够加深常识和了解,进步机器学习算法和后果。

在更深刻地钻研不同的间隔测量之前,咱们先要有一个对于它们如何工作以及如何抉择适合的测量的大抵概念。

间隔度量用于计算给定问题空间中两个对象之间的差别,即数据集中的特色。而后能够应用该间隔来确定特色之间的相似性,间隔越小特色越类似。

对于间隔的度量,咱们能够在几何间隔测量和统计间隔测量之间进行抉择,应该抉择哪种间隔度量取决于数据的类型。特色可能有不同的数据类型(例如,实在值、布尔值、分类值),数据可能是多维的或由天文空间数据组成。

几何间隔测量

1、欧氏间隔 Euclidean distance

欧氏间隔度量两个实值向量之间的最短距离。因为其直观,应用简略和对许多用例有良好后果,所以它是最罕用的间隔度量和许多应用程序的默认间隔度量。

欧氏间隔也可称为 l2 范数,其计算方法为:

Python 代码如下

 from scipy.spatial import distance
 distance.euclidean(vector_1, vector_2)

欧氏间隔有两个次要毛病。首先,间隔测量不适用于比 2D 或 3D 空间更高维度的数据。第二,如果咱们不将特色规范化和 / 或标准化,间隔可能会因为单位的不同而歪斜。

2、曼哈顿间隔 Manhattan distance

曼哈顿间隔也被称为出租车或城市街区间隔,因为两个实值向量之间的间隔是依据一个人只能以直角挪动计算的。这种间隔度量通常用于离散和二元属性,这样能够取得实在的门路。

曼哈顿间隔以 l1 范数为根底,计算公式为:

Python 代码如下

 from scipy.spatial import distance
 distance.cityblock(vector_1, vector_2)

曼哈顿的间隔有两个次要的毛病。它不如高维空间中的欧氏间隔直观,它也没有显示可能的最短门路。尽管这可能没有问题,但咱们应该意识到这并不是最短的间隔。

3、切比雪夫间隔 Chebyshev distance

切比雪夫间隔也称为棋盘间隔,因为它是两个实值向量之间任意维度上的最大间隔。它通常用于仓库物流中,其中最长的门路决定了从一个点到另一个点所需的工夫。

切比雪夫间隔由 l - 无穷范数计算:

Python 代码如下

 from scipy.spatial import distance
 distance.chebyshev(vector_1, vector_2)

切比雪夫间隔只有十分特定的用例,因而很少应用。

4、闵可夫斯基间隔 Minkowski distance

闵可夫斯基间隔是上述间隔度量的狭义模式。它能够用于雷同的用例,同时提供高灵活性。咱们能够抉择 p 值来找到最合适的间隔度量。

闵可夫斯基间隔的计算方法为:

Python 代码如下

 from scipy.spatial import distance
 distance.minkowski(vector_1, vector_2, p)

因为闵可夫斯基间隔示意不同的间隔度量,它就有与它们雷同的次要毛病,例如在高维空间的问题和对特色单位的依赖。此外,p 值的灵活性也可能是一个毛病,因为它可能升高计算效率,因为找到正确的 p 值须要进行屡次计算。

5、余弦类似度和间隔 Cosine similarity

余弦类似度是方向的度量,他的大小由两个向量之间的余弦决定,并且疏忽了向量的大小。余弦类似度通常用于与数据大小无关紧要的高维,例如,举荐零碎或文本剖析。

余弦类似度能够介于 -1(相同方向) 和 1(雷同方向) 之间,计算方法为:

余弦类似度罕用于范畴在 0 到 1 之间的正空间中。余弦间隔就是用 1 减去余弦类似度,位于 0(类似值) 和 1(不同值) 之间。

Python 代码如下

 from scipy.spatial import distance
 distance.cosine(vector_1, vector_2)

余弦间隔的次要毛病是它不思考大小而只思考向量的方向。因而,没有充分考虑到值的差别。

6、半正矢间隔 Haversine distance

半正矢间隔测量的是球面上两点之间的最短距离。因而罕用于导航,其中经度和纬度和曲率对计算都有影响。

半正矢间隔的公式如下:

其中 r 为球面半径,φ 和 λ 为经度和纬度。

Python 代码如下

 from sklearn.metrics.pairwise import haversine_distances
 haversine_distances([vector_1, vector_2])

半正矢间隔的次要毛病是假如是一个球体,而这种状况很少呈现。

7、汉明间隔

汉明间隔掂量两个二进制向量或字符串之间的差别。

对向量按元素进行比拟,并对差别的数量进行均匀。如果两个向量雷同,失去的间隔是 0 之间,如果两个向量齐全不同,失去的间隔是 1。

Python 代码如下

 from scipy.spatial import distance
 distance.hamming(vector_1, vector_2)

汉明间隔有两个次要毛病。间隔测量只能比拟雷同长度的向量,它不能给出差别的大小。所以当差别的大小很重要时,不倡议应用汉明间隔。

统计间隔测量

统计间隔测量可用于假设检验、拟合优度测验、分类工作或异样值检测。

8、杰卡德指数和间隔 Jaccard Index

Jaccard 指数用于确定两个样本集之间的相似性。它反映了与整个数据集相比存在多少一对一匹配。Jaccard 指数通常用于二进制数据比方图像识别的深度学习模型的预测与标记数据进行比拟,或者依据单词的重叠来比拟文档中的文本模式。

Jaccard 间隔的计算方法为:

Python 代码如下

 from scipy.spatial import distance
 distance.jaccard(vector_1, vector_2)

Jaccard 指数和间隔的次要毛病是,它受到数据规模的强烈影响,即每个我的项目的权重与数据集的规模成反比。

9、Sorensen-Dice 指数

Sörensen-Dice 指数相似于 Jaccard 指数,它能够掂量的是样本集的相似性和多样性。该指数更直观,因为它计算重叠的百分比。Sörensen-Dice 索引罕用于图像宰割和文本类似度剖析。

计算公式如下:

Python 代码如下

 from scipy.spatial import distance
 distance.dice(vector_1, vector_2)

它的次要毛病也是受数据集大小的影响很大。

10、动静工夫规整 Dynamic Time Warping

动静工夫规整是测量两个不同长度工夫序列之间间隔的一种重要办法。能够用于所有工夫序列数据的用例,如语音辨认或异样检测。

为什么咱们须要一个为工夫序列进行间隔测量的度量呢?如果工夫序列长度不同或失真,则上述面说到的其余间隔测量无奈确定良好的相似性。比方欧几里得间隔计算每个工夫步长的两个工夫序列之间的间隔。然而如果两个工夫序列的形态雷同但在工夫上产生了偏移,那么只管工夫序列十分类似,但欧几里得间隔会体现出很大的差别。

动静工夫规整通过应用多对一或一对多映射来最小化两个工夫序列之间的总间隔来防止这个问题。当搜寻最佳对齐时,这会产生更直观的相似性度量。通过动静布局找到一条蜿蜒的门路最小化间隔,该门路必须满足以下条件:

边界条件: 蜿蜒门路在两个工夫序列的起始点和完结点开始和完结

枯燥性条件: 放弃点的工夫程序,防止工夫倒流

间断条件: 门路转换限度在相邻的工夫点上,防止工夫跳跃

整经窗口条件 (可选): 容许的点落入给定宽度的整经窗口

坡度条件 (可选): 限度蜿蜒门路坡度,防止极其静止

咱们能够应用 Python 中的 fastdtw 包:

 from scipy.spatial.distance import euclidean
 from fastdtw import fastdtw
 
 distance, path = fastdtw(timeseries_1, timeseries_2, dist=euclidean)

动静工夫规整的一个次要毛病是与其余间隔测量方法相比,它的计算工作量绝对较高。

总结

在这篇文章中,简要介绍了十种罕用的间隔测量方法。本文中曾经展现了它们是如何工作的,如何在 Python 中实现它们,以及常常应用它们解决什么问题。如果你认为我错过了一个重要的间隔测量,请留言通知我。

https://avoid.overfit.cn/post/785c0b20c78749ddaf4223796040d522

作者:Jonte Dancker

退出移动版