三种计算距离的方法
欧几里得距离
欧几里得距离也叫做(欧氏距离)是欧几里得空间中两点的“普遍”(直线距离)。缺点主要有两个:(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
举个例子:二维样本(身高,体重),其中身高范围是150-190,体重范围是50-60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm不等价于体重的10kg。
代码实现
import numpy as np
np.linalg(vector1-vector2, ord=2)
巴氏距离
在统计中,Bhattacharyya距离测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的Bhattacharyya系数密切相关。Bhattacharyya距离和Bhattacharyya系数以20世纪30年代曾在印度统计研究所工作的一个统计学家A. Bhattacharya命名。同时,Bhattacharyya系数可以被用来确定两个样本被认为相对接近的,它是用来测量中的类分类的可分离性。
巴氏距离的定义
对于离散概率分布 p和q在同一域 X,它被定义为:
其中
它是Bhattacharyya系数。
马氏距离
由印度科学家马哈拉诺比斯提出,表示数据的协方差距离。是一种有效的计算两个位置样本集相似度的方法。与欧氏距离不同的是他考虑到各种特性之间的联系并且是尺度无关的,即独立于测量尺度。如果协方差矩阵为单位矩阵,马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,其也可称为正规化的马氏距离。
优点:(1)它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关。(它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度);(2)马氏距离还可以排除变量之间的相关性的干扰。
缺点:(1)夸大了变化微小的变量的作用。(2)受协方差矩阵不稳定的影响,马氏距离并不总是能顺利计算出。即计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在。(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)
表格统计
欧氏距离 | 巴氏距离 | 马氏距离 | |
---|---|---|---|
优点 | 易于理解、适用于大多数场景 | 可以测量两个离散或连续概率分布的相似性。 | (1)它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关。 (2)马氏距离还可以排除变量之间的相关性的干扰。 |
缺点 | (1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。 | 使用场景较少 | (1)夸大了变化微小的变量的作用。 (2)受协方差矩阵不稳定的影响,马氏距离并不总是能顺利计算出。 (3)如果样本的维数非常大,那么计算它的协方差矩阵是十分耗时的! |
相同点 | (1)如果马氏距离的协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离 | (2)欧氏和马氏都是计算两个未知样本集的相似度的方法。 | (3)欧氏和马氏距离都可以计算多维度数据 |
不同点 | (1)马氏距离它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关而欧氏当各个分量为不同性质的量时,“距离”的大小与指标的单位有关。它将样品的不同属性之间的差别等同看待 | (2)马氏距离的计算是不稳定的而欧氏和巴氏是稳定的 | (3)巴氏距离测量两个离散或连续概率分布的相似性 |
公式 |
参考博客:
https://blog.csdn.net/jideljd_2010/article/details/39938555
https://blog.csdn.net/shenbo2030/article/details/44226919
https://blog.csdn.net/mousever/article/details/45967643