计算两个向量的余弦相似度

文章目录

  • 摘要
  • 基本概念
  • 数学原理
  • 实现代码
  • 欧式距离与余弦距离的差异

摘要

余弦相似度是判断两个向量相似度常用的算法,我在做行人重识别的时候,用到了余弦相似度的算法,记录一下。

基本概念

余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
总之,相似度越小,距离越大。相似度越大,距离越小。

数学原理

所以余弦的计算公式如下:
计算两个向量的余弦相似度
a,b,c 是三个边的长度。

在直角坐标系中,向量表示的三角形的余弦函数是怎么样的呢?下图中向量a用坐标(x1,y1)表示,向量b用坐标(x2,y2)表示。

向量 计算两个向量的余弦相似度 和向量 计算两个向量的余弦相似度 在直角坐标中的长度为 计算两个向量的余弦相似度, 计算两个向量的余弦相似度 , 向量 计算两个向量的余弦相似度 和向量 计算两个向量的余弦相似度 之间的距离我们用向量 计算两个向量的余弦相似度 表示,就是上图中的黄色直线,那么向 量 c 在直角坐标系中的长度为 计算两个向量的余弦相似度 , 将 a , b , c 带入三角函数的公式中得到如下的公式:
计算两个向量的余弦相似度

在多维向量中,余弦的这种计算方法也成立。假定 A 和 B 是两个 n 维向量, A 是 $[A 1 , A 2 , \ldots, A n]$ , B 是 $[B 1 , B 2 ,.., B n]$ , 则 A 与的夹角 \theta 的余弦等于:

计算两个向量的余弦相似度

实现代码

import numpy as np

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
loadData_1 = np.squeeze(np.load('0022_c6s1_002976_011.npy'))
loadData_2 = np.squeeze(np.load('0022_c6s1_002976_012.npy'))
print(cos_sim(loadData_1,loadData_2))

运行结果:0.99

欧式距离与余弦距离的差异

1.欧式距离的数值受到维度的影响,余弦相似度在高维的情况下也依然保持低维完全相同时相似度为1等性质。

2.欧式距离体现的是距离上的绝对差异,余弦距离体现的是方向上的相对差异。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年6月16日
下一篇 2023年6月16日

相关推荐