相似性度量(或距离度量)方法在多元统计中的聚类分析、判别分析中的距离判别法、泛函分析、机器学习等方面都有应用。所以对于数据分析、机器学习等方面,掌握相似性的不同度量方法是十分重要且必要的。
相似性度量与距离度量本质上是同一件事情。如果两组数据之间的距离越大,那么相似性越小;反正,如果相似性越大,那么距离越小,这是可以直观理解的。
但是距离度量与相似度量还是有一点点区别的。距离度量,一般情况下距离是大于0的数;而相似性或相异性通常数值介于[0,1]之间。相似性与相异性统称为邻近度。
对于相似性的度量,首先我们需要了解我们需要度量的对象,即样本中的数据。对于数据我们可以用样本数据矩阵(观测值矩阵)来表示,即:
这里p表示数据维数(变量个数),即变量的个数p;n是数据的个数,其中
表示第i组数据(在多元统计中,各个量通常用列向量表示,数据也是如此)。而对于距离(相似性)度量,研究的就是两组数据之间的距离。
除了研究样本中两个数据之间距离,还有集合之间距离、概率分布之间距离、变量之间距离、序列之间的距离等。
兔兔在下面将介绍一些距离度量方法。
(1)欧式距离。
欧式距离也是最常用的距离度量方法,从直观上理解就是两点间的直线距离。
上式表示的就是数据与
之间的欧式距离。当p=1时,就是数轴上两个点的距离(即绝对值);当p=2时,就是平面两点间直线距离;p=3时,即空间两点之间的直线距离。p>3,就是p维空间的两点距离,所以欧式距离具有很好的直观性,便于理解。
import numpy as np
X1=[10,12,3] #第一组数据
X2=[10,2,4] #第二组数据
def Euclidean_distance(X1,X2):
'''计算欧式距离'''
p=len(X1) #数据的维数
s=0
for i in range(p):
s+=(X1-X2)**2
return np.sqrt(s)
distance=Euclidean_distance(X1,X2)
print(distance)
以上是计算欧式距离的函数与实例代码。
(2)平方欧式距离。
平方欧式距离,顾名思义就是把欧式距离的结果平方,得到的就是平方欧式距离。即:
其结果也可以用向量乘积表示。对于算法实现,只要把上一个的开平方去掉即可,也可以用numpy中向量乘积的方法。
(3)标准化后的欧式距离。
对于前面讲到的欧式距离,也是有局限性的。比如,如果向量中各个单位不全相同,则欧式距离一般情况下就没有意义,即使单位全相同,但如果各个分量变异性相差很大,则变异性很大的的分量在欧式距离中起决定性作用,而变异性小的几乎不起作用。所以可以先对数据标准化,再计算欧式距离。
其中标准化是指一组数据减去样本总体的均值,再除以对应变量的方差的开平方(即除以标准差)。第一个式子是第i组数据第j个指标的标准化,即用Xij减去第j个变量的均值,再除以第j个变量的标准差,第二个是标准化后第i组数据。之后就可以根据标准化后的数据
来计算距离了。
(4)马氏距离(广义欧式距离)。
标准化后计算欧式距离,虽然消除了各个变量(或指标)的单位或方差的影响,但是无法消除变量之间的相关性的影响。所以我们就引入了马式距离来消除这种相关性的影响。马式距离也是多元统计分析中比较常用的距离度量方法。
其中表示样本X的协差阵的逆矩阵,
表示样本协差阵。
(5)平方马式距离。
平方马式距离即把马式距离进行平方。式子就是上面的等式右边,把根号去掉。
注:关于马式距离的一些性质:
(1)若

本文详细介绍了在数据分析和机器学习中常用的相似性度量和距离度量方法,包括欧式距离、平方欧式距离、马氏距离、曼哈顿距离、切比雪夫距离、余弦相似度、相关系数等。这些方法广泛应用于聚类分析、判别分析、文本分析等多个领域,对于理解和处理数据具有重要意义。
最低0.47元/天 解锁文章
532





