Python计算余弦相似度

本文深入探讨了余弦相似度的原理与应用,详细解释了如何通过计算向量间的夹角余弦值来衡量文本或图像的相似度,适用于文本分类、图片分类等领域。文章还提供了Python代码示例,演示了如何使用numpy库实现余弦相似度的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

余弦相似度常用在文本分类、图片分类等应用中,来计算两个文本或两个图像之间的相似度。

如下图,向量a=[x1,y1],b=[x2,y2]\boldsymbol a=[x_1,y_1],\boldsymbol b =[x_2,y_2]a=[x1,y1],b=[x2,y2]
在这里插入图片描述sim(a,b)=cosθ=ab∣a∣∣b∣=x1x2+y1y2x12+y12x22+y22sim(a,b) = cos \theta = \frac {ab}{\mid a \mid \mid b \mid} = \frac {x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}sim(a,b)=cosθ=abab=x12+y12x22+y22x1x2+y1y2对于nnn维向量A=[a1,a2,...an],B=[b1,b2,...bn]A=[a_1,a_2,...a_n],B=[b_1,b_2,...b_n]A=[a1,a2,...an],B=[b1,b2,...bn]
sim(A,B)=AB∣A∣∣B∣=∑i=1nAiBi∑i=1nAi2∑i=1nAi2sim(A,B) = \frac {AB}{\mid A \mid \mid B \mid}= \frac {\sum_{i=1}^{n}{A_iB_i}}{\sqrt{\sum_{i=1}^{n}{A_i^2}}\sqrt{\sum_{i=1}^{n}{A_i^2}}}sim(A,B)=ABAB=i=1nAi2i=1nAi2i=1nAiBi

余弦相似度的取值范围在-1到1之间。余弦值越接近1,也就是两个向量越相似,完全相同时数值为1;相反反向时为-1;正交或不相关是为0。

求余弦相似度需要用到np.linalg.norm 操作,来求向量的范式,默认是L2范式,等同于求向量的欧式距离。

import numpy as np
t1  = np.array([-0.4,0.8,0.5,-0.2,0.3])
t2  = np.array([-0.5,0.4,-0.2,0.7,-0.1])

def cos_sim(a, b):
    a_norm = np.linalg.norm(a)
    b_norm = np.linalg.norm(b)
    cos = np.dot(a,b)/(a_norm * b_norm)
    return cos
print(cos_sim(t1,t2))

输出:0.23612240736068565

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐私无忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值