机器学习笔记-距离度量与相似度(三)余弦相似度


在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常用余弦相似度来表示。

余弦相似度


目录

  1. 余弦相似度概念
  2. 余弦相似度公式
  3. 余弦距离

1. 余弦相似度概念

在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常用余弦相似度来表示。

余弦相似度通过测量两个向量的夹角的余弦值来度量它们之间的相似度,取值范围是\([-1,1]\)。

可以使用两个向量之间夹角的余弦值确定两个向量是否大致指向相同的方向。

  • 两个向量有相同的指向时,余弦相似度的值为\(1\);
  • 两个向量夹角为\(90^\circ\)时,余弦相似度的值为\(0\);
  • 两个向量指向完全相反的方向时,余弦相似度的值为\(-1\)。

余弦相似度的值是与向量的长度无关的,仅仅与向量的指向方向相关。换句话说,余弦相似度关注的是向量之间的角度关系,并不关心它们的绝对大小

例如,在度量一对文本相似度时,当文本长度差距很大,但内容相近时,如果使用词频或词向量作为特征,它们在特征空间中的欧氏距离可能会很大;但是它们之间的夹角可能会很小,因而相似度很高。此外,余弦相似度在特征维度很高时依然保持着取值在\([-1,1]\)之间的特性,而欧氏距离的数值受维度的影响,范围不固定,且含义模糊。

2. 余弦相似度公式

2.1 公式定义

给定两个向量\(\pmb a\)和\(\pmb b\),它们点积的几何定义为:

\[\pmb a \cdot \pmb b = ||a||||b||cos(\alpha) \tag{1} \]

代数定义为:

\[a \cdot b = \sum_{i=1}^na_ib_i = a_1b_1+a_2b_2+\cdots+a_nb_n \tag{2} \]

则,给定两个属性向量\(A\)和\(B\),其余弦相似度由向量点积和向量标量长度给出:

\[simlarity=cos(\alpha)=\dfrac{A \cdot B}{||A||||B||} = \dfrac{\sum_{i=1}^nA_i B_i}{\sqrt{\sum_{i=1}^nA_i^2} \sqrt{\sum_{i=1}^nB_i^2}} \tag{3} \]

其中,\(A_i\)和\(B_i\)分别代表向量\(A\)和\(B\)的各分量。

2.2 公式推导

下面给出公式\((3)\)的简单推导过程:

如图2.1所示,根据欧氏距离计算公式可得三角形三边的长度:

java n维向量余弦相似度 两个向量余弦相似度_java n维向量余弦相似度


图2.1
\[\begin{aligned}
    a^2 &= x_a^2+y_a^2 \\
    b^2 &= x_b^2+y_b^2 \\
    c^2 &= (x_a-x_b)^2+(y_a-y_b)^2
\end{aligned}\]
根据三角形余弦定理:
\[cos(\alpha)=\dfrac{a^2+b^2-c^2}{2ab} \tag{4}
\]
可得:
\[\begin{aligned}
    cos(\alpha) &= \dfrac{x_a^2+y_a^2+x_b^2+y_b^2-(x_a-x_b)^2-(y_a-y_b)^2}{2\sqrt{x_a^2+y_a^2}\sqrt{x_b^2+y_b^2}} \\
     &= \dfrac{x_ax_b+y_ay_b}{\sqrt{x_a^2+y_a^2}\sqrt{x_b^2+y_b^2}} \\
     & = \dfrac{\pmb a \cdot \pmb b}{||a||||b||}
\end{aligned}\]
对于\(n\)维向量有:
\[cos(\alpha)=\dfrac{A \cdot B}{||A||||B||} = \dfrac{\sum_{i=1}^nA_i B_i}{\sqrt{\sum_{i=1}^nA_i^2} \sqrt{\sum_{i=1}^nB_i^2}}
\]

3. 余弦距离

如果希望得到类似距离的表示,将\(1\)减去余弦相似度即为余弦距离

\[dist(A,B)=1-cos(\alpha)=1 - \dfrac{A \cdot B}{||A||||B||} \tag{5}
\]

因此,余弦距离的取值范围为\([0, 2]\),相同的两个向量余弦距离为\(0\)。

3.1 余弦距离与欧氏距离的关系

将向量的模长进行归一化:
\[||A||=1, ||B||=1
\]
则,根据余弦相似度定义有:
\[cos(\alpha)=\dfrac{AB}{||A||||B||} = AB
\]
归一化后的欧氏距离:\[||A-B||_2^2 = ||A||^2+||B||^2-2AB = 2(1-AB)
\]
所以:
\[||A-B||_2 = \sqrt{2(1-AB)} = \sqrt{2(1-cos(\alpha))} \tag{6}
\]

其中\(||A-B||_2\)表示欧氏距离,\(cos(\alpha)\)表示余弦相似度,\((1-cos(\alpha))\)表示余弦距离。可是看出,此时欧氏距离与余弦距离有着单调的关系。在此场景下,如果选择距离最小(相似度最大)的近邻,那么使用余弦相似度和欧氏距离的结果是相同的 。

总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异

例如,统计两部剧的用户观看行为,用户A的观看向量为(0, 1),用户B为(1, 0);此时二者的余弦距离很大,而欧氏距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。 而当我们分析用户活跃度,以登陆次数(单位:次)和平均观看时长(单位:分钟)作为特征时,余弦距离会认为(1, 10)、 (10, 100)两个用户距离很近,但显然这两个用户活跃度是有着极大差异的 ,此时我们更关注数值绝对差异,应当使用欧氏距离。一言以蔽之,具体问题要具体分析。

3.1 余弦距离是否是严格定义的距离

在之前的一篇笔记中提到,定义一个函数\(dist(x,y)\), 若它是一个“距离度量”(distance measure),则需要满足一些基本性质。

那么,余弦距离是否是一个严格定义的距离度量呢?

首先,根据余弦距离的定义,\[dist(A,B)=1-cos(\alpha)=\dfrac{||A||||B||-AB}{||A||||B||} \tag{7}
\]
考虑\(||A||||B||-AB \ge 0\),因此有\(dist(A,B) \ge 0\)恒成立。且
\[dist(A,B)=0 <-> ||A||||B||=AB <-> A=B \tag{8}
\]
因此,余弦距离满足非负性和同一性。
其次,
\[\begin{aligned}
    dist(A,B) &= \dfrac{||A||||B||-AB}{||A||||B||} \\
    &= \dfrac{||B||||A||-AB}{||B||||A||} \\
    &= dist(B,A)
\end{aligned} \tag{9}\]
因此,余弦距离满足对称性。
最后,
假设我们有三个向量\(A=(1,0), B=(1,1), C=(0,1)\),两两之间的余弦距离为:\[\begin{aligned}
    dist(A,B) &= 1 - \dfrac{\sqrt{2}}{2} \\
    dist(B,C) &= 1 - \dfrac{\sqrt{2}}{2} \\
    dist(A,C) &= 1
\end{aligned}\]
于是有如下结果:
\[dist(A,B)+dist(B,C)=2-\sqrt{2} \lt 1=dist(A,C) \tag{10}
\]
由式\((10)\)可知,余弦距离不满足直递性,即不满足三角不等式。

所以余弦距离不是严格定义的距离