计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离,我们首先介绍欧式距离。

欧式距离

欧式距离标识两个向量之间的距离,计算公式如下:

欧式距离 = Σ ( A i − B i ) 2 \sqrt{Σ(A_i-B_i)^2} Σ(AiBi)2

python计算欧式距离,可以使用numpy.linalg.norm函数:

# 导入包
import numpy as np
from numpy.linalg import norm

# 定义向量
a = np.array([2, 6, 7, 7, 5, 13, 14, 17, 11, 8])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])

# 计算两个向量的欧式距离
norm(a-b)

# 12.409673645990857

输出结果显示两个向量的欧式距离为:12.409673645990857

如果两个向量长度不等,函数会产生警告:


import numpy as np
from numpy.linalg import norm


a = np.array([2, 6, 7, 7, 5, 13, 14])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])


norm(a-b)

# 产生错误信息,不能广播
# ValueError: operands could not be broadcast together with shapes (7,) (10,) 

也可以针对数据框的列计算欧式距离:


import pandas as pd 
import numpy as np
from numpy.linalg import norm

# 定义数据框
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
                   'assists': [5, 7, 7, 9, 12, 9, 9, 4],
                   'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

# 在 'points' 和 'assists' 两列之间计算欧式距离
norm(df['points'] - df['assists'])

# 40.496913462633174

余弦相似度

余弦相似度用向量空间中两向量夹角的余弦值作为衡量两个向量间差异程度。余弦值越接近1,表明两个向量的夹角越接近0度,则两个向量越相似。

计算公式如下:

余弦相似度= Σ A i B i / ( Σ A i 2 Σ B i 2 ) { ΣA_iB_i /(\sqrt{ΣA_i^2}\sqrt{ΣB_i^2}}) ΣAiBi/(ΣAi2 ΣBi2 )
在这里插入图片描述

下面介绍如何使用NumPy库计算两个向量的余弦相似度。

from numpy import dot
from numpy.linalg import norm

# 定义数组
a = [23, 34, 44, 45, 42, 27, 33, 34]
b = [17, 18, 22, 26, 26, 29, 31, 30]

# 计算余弦相似度
cos_sim = dot(a, b)/(norm(a)*norm(b))

cos_sim

0.965195008357566

norm函数计算欧式距离,dot计算向量点积。

对于更长数组长度也可以使用该方法:

import numpy as np
from numpy import dot
from numpy.linalg import norm

# 定义数组
a = np.random.randint(10, size=100)
b = np.random.randint(10, size=100)

# 计算余弦相似度
cos_sim = dot(a, b)/(norm(a)*norm(b))

cos_sim

0.7340201613960431

最后需要说明的是,如果长度不一致仍会报错。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值