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

这篇具有很好参考价值的文章主要介绍了计算两个向量的余弦相似度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

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

基本概念

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

数学原理

所以余弦的计算公式如下:
cos ⁡ θ = a 2 + b 2 − c 2 2 a b \cos \theta=\frac{a^{2}+b^{2}-c^{2}}{2 a b} cosθ=2aba2+b2c2
a,b,c 是三个边的长度。

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

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

向量 a \mathrm{a} a 和向量 b \mathrm{b} b 在直角坐标中的长度为 c = x 1 2 + y 1 2 { c}=\sqrt{x_{1}^{2}+y_{1}^{2}} c=x12+y12 , b = x 2 2 + y 2 2 b=\sqrt{x_{2}^{2}+y_{2}^{2}} b=x22+y22 , 向量 a \mathrm{a} a 和向量 b \mathrm{b} b 之间的距离我们用向量 c \mathrm{c} c 表示,就是上图中的黄色直线,那么向 量 c 在直角坐标系中的长度为 c = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 \mathrm{c}=\sqrt{\left(x_{2}-x_{1}\right)^{2}+\left(y_{2}-y_{1}\right)^{2}} c=(x2x1)2+(y2y1)2 , 将 a , b , c 带入三角函数的公式中得到如下的公式:
cos ⁡ ( θ ) = a 2 + b 2 − c 2 2 a b = x 1 2 + y 1 2 + x 2 2 + y 2 2 − ( x 2 − x 1 ) 2 − ( y 2 − y 1 ) 2 2 x 1 2 + y 1 2 ∗ x 2 2 + y 2 2 = x 1 ∗ x 2 + y 1 ∗ y 2 x 1 2 + y 1 2 ∗ x 2 2 + y 2 2 \begin{array}{l} \cos (\theta)=\frac{a^{2}+b^{2}-c^{2}}{2 a b}=\frac{x_{1}^{2}+y_{1}^{2}+x_{2}^{2}+y_{2}^{2}-\left(x_{2}-x_{1}\right)^{2}-\left(y_{2}-y_{1}\right)^{2}}{2 \sqrt{x_{1}^{2}+y_{1}^{2}} * \sqrt{x_{2}^{2}+y_{2}^{2}}} \\ =\frac{x_{1} * x_{2}+y_{1} * y_{2}}{\sqrt{x_{1}^{2}+y_{1}^{2}} * \sqrt{x_{2}^{2}+y_{2}^{2}}} \end{array} cos(θ)=2aba2+b2c2=2x12+y12 x22+y22 x12+y12+x22+y22(x2x1)2(y2y1)2=x12+y12 x22+y22 x1x2+y1y2

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

cos ⁡ θ = ∑ i = 1 n ( A i × B i ) ∑ i = 1 n ( A i ) 2 × ∑ i = 1 n ( B i ) 2 = A ⋅ B ∣ A ∣ × ∣ B ∣ \begin{aligned} \cos \theta & =\frac{\sum_{i=1}^{n}\left(A_{i} \times B_{i}\right)}{\sqrt{\sum_{i=1}^{n}\left(A_{i}\right)^{2}} \times \sqrt{\sum_{i=1}^{n}\left(B_{i}\right)^{2}}} \\ & =\frac{A \cdot B}{|A| \times|B|} \end{aligned} cosθ=i=1n(Ai)2 ×i=1n(Bi)2 i=1n(Ai×Bi)=A×BAB

实现代码

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.欧式距离体现的是距离上的绝对差异,余弦距离体现的是方向上的相对差异。文章来源地址https://www.toymoban.com/news/detail-438984.html

到了这里,关于计算两个向量的余弦相似度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch计算余弦相似度距离——torch.nn.CosineSimilarity函数中的dim参数使用方法

    前言 一、官方函数用法 二、实验验证 1.计算高维数组中各个像素位置的余弦距离 2.验证高维数组中任意一个像素位置的余弦距离 总结 现在要使用Pytorch中自带的 torch.nn. CosineSimilarity函数计算两个高维特征图(B,C,H,W)中各个像素位置的特征相似度,即特征图中的每个像素位置上

    2024年02月13日
    浏览(28)
  • 计算两幅图像的相似度(PSNR、SSIM、MSE、余弦相似度、MD5、直方图、互信息、Hash)& 代码实现 与举例

    MSE 计算模型的预测 Ŷ 与真实标签 Y 的接近程度。公式表示为:   对于两个m×n的单通道图像I和K,它们的均方误差可定义为: 优点:MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。而且,随着误差的减小,梯度也在减小,这有利于收敛

    2024年02月02日
    浏览(28)
  • 计算两个颜色相似度

    1.计算两个颜色相似度的公式如下:   颜色QColor1(R1, G1, B1)转成h1,s1,v1   颜色QColor2(R2, G2, B2)转成h2,s2,v2   detah=h1-h2   detas=s1-s2   detav=v1-v2   len = qsrt(detah * detah + detas * detas + detav * detav)   if (len 1) len = 1.0   similarity = (1.0 - len) / 1.0 注:以上公式的h,s,v已经归一化 2.颜色相似度原理。

    2024年02月16日
    浏览(28)
  • Java 计算两个字符的相似度

    在Java中,要计算两个字符的相似度,可以借助一些字符串相似度算法。以下是几种常见的字符串相似度算法: Levenshtein距离:也称为编辑距离,用于计算两个字符串之间的最小编辑操作次数(插入、删除、替换)来转换一个字符串为另一个字符串。编辑距离越小,表示两个字

    2024年02月05日
    浏览(35)
  • Elasticsearch:FMA 风格的向量相似度计算

    作者:Chris Hegarty 在 Lucene 9.7.0 中,我们添加了利用 SIMD 指令执行向量相似性计算的数据并行化的支持。 现在,我们通过使用融合乘加 (Fused Mulitply-Add - FMA) 进一步推动这一点。 乘法和加法是一种常见的运算,它计算两个数字的乘积并将该乘积与第三个数字相加。 这些类型的

    2024年02月01日
    浏览(27)
  • java文本相似度【余弦相似度】

    为了实现文本相似度对比,我们可以使用余弦相似度算法。首先,我们需要将文本转换为向量,然后计算两个向量之间的余弦相似度。以下是一个简单的Java实现: 这个代码示例首先定义了一个 TextSimilarity 类,其中包含一个 main 方法用于测试文本相似度计算。 calculateCosineSi

    2024年02月10日
    浏览(29)
  • 使用Pandas计算两个系统客户名称的相似度

    引言: 在日常业务处理中,我们经常会面临将不同系统中的数据进行匹配和比对的情况。特别是在涉及到客户管理的领域,我们需要确保两个系统中的客户记录是准确、一致和无重复的。 本文将介绍如何使用Python的Pandas库来处理这个问题。我们将以一个示例情景为例,假设

    2024年02月16日
    浏览(24)
  • OpenCV+OpenCvSharp实现图片特征向量提取与相似度计算

    图片特征向量是一种用于描述图片内容的数学表示,它可以反映图片的颜色、纹理、形状等信息。图片特征向量可以用于做很多事情,比如图片检索、分类、识别等。 本文将介绍图片特征向量的提取以及相似度的计算,并使用C#来实现它们。 文章开始前,我们先来简单了解一

    2024年02月08日
    浏览(29)
  • PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享

    通过使用 PostgreSQL 的 C 函数接口,我们可以编写用 C 语言实现的函数,并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用,从而扩展 PostgreSQL 的功能。 C 函数在某些情况下可以提供比 SQL 函数更高的执行效率,因为它们可以直接访问底层系统资源并

    2024年02月15日
    浏览(29)
  • LLM - LLaMA-2 获取文本向量并计算 Cos 相似度

    目录 一.引言 二.获取文本向量 1.hidden_states 与 last_hidden_states ◆ hidden_states ◆ last_hidden_states  2.LLaMA-2 获取 hidden_states ◆ model config  ◆ get Embedding 三.获取向量 Cos 相似度 1.向量选择 2.Cos 相似度 3.BERT-whitening 特征白化 4.评估指标对比 四.总结 前面提到了两种基于统计的机器翻

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包