Python实现距离度量

1、欧氏距离(Euclidean Distance)

在这里插入图片描述

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

#方法一:根据公式求解
d1=np.sqrt(np.sum(np.square(x-y)))

#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X)

2. 曼哈顿距离(Manhattan Distance)—城市街区距离(City Block distance)

在这里插入图片描述

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

#方法一:根据公式求解
d1=np.sum(np.abs(x-y))

#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X,'cityblock')

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

在这里插入图片描述

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

#方法一:根据公式求解
d1=np.max(np.abs(x-y))

#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X,'chebyshev')

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

在这里插入图片描述

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

#方法一:根据公式求解,p=2
d1=np.sqrt(np.sum(np.square(x-y)))

#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=pdist(X,'minkowski',p=2)

5. 标准化欧氏距离 (Standardized Euclidean distance )

(1)标准欧氏距离的定义
  标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,好吧!那我先将各个分量都“标准化”到均值、方差相等吧。均值和方差标准化到多少呢?这里先复习点统计学知识吧,假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:
在这里插入图片描述

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')

6. 皮尔逊相关系数(Pearson correlation)

相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。
在这里插入图片描述

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

#方法一:根据公式求解
x_=x-np.mean(x)
y_=y-np.mean(y)
d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))

#方法二:根据numpy库求解
X=np.vstack([x,y])
d2=np.corrcoef(X)[0][1]

7、杰卡德相似系数(Jaccard similarity coefficient)

在这里插入图片描述

import numpy as np
from scipy.spatial.distance import pdist
x=np.random.random(10)>0.5
y=np.random.random(10)>0.5

x=np.asarray(x,np.int32)
y=np.asarray(y,np.int32)

#方法一:根据公式求解
up=np.double(np.bitwise_and((x != y),np.bitwise_or(x != 0, y != 0)).sum())
down=np.double(np.bitwise_or(x != 0, y != 0).sum())
d1=(up/down)
           

#方法二:根据scipy库求解
X=np.vstack([x,y])
d2=pdist(X,'jaccard')

8、汉明距离(Hamming distance)

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。
应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

import numpy as np
from scipy.spatial.distance import pdist
x=np.random.random(10)>0.5
y=np.random.random(10)>0.5

x=np.asarray(x,np.int32)
y=np.asarray(y,np.int32)

#方法一:根据公式求解
d1=np.mean(x!=y)

#方法二:根据scipy库求解
X=np.vstack([x,y])
d2=pdist(X,'hamming')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值