在机器学习中,经常使用距离来计算相似性,通常距离越近,相似度就越大,今天我们就来总结一下,常用的距离计算方法:

1.欧式距离(Euclidean Distance)

欧式距离是我们平时使用最多的一种方法,也是非常容易理解的一种方法,源自欧式空间中两点的距离公式,是指在m维空间两点之间的真实距离,也就是通常我们所说的直线距离。在地图中,两地直接连线的距离就是欧式距离

二维空间中欧氏距离计算公式
设两点分别为a(x1,y1),b(x2,y2)
欧式距离java 欧式距离公式推导_机器学习

三维空间中欧式距离计算公式:
设两点分别为a(x1,y1,z1),b(x2,y2,z2)
欧式距离java 欧式距离公式推导_曼哈顿距离_02

更高维的依次类推…

2.曼哈顿距离(Manhattan Distance)

曼哈顿距离指的是一次只能往一个维度的方向走,举个二维的例子,棋盘中的車只能直线走,而不能斜着走,他到某一点的要走的距离就是曼哈顿距离

二维空间中曼哈顿距离计算公式
设两点分别为a(x1,y1),b(x2,y2)
欧式距离java 欧式距离公式推导_切比雪夫距离_03

三维空间中曼哈顿距离计算公式
设两点分别为a(x1,y1,z1),b(x2,y2,z2)
欧式距离java 欧式距离公式推导_机器学习_04

3.切比雪夫距离(Chebyshev Distance)

在国际象棋中,国王可以随意的向他相邻的8个点中的一个走一步,而国王从一点另一点的最短距离就是切比雪夫距离

二维空间中切比雪夫距离计算公式
设两点分别为a(x1,y1),b(x2,y2)
欧式距离java 欧式距离公式推导_欧式距离java_05

三维空间中切比雪夫距离计算公式
设两点分别为a(x1,y1,z1),b(x2,y2,z2)
欧式距离java 欧式距离公式推导_机器学习_06

4.闵可夫斯基距离(Minkowski Distance)

闵科夫斯基距离准确来说不是一种距离,而是一组距离的定义
他的定义为
欧式距离java 欧式距离公式推导_机器学习_07
当p=1时就是曼哈顿距离
当p=2时就是欧式距离
当p->无穷大时就是切比雪夫距离

闵科夫斯基有一个很严重的缺点:包括曼哈顿、欧式、切比雪夫距离在内

举个例子: 二维样本(身高,体重),其中身高范围是150 ~ 190,体重范围是50 ~ 60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。

简单说来,闵氏距离的缺点主要有两个:(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。

5.马氏距离(Mahalanobis Distance)

马氏距离主要是针对于闵科夫斯基距离的缺点提出来的
其实这里也是主要因为量纲的问题,如一个点x1为(170,60000),x2为(170,59000),x3(180,60000),我们算出来的结果显示,x1和x2的距离大于x1和x3的距离,这样看好像没什么问题,但是如我们说第一维的单位为cm,第二维的单位为g呢,这就出问题了,很明显这样的话,x1和x2才应该是最接近的,基于这种观念:

有M个样本向量,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
欧式距离java 欧式距离公式推导_曼哈顿距离_08
这里我们假设X是二维的,那么X就是个2 X M的矩阵,u为2X1的矩阵,(X-u)为2XM, (X-u).T就为M X 2的矩阵,S逆为2 X2的矩阵,最后可以得到一个MXM的矩阵,这里一直没有理解

向量间的马氏距离:
欧式距离java 欧式距离公式推导_自然语言处理_09

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:
欧式距离java 欧式距离公式推导_曼哈顿距离_10

https://cloud.tencent.com/developer/article/1049090

6.夹角余弦

在向量空间中,两个向量之间的夹角是属于[0,180]的,而余弦在0-180度是单调递减的,所以我们可以用两个向量的余弦值来表示他们的相关程度,他们的夹角越小,即余弦值越大,相关性就越大

二维空间中向量夹角余弦相似度
设两点分别为a(x1,y1),b(x2,y2)
欧式距离java 欧式距离公式推导_欧式距离java_11

三维空间中向量夹角余弦相似度
设两点分别为a(x1,y1,z1),b(x2,y2,z2)
欧式距离java 欧式距离公式推导_欧式距离java_12

7.汉明距离(hamming distance)

两个长度相等的字符串将其中一个变为另外一个所需要的最小的替换次数,这里有那么一点点类似于编辑距离,只不过和编辑距离不同的是他不能进行增加和删除,而且必须要等长

8.杰卡德相似系数

两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数
欧式距离java 欧式距离公式推导_自然语言处理_13

与杰卡德相似系数对应的就是杰卡德距离
欧式距离java 欧式距离公式推导_曼哈顿距离_14

9.编辑距离

编辑距离指的是在两个单词<w_1,w_2>之间,由其中一个单词w_1转换为另一个单词w_2所需要的最少单字符编辑操作次数,在这里定义的单字符编辑操作有且仅有三种:
插入、删除和替换

譬如,“kitten” 和 “sitting” 这两个单词,由 “kitten” 转换为 “sitting” 需要的最少单字符编辑操作有:

1.kitten → sitten (substitution of “s” for “k”)
2.sitten → sittin (substitution of “i” for “e”)
3.sittin → sitting (insertion of “g” at the end)

因此,“kitten” 和 “sitting” 这两个单词之间的编辑距离为 3 。