机器学习——各种距离度量方法总结

前言:
在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。本文的目的就是对常用的相似性度量作一个总结。

文章目录

    • 一、欧氏距离(EuclideanDistance)
    • 二、曼哈顿距离(ManhattanDistance)
    • 三、切比雪夫距离 (Chebyshev Distance)
    • 四、 闵可夫斯基距离(Minkowski Distance)
    • 五、标准化欧式距离(Standardized Euclidean Distance)
    • 六、马氏距离(Mahalanobis distance)
    • 七、余弦距离(Cosine Distance)
    • 八、汉明距离(Hamming Distance)
    • 九、杰卡德距离(Jaccard Distance)
    • 十、相关距离(Correlation distance)
    • 十一、信息熵(Information Entropy)
    • 十二:总结

一、欧氏距离(EuclideanDistance)

1.定义:

欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

机器学习——各种距离度量方法总结_第1张图片

2.计算公式:

  • 二维空间公式
  • 三维空间的公式
  • n维空间的公式

3.代码实现:

  • 原生公式代码实现
import math
def euclidean(x, y):
	d = 0
	for xi, yi in zip(x, y):
		d += (xi-yi)**2
	return math.sqrt(d)
  • 使用numpy库
import numpy as np
np.linalg(vector1-vector2, ord=2)

4.适用的数据分析模型
欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;

二、曼哈顿距离(ManhattanDistance)

1.定义:
顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。

机器学习——各种距离度量方法总结_第2张图片

2.计算公式

  • (1) 二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离:
  • (2) n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离:

3.代码实现

import numpy as np
np.linalg(vector1-vector2, ord=1)

4.适用的数据分析模型
欧几里得距离无法忽略指标度量的差异,所以在使用欧氏距离之前需要对底层指标进行数据的标准化,而基于各指标维度进行标准化后再使用欧氏距离就衍生出来另外一个距离度量——马哈拉诺比斯距离(Mahalanobis Distance),简称马氏距离。

三、切比雪夫距离 (Chebyshev Distance)

1.定义
国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?你会发现最少步数总是max(| x2-x1| , |y2-y1| ) 步。有一种类似的一种距离度量方法叫切比雪夫距离(L∞范数)。

机器学习——各种距离度量方法总结_第3张图片

2.计算公式

  • (1) 二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离:
  • (2) n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的切比雪夫距离:

公式的另一种等价形式是:可以使用放缩法和夹逼法则来证明。

3.代码实现

import numpy as np
np.linalg.norm(vector1-vector2,ord=np.inf)

4.适用的数据分析模型
所以如果把切比雪夫不等式用于高斯分布的数据集,会得到一个非常保守、粗糙的上下界。切比雪夫不等式的意义在于,它虽然是一个粗糙的估计,但是使用与任意分布的数据集和任意的正数
5.切比雪夫不等式的证明
http://makercradle.com/2017/切比雪夫不等式证明/

四、 闵可夫斯基距离(Minkowski Distance)

机器学习——各种距离度量方法总结_第4张图片
绿色的斜线表示欧几里得距离,在现实中是不可能的。其他三条折线表示了曼哈顿距离,这三条折线的长度是相等的。

当 p 趋近于无穷大时,闵可夫斯基距离转化成切比雪夫距离(Chebyshev distance):

机器学习——各种距离度量方法总结_第5张图片

五、标准化欧式距离(Standardized Euclidean Distance)

1.定义:
标准化欧氏距离是针对欧氏距离的缺点而作的一种改进。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。
2.计算公式
假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的“标准化变量”表示为:

  • 标准化欧氏距离公式:
机器学习——各种距离度量方法总结_第6张图片

如果将方差的倒数看成一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance)。
3.代码实现

import numpy as np
x=np.random.random(10)
y=np.random.random(10)

X=np.vstack([x,y])

#方法一:根据公式求解
sk=np.var(X,axis=0,ddof=1)
d1=np.sqrt(((x - y) ** 2 /sk).sum())

#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
d2=pdist(X,'seuclidean')

六、马氏距离(Mahalanobis distance)

机器学习——各种距离度量方法总结_第7张图片

1.定义
马氏距离是基于样本分布的一种距离。物理意义就是在规范化的主成分空间中的欧氏距离。所谓规范化的主成分空间就是利用主成分分析对一些数据进行主成分分解。再对所有主成分分解轴做归一化,形成新的坐标轴。由这些坐标轴张成的空间就是规范化的主成分空间。

机器学习——各种距离度量方法总结_第8张图片

2.计算公式

  • 定义:有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到μ的马氏距离表示为:
  • 向量Xi与Xj之间的马氏距离定义为:
  • 若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则Xi与Xj之间的马氏距离等于他们的欧氏距离:
  • 若协方差矩阵是对角矩阵,则就是标准化欧氏距离。
    -
    机器学习——各种距离度量方法总结_第9张图片

3.代码实现

import numpy as np
x=np.random.random(10)
y=np.random.random(10)

#马氏距离要求样本数要大于维数,否则无法求协方差矩阵
#此处进行转置,表示10个样本,每个样本2维
X=np.vstack([x,y])
XT=X.T

#方法一:根据公式求解
S=np.cov(X)   #两个维度之间协方差矩阵
SI = np.linalg.inv(S) #协方差矩阵的逆矩阵
#马氏距离计算两个样本之间的距离,此处共有10个样本,两两组合,共有45个距离。
n=XT.shape[0]
d1=[]
for i in range(0,n):
    for j in range(i+1,n):
        delta=XT[i]-XT[j]
        d=np.sqrt(np.dot(np.dot(delta,SI),delta.T))
        d1.append(d)
        
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
d2=pdist(XT,'mahalanobis')

4.马氏距离的特点

  • 量纲无关,排除变量之间的相关性的干扰;
  • 马氏距离的计算是建立在总体样本的基础上的,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
  • 计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。

七、余弦距离(Cosine Distance)

1.定义
几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。
2.计算公式

  • 二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
  • 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:
  • 即:
夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。 **3.代码实现**
vector1 = np.array([1,2,3])
vector2 = np.array([4,7,5])
 
op7=np.dot(vector1,vector2)/(np.linalg.norm(vector1)*(np.linalg.norm(vector2)))
print(op7)
#输出
#0.929669680201

4.适用的数据分析模型

八、汉明距离(Hamming Distance)

机器学习——各种距离度量方法总结_第10张图片

1.定义
两个等长字符串s1与s2的汉明距离为:将其中一个变为另外一个所需要作的最小字符替换次数。例如:

The Hamming distance between "1011101" and "1001001" is 2. 
The Hamming distance between "2143896" and "2233796" is 3. 
The Hamming distance between "toned" and "roses" is 3.

汉明重量:是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,如果向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。
2.应用
汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。比如在信息编码过程中,为了增强容错性,应使得编码间的最小汉明距离尽可能大。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。
3.代码实现


v1=np.array([1,1,0,1,0,1,0,0,1])
v2=np.array([0,1,1,0,0,0,1,1,1])
smstr=np.nonzero(v1-v2)
print(smstr) # 不为0 的元素的下标
sm= np.shape(smstr[0])[0] 
print( sm )
#输出
#(array([0, 2, 3, 5, 6, 7]),)
#6

4.应用
信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

九、杰卡德距离(Jaccard Distance)

1.定义

  • 杰卡德相似系数(Jaccard similarity
    coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:
机器学习——各种距离度量方法总结_第11张图片
  • 杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度:
机器学习——各种距离度量方法总结_第12张图片

2.应用

  • 可将杰卡德相似系数用在衡量样本的相似度上
  • 样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。
  • P:样本A与B都是1的维度的个数
  • q:样本A是1,样本B是0的维度的个数
  • r:样本A是0,样本B是1的维度的个数
  • s:样本A与B都是0的维度的个数
  • 那么样本A与B的杰卡德相似系数可以表示为:
  • 这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。
  • 而样本A与B的杰卡德距离表示为:

3.代码实现

import scipy.spatial.distance as dist
 
v1=np.array([1,1,0,1,0,1,0,0,1])
v2=np.array([0,1,1,0,0,0,1,1,1])
 
matv=np.array([v1,v2])
print(matv)
ds=dist.pdist(matv,'jaccard')
print(ds)
 
#输出
#[[1 1 0 1 0 1 0 0 1] [0 1 1 0 0 0 1 1 1]]
 
# [ 0.75]

十、相关距离(Correlation distance)

机器学习——各种距离度量方法总结_第13张图片

1.定义

  • 相关系数:是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关):
机器学习——各种距离度量方法总结_第14张图片
  • 相关距离:

十一、信息熵(Information Entropy)

以上的距离度量方法度量的皆为两个样本(向量)之间的距离,而信息熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。系统内样本分布越分散(或者说分布越平均),信息熵就越大。分布越有序(或者说分布越集中),信息熵就越小。

机器学习——各种距离度量方法总结_第15张图片

2.计算给定的样本集X的信息熵的公式:

参数的含义:

  • n:样本集X的分类数
  • pi:X中第 i 类元素出现的概率

信息熵越大表明样本集S的分布越分散(分布均衡),信息熵越小则表明样本集X的分布越集中(分布不均衡)。当S中n个分类出现的概率一样大时(都是1/n),信息熵取最大值log2(n)。当X只有一个分类时,信息熵取最小值0。

十二:总结

简单说来,各种“距离”的应用场景简单概括为:
    
    空间:欧氏距离
    路径:曼哈顿距离
    国际象棋国王:切比雪夫距离
    以上三种的统一形式:闵可夫斯基距离
    
    加权:标准化欧氏距离
    排除量纲和依存:马氏距离
    向量差距:夹角余弦
    编码差别:汉明距离
    集合近似度:杰卡德类似系数与距离
    相关:相关系数与相关距离

参考:
https://blog.csdn.net/qq_19707521/article/details/78479532
https://www.jianshu.com/p/84cdaeeeeba3
https://my.oschina.net/hunglish/blog/787596
https://www.cnblogs.com/daniel-D/p/3244718.html
https://blog.csdn.net/weixin_42715356/article/details/82845376

你可能感兴趣的:(机器学习)