10个机器学习中常用的距离度量方法
转载:Deephub Imba
距离度量是有监督和无监督学习算法的基础,包括k近邻、支持向量机和k均值聚类等。
距离度量的选择影响我们的机器学习结果,因此考虑哪种度量最适合这个问题是很重要的。因此,我们在决定使用哪种测量方法时应该谨慎。但在做出决定之前,我们需要了解距离测量是如何工作的,以及我们可以从哪些测量中进行选择。
本文将简要介绍常用的距离度量方法、它们的工作原理、如何用Python计算它们以及何时使用它们。这样可以加深知识和理解,提高机器学习算法和结果。
在更深入地研究不同的距离测量之前,我们先要有一个关于它们如何工作以及如何选择合适的测量的大致概念。
距离度量用于计算给定问题空间中两个对象之间的差异,即数据集中的特征。然后可以使用该距离来确定特征之间的相似性, 距离越小特征越相似。
对于距离的度量,我们可以在几何距离测量和统计距离测量之间进行选择,应该选择哪种距离度量取决于数据的类型。特征可能有不同的数据类型(例如,真实值、布尔值、分类值),数据可能是多维的或由地理空间数据组成。
几何距离测量
1、欧氏距离 Euclidean distance
欧氏距离度量两个实值向量之间的最短距离。由于其直观,使用简单和对许多用例有良好结果,所以它是最常用的距离度量和许多应用程序的默认距离度量。
欧氏距离也可称为l2范数,其计算方法为:
Python代码如下
from scipy.spatial import distancedistance.euclidean(vector_1, vector_2)
欧氏距离有两个主要缺点。首先,距离测量不适用于比2D或3D空间更高维度的数据。第二,如果我们不将特征规范化和/或标准化,距离可能会因为单位的不同而倾斜。
2、曼哈顿距离 Manhattan distance
曼哈顿距离也被称为出租车或城市街区距离,因为两个实值向量之间的距离是根据一个人只能以直角移动计算的。这种距离度量通常用于离散和二元属性,这样可以获得真实的路径。
曼哈顿距离以l1范数为基础,计算公式为:
Python代码如下
from scipy.spatial import distancedistance.cityblock(vector_1, vector_2)
曼哈顿的距离有两个主要的缺点。它不如高维空间中的欧氏距离直观,它也没有显示可能的最短路径。虽然这可能没有问题,但我们应该意识到这并不是最短的距离。
3、切比雪夫距离 Chebyshev distance
切比雪夫距离也称为棋盘距离,因为它是两个实值向量之间任意维度上的最大距离。它通常用于仓库物流中,其中最长的路径决定了从一个点到另一个点所需的时间。
切比雪夫距离由l -无穷范数计算:
Python代码如下
from scipy.spatial import distancedistance.chebyshev(vector_1, vector_2)
切比雪夫距离只有非常特定的用例,因此很少使用。
4、闵可夫斯基距离 Minkowski distance
闵可夫斯基距离是上述距离度量的广义形式。它可以用于相同的用例,同时提供高灵活性。我们可以选择 p 值来找到最合适的距离度量。
闵可夫斯基距离的计算方法为:
Python代码如下
from scipy.spatial import distancedistance.minkowski(vector_1, vector_2, p)
由于闵可夫斯基距离表示不同的距离度量,它就有与它们相同的主要缺点,例如在高维空间的问题和对特征单位的依赖。此外,p值的灵活性也可能是一个缺点,因为它可能降低计算效率,因为找到正确的p值需要进行多次计算。
5、余弦相似度和距离 Cosine similarity
余弦相似度是方向的度量,他的大小由两个向量之间的余弦决定,并且忽略了向量的大小。余弦相似度通常用于与数据大小无关紧要的高维,例如,推荐系统或文本分析。
余弦相似度可以介于-1(相反方向)和1(相同方向)之间,计算方法为:
余弦相似度常用于范围在0到1之间的正空间中。余弦距离就是用1减去余弦相似度,位于0(相似值)和1(不同值)之间。
Python代码如下
from scipy.spatial import distancedistance.cosine(vector_1, vector_2)
余弦距离的主要缺点是它不考虑大小而只考虑向量的方向。因此,没有充分考虑到值的差异。
6、半正矢距离 Haversine distance
半正矢距离测量的是球面上两点之间的最短距离。因此常用于导航,其中经度和纬度和曲率对计算都有影响。
半正矢距离的公式如下:
其中r为球面半径,φ和λ为经度和纬度。
Python代码如下
from sklearn.metrics.pairwise import haversine_distanceshaversine_distances([vector_1, vector_2])
半正矢距离的主要缺点是假设是一个球体,而这种情况很少出现。
7、汉明距离
汉明距离衡量两个二进制向量或字符串之间的差异。
对向量按元素进行比较,并对差异的数量进行平均。如果两个向量相同,得到的距离是0之间,如果两个向量完全不同,得到的距离是1。
Python代码如下
from scipy.spatial import distancedistance.hamming(vector_1, vector_2)
汉明距离有两个主要缺点。距离测量只能比较相同长度的向量,它不能给出差异的大小。所以当差异的大小很重要时,不建议使用汉明距离。
统计距离测量
统计距离测量可用于假设检验、拟合优度检验、分类任务或异常值检测。
8、杰卡德指数和距离 Jaccard Index
Jaccard指数用于确定两个样本集之间的相似性。它反映了与整个数据集相比存在多少一对一匹配。Jaccard指数通常用于二进制数据比如图像识别的深度学习模型的预测与标记数据进行比较,或者根据单词的重叠来比较文档中的文本模式。
Jaccard距离的计算方法为:
Python代码如下
from scipy.spatial import distancedistance.jaccard(vector_1, vector_2)
Jaccard指数和距离的主要缺点是,它受到数据规模的强烈影响,即每个项目的权重与数据集的规模成反比。
9、Sorensen-Dice指数
Sörensen-Dice指数类似于Jaccard指数,它可以衡量的是样本集的相似性和多样性。该指数更直观,因为它计算重叠的百分比。Sörensen-Dice索引常用于图像分割和文本相似度分析。
计算公式如下:
Python代码如下
from scipy.spatial import distancedistance.dice(vector_1, vector_2)
它的主要缺点也是受数据集大小的影响很大。
10、动态时间规整 Dynamic Time Warping
动态时间规整是测量两个不同长度时间序列之间距离的一种重要方法。可以用于所有时间序列数据的用例,如语音识别或异常检测。
为什么我们需要一个为时间序列进行距离测量的度量呢?如果时间序列长度不同或失真,则上述面说到的其他距离测量无法确定良好的相似性。比如欧几里得距离计算每个时间步长的两个时间序列之间的距离。但是如果两个时间序列的形状相同但在时间上发生了偏移,那么尽管时间序列非常相似,但欧几里得距离会表现出很大的差异。
动态时间规整通过使用多对一或一对多映射来最小化两个时间序列之间的总距离来避免这个问题。当搜索最佳对齐时,这会产生更直观的相似性度量。通过动态规划找到一条弯曲的路径最小化距离,该路径必须满足以下条件:
边界条件:弯曲路径在两个时间序列的起始点和结束点开始和结束
单调性条件:保持点的时间顺序,避免时间倒流
连续条件:路径转换限制在相邻的时间点上,避免时间跳跃
整经窗口条件(可选):允许的点落入给定宽度的整经窗口
坡度条件(可选):限制弯曲路径坡度,避免极端运动
我们可以使用 Python 中的 fastdtw 包:
from scipy.spatial.distance import euclideanfrom fastdtw import fastdtwdistance, path = fastdtw(timeseries_1, timeseries_2, dist=euclidean)
动态时间规整的一个主要缺点是与其他距离测量方法相比,它的计算工作量相对较高。
总结
在这篇文章中,简要介绍了十种常用的距离测量方法。本文中已经展示了它们是如何工作的,如何在Python中实现它们,以及经常使用它们解决什么问题。如果你认为我错过了一个重要的距离测量,请留言告诉我。
作者:Jonte Dancker
推荐阅读:我的2022届互联网校招分享我的2021总结浅谈算法岗和开发岗的区别互联网校招研发薪资汇总
2022届互联网求职现状,金9银10快变成铜9铁10!!公众号:AI蜗牛车保持谦逊、保持自律、保持进步发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)
发送【1222】获取一份不错的leetcode刷题笔记发送【AI四大名著】获取四本经典AI电子书
10个机器学习中常用的距离度量方法相关推荐
- 机器学习案例系列教程——距离度量方法总结
在数据挖掘中,无论是对数据进行分类.聚类还是异常检测.关联性分析,都建立在数据之间相似性或相异性的度量基础上.通常使用距离作为数据之间相似性或相异性的度量方法,常用的度量方法有欧式距离.曼哈顿距离 ...
- 机器学习常用的距离度量方法
机器学习领域常常会遇到求解相似度的问题,通常可以转化为对距离的求解,最常用的是对"向量"的距离求解.比如,求解某物品A和某物品B之间的相似度,可以收集它们共有特征,构建特征向量a和 ...
- 机器学习中常用的距离计算方法
我们已经知道了如何通过样本间的距离来评估簇间的距离,本节只剩下最后一个问题了,如何计算样本间的距离,假设样本是n维,常用的距离计算方法有: 1)欧拉距离(Euclidean distance): 2) ...
- 机器学习领域 几种距离度量方法【3】
十三.堪培拉距离 (Canberra Distance) 十四.布雷柯蒂斯距离(Bray Curtis Distance) 十五.交叉熵(Cross Entropy) 十六.相对熵(relative ...
- 机器学习中常用的几何距离测量和统计距离测量方法总结
目录 前言 几何距离测量 1.欧氏距离 Euclidean distance 2.曼哈顿距离 Manhattan distance 3.切比雪夫距离 Chebyshev distance 4.闵可夫斯 ...
- 数据科学中常见的9种距离度量方法,包括欧氏距离、切比雪夫距离、半正矢距离等
1.欧氏距离(Euclidean Distance) 欧式距离可解释为连接两个点的线段的长度.欧式距离公式非常简单,使用勾股定理从这些点的笛卡尔坐标计算距离. 代码实现: import numpy a ...
- 【机器学习基础】常见的9种距离度量方法,内含欧氏距离、切比雪夫距离等
作者|机器之心编译 来源|机器之心 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本文中,数据科学家 Maarten Grootendorst 向我们介绍了 9 种 ...
- 详解机器学习中常见的距离与Python实现
在机器学习的很多算法,尤其是与聚类相关的算法中你会碰到各种各样的距离,欧式距离.马氏距离.切比雪夫距离等会让初学者头疼,如果只看书的话,大多书上就一行公式带过,看完还是迷迷糊糊,今天本文就来盘一盘机器 ...
- 数据科学中常见的9种距离度量方法
选自towardsdatascience 作者:Maarten Grootendorst 机器之心编译 编辑:陈萍 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本 ...
最新文章
- 在pycharm中无法引入同一目录下的python文件
- centos6.7 64位环境下部署MySQL-5.7.13
- BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]
- 定义c/c++全局变量/常量几种方法的区别
- 一些SAP C/4HANA和S/4HANA同步的测试数据,用于测试目的
- 职称计算机考试 数量,职称计算机考试WPS基础考点:自动求和
- LeetCode 1561. 你可以获得的最大硬币数目
- MyBatis之使用resultMap实现高级映射
- Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)
- 展讯召开2017全球合作伙伴大会,发布两款新平台及新战略
- mysql备份与恢复的一些方法
- 阿里开源代码质量检测工具!
- 讲讲C#中的事件和标准事件1--委托
- Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件的详细方法
- 易语言MySQL静态编译,我说易语言静态编译太强大……
- 一个初级运维工程师对于运维工作的一些浅显认知
- Nodejs+npm详细安装
- 华为推出智能眼镜;苹果首次在俄罗斯被起诉
- php 导出excel表格
- keil c语言 位运算,c51按位运算符
热门文章
- 抢先看:DHS和NIST发布IoT安全指南
- 快慢指针判断单向链表是否有环及找环入口
- 2、spring的官网
- 教你如何在linux里安装应用程序
- wordVBA运行时错误‘4198‘:应用程序定义或对象定义错误 解决方法
- ubuntu 下文件夹乱码
- 洛谷P3131 [USACO16JAN]Subsequences Summing to Sevens S 题解
- local_umask=022是什么意思?
- MySQL常见的四种隔离级别!
- 【2020年高被引学者】 张含望 新加坡南洋理工大学