距离(distance,差异程度)、相似度(similarity,相似程度)方法可以看作是以某种的距离函数计算元素间的距离,这些方法作为机器学习的基础概念,广泛应用于如:Kmeans聚类、协同过滤推荐算法、相似度算法、MSE损失函数、正则化范数等等。本文对常用的距离计算方法进行归纳以及解析,分为以下几类展开:

一、闵氏距离(Minkowski Distance)类

二、相似度(Similarity)

三、字符串距离(Distance of Strings)

四、集合距离 (Distance of Sets)

五、信息论距离 (Information Theory measures)

六、时间系列、图结构的距离

七、度量学习(Metric Learning)

附、常用的度量方法汇总

一、闵氏距离(Distance)类

  • 闵氏距离(Minkowski Distance)

对于点x=(x1,x2...xn) 与点y=(y1,y2...yn) , 闵氏距离可以用下式表示:

闵氏距离是对多个距离度量公式的概括性的表述,p=1退化为曼哈顿距离;p=2退化为欧氏距离;切比雪夫距离是闵氏距离取极限的形式。

  • 曼哈顿距离(Manhattan Distance)VS  欧几里得距离(Euclidean Distance)

曼哈顿距离 公式:

欧几里得距离公式:

如下图蓝线的距离即是曼哈顿距离(想象你在曼哈顿要从一个十字路口开车到另外一个十字路口实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源,也称为城市街区距离),红线为欧几里得距离:

  • 切比雪夫距离(Chebyshev Distance)

切比雪夫距离起源于国际象棋中国王的走法,国际象棋中国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1,y1)走到B格(x2,y2)最少需要走几步?你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。有一种类似的一种距离度量方法叫切比雪夫距离。

切比雪夫距离就是当p趋向于无穷大时的闵氏距离:

闵氏距离的相关知识

  • 距离度量的定义

距离函数并不一定是距离度量,当距离函数要作为距离度量,需要满足:由此可见,闵氏距离可以作为距离度量,而大部分的相似度并不能作为距离度量。

  • Lp范数

向量的范数可以简单形象的理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。

闵氏距离也是Lp范数(如p==2为常用L2范数正则化)的一般化定义。下图给出了一个Lp球( ||X||p = 1 )的形状随着P的减少的可视化图:

  • 维度灾难的问题

距离度量随着空间的维度d的不断增加,计算量复杂也逐增,另外在高维空间下,在维度越高的情况下,任意样本之间的距离越趋于相等(样本间最大与最小欧氏距离之间的相对差距就趋近于0),也就是维度灾难的问题,如下式结论:

对于维度灾难的问题,常用的有PCA方法进行降维计算。

  • 量纲差异问题

假设各样本有年龄、工资两个变量,计算欧氏距离(p=2)的时候,(年龄1-年龄2)² 的值要远小于(工资1-工资2)² ,这意味着在不使用特征缩放的情况下,距离会被工资变量(大的数值)主导, 特别当p越大,单一维度的差值对整体的影响就越大。因此,我们需要使用特征缩放来将全部的数值统一到一个量级上来解决此问题。基本的解决方法可以对数据进行“标准化”和“归一化”。

另外可以使用马氏距离(协方差距离),与欧式距离不同其考虑到各种特性之间的联系是(量纲)尺度无关 (Scale Invariant) 的,可以排除变量之间的相关性的干扰,缺点是夸大了变化微小的变量的作用。马氏距离定义为:

马氏距离原理是使用矩阵对两两向量进行投影后,再通过常规的欧几里得距离度量两对象间的距离。当协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离;如果协方差矩阵为对角阵,其也可称为正规化的欧氏距离。

二、相似度(Similarity)

  • 余弦相似度 (Cosine Similarity)

根据向量x,y的点积公式:

我们可以利用向量间夹角的cos值作为向量相似度[1]:余弦相似度的取值范围为:-1~1,1 表示两者完全正相关,-1 表示两者完全负相关,0 表示两者之间独立。余弦相似度与向量的长度无关,只与向量的方向有关,但余弦相似度会受到向量平移的影响(上式如果将 x 平移到 x+1, 余弦值就会改变)。

  • 协方差

协方差是衡量多维数据集中,变量之间相关性的统计量。如下公式X,Y的协方差即是,X减去其均值 乘以 Y减去其均值,所得每一组数值的期望(平均值)。如果两个变量之间的协方差为正值,则这两个变量之间存在正相关,若为负值,则为负相关。

  • 皮尔逊相关系数 (Pearson Correlation)

皮尔逊相关系数数值范围也是[-1,1]。皮尔逊相关系数可看作是在余弦相似度或协方差基础上做了优化(变量的协方差除以标准差)。它消除每个分量标准不同(分数膨胀)的影响,具有平移不变性和尺度不变性。

  • 卡方检验

卡方检验X2,主要是比较两个分类变量的关联性、独立性分析。如下公式,A代表实际频数;E代表期望频数:

三、字符串距离(Distance of Strings)

  • Levenshtein 距离

Levenshtein 距离是 编辑距离 (Editor Distance) 的一种,指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。像hallo与hello两个字符串编辑距离就是1,我们通过替换”a“  为 ”e“,就可以完成转换。

  • 汉明距离

汉明距离为两个等长字符串对应位置的不同字符的个数,也就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:1011101 与 1001001 之间的汉明距离是 2,“toned” 与 “roses” 之间的汉明距离是 3

  • 带权重的字符串距离

对于字符串距离来说,不同字符所占的份量是不一样的。比如”我乐了“ 与【“我怒了”,”我乐了啊” 】的Levenshtein 距离都是1,但其实两者差异还是很大的,因为像“啊”这种语气词的重要性明显不如“乐”,考虑字符(特征)权重的相似度方法有:TF-IDF、BM25、WMD算法。

四、集合距离 (Distance of Sets)

  • Jaccard 系数

Jaccard 取值范围为0~1,0 表示两个集合没有重合,1 表示两个集合完全重合。

  • Dice 系数Dice 系数取值范围为0~1,与Jaccard系数可以相互转换。

但Dice不满足距离函数的三角不等式,不是一个合适的距离度量。

  • Tversky 系数Tversky 系数可以理解为 Jaccard 系数和 Dice 系数的一般化,当  α,β为1时为 Jaccard 系数,当 α,β为0.5时为 Dice 系数(X\Y表示集合的相对补集)。

五、信息论距离 (Information Theory measures)

基础地介绍下,信息熵用来衡量一个随机变量的不确定性程度。对于一个随机变量 X,其概率分布为:

  • 互信息

互信息用于衡量两个变量之间的关联程度,衡量了知道这两个变量其中一个,对另一个不确定度减少的程度。公式为:如下图,条件熵表示已知随机变量X的情况下,随机变量Y的信息熵,因此互信息实际上也代表了已知随机变量X的情况下,随机变量Y的(信息熵)不确定性的减少程度。

  • 相对熵 (Relative Entropy) 相对熵又称之为 KL 散度 (Kullback-Leibler Divergence),用于衡量两个分布P、Q(注:KL具有不对称)之间的差异,定义为:

  • JS 散度 (Jensen-Shannon Divergence)

JS 散度解决了 KL 散度不对称的问题,定义为:

  • PSI

群体稳定性指标(Population Stability Index,PSI), 可以看做是解决KL散度非对称性的一个对称性度量指标,用于度量分布之间的差异(常用于风控领域的评估模型预测的稳定性)。

PSI与JS散度的形式是非常类似的,如下公式:

PSI的含义等同P与Q,Q与P之间的KL散度之和。

  • 交叉熵交叉熵常作为机器学习中的分类的损失函数,用于衡量模型预测分布和实际数据分布之间的差异性。

六、时间系列、图结构的距离

  • DTW (Dynamic Time Warping) 距离

DTW 距离用于衡量两个序列之间的相似性,适用于不同长度、不同节奏的时间序列。DTW采用了动态规划DP(dynamic programming)的方法来进行时间规整的计算,通过自动warping扭曲 时间序列(即在时间轴上进行局部的缩放),使得两个序列的形态尽可能的一致,得到最大可能的相似度。(具体可参考[5])

  • 图结构的距离

图结构间的相似度计算,有图同构、最大共同子图、图编辑距离、Graph Kernel 、图嵌入计算距离等方法(具体可参考[4][6])。

七、度量学习(Metric Learning)

度量学习的对象通常是样本特征向量的距离,度量学习的关键在于如何有效的度量样本间的距离,目的是通过训练和学习,减小或限制同类样本之间的距离,同时增大不同类别样本之间的距离,简单归类如下[2]:

  • 基于降维的度量学习算法是学习一个到低维的映射矩阵,使得映射后的样本具有某些性质。包括无监督的PCA、有监督的LDA和ANMM。

  • 基于Centroids的度量学习算法,即通过类中心进行分类的算法,而不是基于最近邻。

  • 基于信息论推导的一些距离度量学习算法,比如ITML和MCML等通常是使用距离度量矩阵定义一个分布,然后推导出最小化两个分布的KL距离或者Jeffery距离等等。

  • 基于深度度量学习:利用深度网络学习一个表示(Embedding),采用各种采样方法(Sampling),比如成对/三元组训练样本(Triplet),计算一个带有Margin/最近邻等分类或聚类算法的损失。

八、常用的度量方法汇总

最后,附上常用的距离和相似度度量方法[3]:

参考资料: 

[1] https://kexue.fm/archives/7388

[2] https://zhuanlan.zhihu.com/p/80656461 

[3] https://www.pianshen.com/article/70261312162/ 

[4] https://arxiv.org/pdf/2002.07420.pdf 

[5] https://zhuanlan.zhihu.com/p/32849741 

[6] https://github.com/ysig/GraKeL

- END -文章首发公众号“算法进阶”,文末阅读原文可访问文章相关代码


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群955171419,加入微信群请扫码:

【机器学习】全面归纳距离和相似度方法(7种)相关推荐

  1. 【转载】机器学习计算距离和相似度的方法

    转载自:http://blog.csdn.net/leonis_v/article/details/50531820 在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类 ...

  2. 【机器学习基础】机器学习中“距离与相似度”计算汇总

    写在前面 涵盖了常用到的距离与相似度计算方式,其中包括欧几里得距离.标准化欧几里得距离.曼哈顿距离.汉明距离.切比雪夫距离.马氏距离.兰氏距离.闵科夫斯基距离.编辑距离.余弦相似度.杰卡德相似度.Di ...

  3. 【机器学习基础】机器学习距离与相似度计算

    写在前面 涵盖了常用到的距离与相似度计算方式,其中包括欧几里得距离.标准化欧几里得距离.曼哈顿距离.汉明距离.切比雪夫距离.马氏距离.兰氏距离.闵科夫斯基距离.编辑距离.余弦相似度.杰卡德相似度.Di ...

  4. 距离及相似度度量方法

    前言 关于距离度量的方法的专题其实已经想做好久了,正好趁这个机会总结出来. 这里讨论的距离度量应该是向量空间内的度量,两个点(即两个向量)之间的距离或相似性的度量.每种度量包括描述.定义和公式.优缺点 ...

  5. 【思维导图】机器学习中的几种常见距离与相似度计算

    [全网最细致]机器学习距离与相似度计算 欧几里得距离 o如果我们将两个点分别记作(p1,p2,p3,p4-)和(q1,q2,q3,14,-),则欧几里得距离的计算公式为: ofrom math im ...

  6. 提高机器学习模型性能的五个关键方法

    提高机器学习模型性能的五个关键方法 1. 数据预处理 2. 特征工程 3. 机器学习算法 4. 模型集成与融合 5. 数据增强 以下是各个方面的具体分析和方法: [ 说明:1.这里主要是各个关键方法的 ...

  7. 聚类 | 超详细的性能度量和相似度方法总结

    非监督学习与监督学习最重要的区别在于训练数据是否包含标记数据,在机器学习开发的工作中,往往包含了大量的无标记数据和少量的标记数据,非监督方法通过对无标记训练样本的学习来发掘数据的内在规律,为进一步的数 ...

  8. 【深度学习/机器学习】为什么要归一化?归一化方法详解

    [深度学习/机器学习]为什么要归一化?归一化方法详解 文章目录 1. 介绍 1.1 什么是归一化 1.2 归一化的好处 2. 归一化方法 2.1 最大最小标准化(Min-Max Normalizati ...

  9. NLP自然语言处理实战(三):词频背后的语义--5.距离和相似度反馈及改进

    目录 1.距离和相似度 2.反馈及改进 线性判别分析 1.距离和相似度 我们可以使用相似度评分(或距离),根据两篇文档的表达向量间的相似度(或距离)来判断文档间有多相似. LSA能够保持较大的距离,但 ...

最新文章

  1. 知不知道 Thread.sleep(0) 到底有什么用?
  2. 为什么在64位系统中指针的大小是8,而32位系统中却是4?
  3. 快来领猪肉啊,网易云官网建设意见征集计划获奖名单公布
  4. VS2010上使用Qt 5.2.1出现 “There's no Qt version assigned to this project for platform Win32”错误的解决办法
  5. process启动jar包判断成功_恒一广告助力2020年壹基金温暖包安康发放启动仪式成功举办...
  6. avalon2框架应用注意事项
  7. tomcat内存溢出解决方案_JVM了解以下?JVM系列~内存区域与内存溢出异常
  8. 移动边缘计算MEC学习笔记
  9. Java 实现计算器功能
  10. 腾讯云IM集成问题汇总
  11. ES异常 : Validation Failed: 1: no requests added
  12. 豪杰DVD播放器 3.0.8 URL重新定向栈溢出漏洞
  13. 改善磁带存储性能的五种方法
  14. 把图片转换成视频-ffmpeg
  15. 虚拟打印机adobe PDF
  16. ABAP inner join 性能影响
  17. 微信公众号授权登录weixin4j开发
  18. MATLAB中控制运算精度
  19. 学习使用Postman+Newman
  20. php分页命名锚记怎么用,网页中的锚点(命名锚记)的使用介绍

热门文章

  1. SurfaceView 拍照功能
  2. C#:如何去掉groupbox的边框线
  3. Eclipse打JAR包引用的第三方JAR包找不到 问题解决
  4. [Hadoop] 启动HDFS缺少服务
  5. window - JDK的安装与卸载
  6. Linux命令在线查询
  7. linux fork, system, exec()
  8. 楼市调控要“围堵”更要“疏通”
  9. Windows Vista Beta 1试用体会
  10. 软件工程导论个人项目 -- 中小学数学卷子自动生成程序