1.几何距离

1.1.闵式距离

又叫做闵可夫斯基距离,是欧氏空间中的一种测度,被看做是欧氏距离的一种推广,欧氏距离是闵可夫斯基距离的一种特殊情况。闵可夫斯基距离公式中,当p=2时,即为欧氏距离;当p=1时,即为曼哈顿距离;当 

python计算欧氏距离作为相似性度量 欧式距离 相似度_切比雪夫距离

 时,即为切比雪夫距离。

python计算欧氏距离作为相似性度量 欧式距离 相似度_闵式距离_02

1.2.欧式距离

欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离(绝对距离)。因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标具有相同的量纲,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

python计算欧氏距离作为相似性度量 欧式距离 相似度_曼哈顿距离_03

1.3.曼哈顿距离

设平面空间内存在两点,它们的坐标为(x1,y1) (x2,y2) .则曼哈顿距离表示两点横纵坐标差之和, 两点在南北方向上的距离加上在东西方向上的距离。曼哈顿距离、欧式距离的关系:如下图,绿色为欧式距离,红色、黄色、蓝色为曼哈顿距离。

python计算欧氏距离作为相似性度量 欧式距离 相似度_python计算欧氏距离作为相似性度量_04

python计算欧氏距离作为相似性度量 欧式距离 相似度_切比雪夫距离_05

1.4.切比雪夫距离

设平面空间内存在两点,它们的坐标为(x1,y1),(x2,y2),则切比雪夫距离为两点横纵坐标差的绝对值的最大值“曼哈顿距离”与“切比雪夫距离”的关系:事实上,将一个点(x,y)的坐标变为 

python计算欧氏距离作为相似性度量 欧式距离 相似度_切比雪夫距离_06

 后,原坐标系中的曼哈顿距离就转变为新坐标系中的切比雪夫距离;将一个点(x,y)的坐标变为  

python计算欧氏距离作为相似性度量 欧式距离 相似度_切比雪夫距离_07

  后,原坐标系中的切比雪夫距离就转换为了新坐标系中的曼哈顿距离。

(参考文章)

python计算欧氏距离作为相似性度量 欧式距离 相似度_欧式距离_08

 1.5.夹角余弦距离(余弦相似度, cosine similarity)

余弦距离通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。注意这上下界对任何维度的向量空间中都适用,而且余弦相似性最常用于高维正空间。例如在信息检索中,每个词项被赋予不同的维度,而一个维度由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。另外,它通常用于文本挖掘中的文件比较。此外,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。

 

python计算欧氏距离作为相似性度量 欧式距离 相似度_曼哈顿距离_09

1.6.雅卡尔系数(Jaccard index)

jaccard系数和jaccard距离分别用于比较有限样本集之间的相似性和差异性

缺点:值仅适用于二元数据(两个对象)的集合

给定两个集合A和B:

【1】jaccard系数:A,B交集大小/A,B并集的大小(值越大,相似度越高)

python计算欧氏距离作为相似性度量 欧式距离 相似度_曼哈顿距离_10

 注意:A和B均为∅,J(A, B)=1

【2】jaccard距离:1-jaccard系数

python计算欧氏距离作为相似性度量 欧式距离 相似度_曼哈顿距离_11

 【算例】:非对称二元属性相似度

用户A,B

M11

M10

M01

M00

其中:M11表示A和B对应位置都是1的属性的数量,M10表示A中为1且B中对应位置为0的属性的数量,M01表示A中为0且B中为1的属性的数量,M00表示A,B中对应位置均为0的属性的数量,M11+M10+M01+M00=n

python计算欧氏距离作为相似性度量 欧式距离 相似度_曼哈顿距离_12

python计算欧氏距离作为相似性度量 欧式距离 相似度_闵式距离_13

注明:J(A, B)的分母或者分子并没有M00,是因为此处为非对称二元属性相似度,这里只有非0值才受关注。比如考虑普通人的健康状况,属性集合(糖尿病,心脏病等),糖尿病指标0表示没有糖尿病,1表示糖尿病,心脏病指标0表示没有心脏病,1表示心脏病,比较两个人的患病情况,我们只关注有病的情况。所以分子和分母中没有M00。

【3】更一般的情况(广义jaccard系数):

x=(x1,x2,x3,...,xn)和y=(y1,y2,y3,...,yn)是两个向量,xiyi>0的实值,x和y的相似度系数表示为:

python计算欧氏距离作为相似性度量 欧式距离 相似度_闵式距离_14

 更一般的情况,f和g是X上关于u的两个非负的概率密度函数。则:

python计算欧氏距离作为相似性度量 欧式距离 相似度_切比雪夫距离_15

2.非几何距离

2.1.KL散度(距离)

KL 散度是一种衡量两个概率分布的匹配程度的指标,两个分布差异越大,KL散度越大。其中 p(x) 是目标分布,q(x)是去匹配的分布,如果两个分布完全匹配,那么Dkl=0。值得注意的是,KL散度是非对称的:D(p||q)≠D(q||p)

python计算欧氏距离作为相似性度量 欧式距离 相似度_python计算欧氏距离作为相似性度量_16