欧式距离和余弦距离

1、欧氏距离(欧几里得距离,Euclidean Distance):是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

2、闵氏距离:又叫做闵可夫斯基距离,是欧氏空间中的一种测度,被看做是欧氏距离的一种推广,欧氏距离是闵可夫斯基距离的一种特殊情况。公式如下:

公式中,当p = 2时,即欧氏距离;当p = 1时,即曼哈顿距离;当p\rightarrow \infty,即切比雪夫距离;

                                      

A至B的距离中,绿色的线为欧氏距离,红色和黄色的线为曼哈顿距离;

python实现:

import numpy as np

#生成10行浮点数,从0-1中随机
x = np.random.random(10)
y = np.random.random(10)

#方法一:numpy中提供了范数的计算工具:linalg.norm()
dist1 = np.linalg.norm(x - y)

#方法二
dist2 = np.sqrt(np.sum(np.square(x - y)))



print('x':x)

print('y':y)

print('dist1':dist1)

print('dist2':dist2)





# 计算欧式距离
def euclideanDistance(instance1, instance2, length):
    distance = 0
    for x in range(length):
        distance += pow((instance1[x]-instance2[x]), 2)
    return math.sqrt(distance)

3、余弦距离

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:

 

 假设||A||、||B||表示向量A、B的2范数,例如向量[1,2,3]的2范数为:

 python实现:

import numpy as np
from scipy.spatial.distance import pdist 
x=np.random.random(10)
y=np.random.random(10) 
# 方法一,np.dot,做矩阵乘法
dist1 = 1 - np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)) 
# 方法二
dist2 = pdist(np.vstack([x,y]),'cosine') 
print('x':x)
print('y':y)
print('dist1':dist1)
print('dist2':dist2)

参考来源:

https://blog.csdn.net/Mr_EvanChen/article/details/77511312

https://cloud.tencent.com/developer/article/1487432

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值