天天看点

欧式距离和余弦距离

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

欧式距离和余弦距离

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

欧式距离和余弦距离

公式中,当p = 2时,即欧氏距离;当p = 1时,即曼哈顿距离;当

欧式距离和余弦距离

,即切比雪夫距离;

欧式距离和余弦距离

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

继续阅读