在机器学习问题中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,宠用余弦相似度来表示。余弦相似度的取值范围时[-1,1],相同的两个向量之间的相似度为1,如果希望得到类似的距离的表示,将1减去余弦相似度即为余弦距离,因此,宇轩距离的取值范围为[0,2],相同两个向量余弦相似度为0.

为什么在一些场景中要使用余弦相似度而不是欧氏距离呢???

对于两个向量A和B,其余弦相似度定义为:

余弦相似度 go语言 余弦相似度和余弦距离_余弦相似度


即两个向量的夹角的余弦,关注的是向量之间的角度关系,并不关心他们的绝对大小,其取值范围是[-1,1]。当一对文本相似度的长度差距很大,当内容相近时,如果使用词频或词向量作为特征,那么在特征空间中的欧氏距离通常很大,而用余弦相似度,他们之间的夹角可能很小,因而相似度很高。

在文本,图像,视频等领域,研究的对象特征维度往往很高,余弦相似度在高维情况下依然保持"相同时为1,正交时为0,相反时为-1"的性质,而欧式距离的数值则受维度的影响,范围不固定,并且含义也比较模糊。

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

余弦距离是否是一个严格定义的距离????

首先看距离的定义:在一个集合中,如果每一对元素均可唯医确定一个实数,使得三条距离公理(正定性,对称性,三角不等式)成立,则该实数可称为:这对元素之间的距离

余弦距离满足正定性和对称性,但是不满足三角不等式,因此它并不是严格定义的距离。

余弦相似度 go语言 余弦相似度和余弦距离_机器学习_02


欧式距离是一个合法的距离,而余弦相似度余欧式距离有二次关系,自然不满足三角不等式。