栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python计算余弦相似度

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python计算余弦相似度

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

如下图,向量 a = [ x 1 , y 1 ] , b = [ x 2 , y 2 ] boldsymbol a=[x_1,y_1],boldsymbol b =[x_2,y_2] a=[x1​,y1​],b=[x2​,y2​]
s i m ( a , b ) = c o s θ = a b ∣ a ∣ ∣ b ∣ = x 1 x 2 + y 1 y 2 x 1 2 + y 1 2 x 2 2 + y 2 2 sim(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θ=∣a∣∣b∣ab​=x12​+y12​ ​x22​+y22​ ​x1​x2​+y1​y2​​对于 n n n维向量 A = [ a 1 , a 2 , . . . a n ] , B = [ b 1 , b 2 , . . . b n ] A=[a_1,a_2,...a_n],B=[b_1,b_2,...b_n] A=[a1​,a2​,...an​],B=[b1​,b2​,...bn​],
s i m ( A , B ) = A B ∣ A ∣ ∣ B ∣ = ∑ i = 1 n A i B i ∑ i = 1 n A i 2 ∑ i = 1 n A i 2 sim(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)=∣A∣∣B∣AB​=∑i=1n​Ai2​ ​∑i=1n​Ai2​ ​∑i=1n​Ai​Bi​​

余弦相似度的取值范围在-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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/833586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号