余弦相似度计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了余弦相似度计算相关的知识,希望对你有一定的参考价值。

参考技术A 余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。
余弦相似度的计算用的很广泛,在NLP计算中,常用来计算词语的相似度,因为词,或者文本表示成分布式向量之后,可以很方便的计算他们的余弦相似度来评估他们的语义相似性。

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

文章目录

摘要

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

基本概念

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

数学原理

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

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

向量 a \\mathrma a 和向量 b \\mathrmb b 在直角坐标中的长度为 c = x 1 2 + y 1 2 c=\\sqrtx_1^2+y_1^2 c=x12+y12 , b = x 2 2 + y 2 2 b=\\sqrtx_2^2+y_2^2 b=x22+y22 , 向量 a \\mathrma a 和向量 b \\mathrmb b 之间的距离我们用向量 c \\mathrmc c 表示,就是上图中的黄色直线,那么向 量 c 在直角坐标系中的长度为 c = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 \\mathrmc=\\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 \\beginarrayl \\cos (\\theta)=\\fraca^2+b^2-c^22 a b=\\fracx_1^2+y_1^2+x_2^2+y_2^2-\\left(x_2-x_1\\right)^2-\\left(y_2-y_1\\right)^22 \\sqrtx_1^2+y_1^2 * \\sqrtx_2^2+y_2^2 \\\\ =\\fracx_1 * x_2+y_1 * y_2\\sqrtx_1^2+y_1^2 * \\sqrtx_2^2+y_2^2 \\endarray 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 ∣ \\beginaligned \\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 \\\\ & =\\fracA \\cdot B|A| \\times|B| \\endaligned cosθ=i=1n(ASpark笔记(1) :余弦相似度计算

余弦相似度的应用

余弦相似度

20-余弦相似度及其R实现

Java根据余弦定理计算文本相似度

R语言使用lsa包计算余弦相似度(Cosine Similarity)实战:两个向量的余弦相似度矩阵的余弦相度