【机器学习:余弦相似度 】机器学习中余弦相似度的理解和应用

【机器学习:余弦相似度 】机器学习中余弦相似度的理解和应用

在数据分析领域,余弦相似度用于度量内积空间中两个非零向量之间的相似性。它等于这两个向量间夹角的余弦值,即向量点积除以它们长度的乘积。因此,余弦相似度与向量的大小无关,仅与它们的夹角有关。余弦相似度总是属于区间,例如,两个成比例的矢量的余弦相似度为 1,两个正交的矢量的相似度为 0,两个相反的矢量的相似度为-1。 在某些情况下,矢量的分量值不能为负,在这种情况下,余弦相似度的边界为 。

例如,在信息检索和文本挖掘中,每个单词都对应一个独特的坐标。文档由其中单词出现频率的向量表示。因此,我们可以利用余弦相似度来衡量两篇文档在主题上的相似度,而这与文档的长度无关。

在数据挖掘领域,该技术还被用于测量聚类内的内聚力。

余弦相似度的一个优势在于计算复杂度较低,尤其是对于稀疏向量,因为它只考虑非零坐标。

余弦相似度也被称为 Orchini 相似度和 Tanimoto 系数。而 Otsuka–Ochiai 相似度(将在下文讨论)是一种应用于二进制数据的余弦相似度。

定义

两个非零向量的余弦值可以通过欧氏点积公式求出:

A ⋅ B = ∣ ∣ A ∣ ∣ ∣ ∣ B ∣ ∣ cos ⁡ θ A\cdot B=||A|| ||B|| \cos{\theta} AB=∣∣A∣∣∣∣B∣∣cosθ

考虑两个 n 维的属性向量 A 和 B,它们的余弦相似度 cos(θ) 可以用它们的点积和大小(模)来表示,计算公式为

c o s i n e _ s i m i l a r i t y = S c ( A , B ) : = cos ⁡ ( θ ) = A ⋅ B ∣ ∣ A ∣ ∣ ∣ ∣ B ∣ ∣ = ∑ i = 1 n A i B i ∑ i = 1 n A i 2 ⋅ ∑ i = 1 n B i 2 cosine\_similarity=S_c(A, B):=\cos{(\theta)} = \frac{A\cdot B}{||A|| ||B||}=\frac{\sum^{n}_{i=1}{A_iB_i}}{\sqrt{\sum^{n}_{i=1}{A_i^2}}\cdot \sqrt{\sum^{n}_{i=1}{B_i^2}}} cosine_similarity=Sc(A,B):=cos(θ)=∣∣A∣∣∣∣B∣∣AB=i=1nAi2 i=1nBi2 i=1nAiBi

其中, A i A_i Ai B i B_i Bi分别是向量A 和B 的第 i 个分量。

所计算出的相似度值在 -1(代表完全相反)至 1(代表完全相同)之间变化,其中 0 代表两向量正交或无相关性,而中间的数值表示不同程度的相似性或不相似性。

对于文本匹配,属性向量A和B通常是文档的词频向量。余弦相似度可以看作是比较过程中规范化文档长度的方法。在信息检索的情况下,两个文档的余弦相似度范围为 ,因为术语频率不能为负。使用 TF-IDF 权重时也是如此。两个词频向量之间的角度不能大于 90°。

如果属性向量是通过减去其均值来归一化的(即中心化),这种方法称为中心余弦相似度,它与皮尔逊相关系数类似。对于居中的示例,

i f A = [ A 1 , A 2 ] , t h e n A ‾ = [ A 1 + A 2 2 , A 1 + A 2 2 ] T , s o A − A ‾ = [ A 1 − A 2 2 , − A 1 + A 2 2 ] T . if A= [A_1, A_2], then \overline{A} = [\frac{A_1+A_2}{2}, \frac{A_1+A_2}{2}]^T,\\ so A -\overline{A} = [\frac{A_1-A_2}{2}, \frac{-A_1+A_2}{2}]^T. ifA=[A1,A2],thenA=[2A1+A2,2A1+A2]T,soAA=[2A1A2,2A1+A2]T.

余弦距离

所谓的余弦距离通常指的是余弦相似度在正空间中的补数,具体来说

c o s i n e _ d i s t a n c e = D c ( A , B ) : = 1 − S c ( A , B ) . cosine\_distance=D_c(A, B):=1-S_c(A, B). cosine_distance=Dc(A,B):=1Sc(A,B).

值得注意的是,余弦距离并非真正的距离度量,因为它不满足三角不等式的特性,或者更正式地说,是施瓦茨不等式,并且违反了重合公理。了解这一点的一种方法是注意余弦距离是向量 L 2 L_2 L2归一化的平方欧几里得距离的一半,而平方欧几里得距离也不满足三角形不等式。为了在保持相同顺序的同时修复三角形不等式性质,必须转换为角距离或欧几里得距离。或者,对角距离起作用的三角不等式可以直接用余弦表示;见下文。

角距离和相似度

任意两个向量A和B之间的归一化角度,称为角距离,是一个正式的距离度量,可以从余弦相似度计算出来。然后,可以使用角距离度量的补码来定义边界在 0 和 1 之间(含 0 和 1)的角度相似度函数。

当矢量元素可能是正的或负的时:

a n g u l a r _ d i s a t a n c e = D θ : = arccos ⁡ ( c o s i n e _ s i m i l a r i t y ) π = θ π angular\_disatance=D_\theta :=\frac{\arccos{(cosine\_similarity)}}{\pi} = \frac{\theta}{\pi} angular_disatance=Dθ:=πarccos(cosine_similarity)=πθ

a n g u l a r _ s i m i l a r i t y = S θ : = 1 − a n g u l a r _ d i s a t a n c e = 1 − θ π angular\_similarity =S_\theta :=1-angular\_disatance = 1 - \frac{\theta}{\pi} angular_similarity=Sθ:=1angular_disatance=1πθ

或者,如果向量元素始终为正:

a n g u l a r _ d i s a t a n c e = D θ : = 2 ⋅ arccos ⁡ ( c o s i n e _ s i m i l a r i t y ) π = 2 θ π angular\_disatance=D_\theta :=\frac{2\cdot \arccos{(cosine\_similarity)}}{\pi} = \frac{2\theta}{\pi} angular_disatance=Dθ:=π2arccos(cosine_similarity)=π2θ

a n g u l a r _ s i m i l a r i t y = S θ : = 1 − a n g u l a r _ d i s a t a n c e = 1 − 2 θ π angular\_similarity =S_\theta :=1-angular\_disatance = 1 - \frac{2\theta}{\pi} angular_similarity=Sθ:=1angular_disatance=1π2θ

不幸的是,计算反余弦 (arccos) 函数的速度很慢,这使得使用角距离比使用上面更常见(但不是公制)余弦距离的计算成本更高。

L 2 L_2 L2归一化欧几里得距离

余弦距离的另一个有效代理可以通过对向量进行归一化,然后应用正态欧几里得距离来获得。使用这种技术,首先将每个向量中的每项除以向量的大小,从而产生单位长度的向量。然后,任意两个向量端点上的欧几里得距离是一个适当的度量,它给出了与余弦距离(欧几里得距离的单调变换;见下文)相同的顺序,用于任何向量的比较,并且进一步避免了产生适当度量所需的潜在昂贵的三角运算。一旦发生归一化,向量空间就可以与任何欧几里得空间可用的各种技术一起使用,特别是标准降维技术。这种归一化的形式距离通常用于许多深度学习算法中。

Otsuka–Ochiai 系数

在生物学中,有一个类似的概念,称为大冢-落合系数,以大塚弥之助(也拼写为大塚弥之助,日语:大塚弥之助)和落合明(日语:落合明)命名的大冢-落合系数,可以表示为:

K = ∣ A ∩ B ∣ ∣ A ∣ × ∣ B ∣ K=\frac{|A\cap B|}{\sqrt{|A|\times |B|}} K=A×B AB

这里 A和 B是集合,并且A是 |A|中的元素数。如果集合表示为位向量,则可以看到大冢-落合系数与余弦相似度相同。

在最近的一本书中,该系数被错误地归因于另一位姓大冢的日本研究人员。之所以出现这种混淆,是因为在1957年,落合明(Akira Ochiai)引用了Ikuso Hamai(日语:浜井生三)的一篇文章,将系数仅归因于大冢(没有提到名字),而后者又引用了大冢弥之介(Yanosuke Otsuka)1936年的原始文章。它与戈弗雷·汤姆森(Godfrey Thomson)引入的乐谱相同。

属性

余弦相似性最值得注意的特性是,它反映了单个向量维度的相对比较,而不是绝对比较。对于任何常数和向量,向量和是最相似的。因此,该度量最适合频率比绝对值更重要的数据;值得注意的是,文档中的术语频率。然而,最近以信息论为基础的指标,如Jensen-Shannon、SED和三角发散,已被证明至少在某些上下文中改善了语义。

余弦相似度与欧几里得距离有关,如下所示。用通常的 表示欧几里得距离,并观察到

∣ ∣ A − B ∣ ∣ 2 = ( A − B ) ⋅ ( A − B ) = ∣ ∣ A ∣ ∣ 2 + ∣ ∣ B ∣ ∣ 2 − 2 ( A ⋅ B ) (极化身份) ||A-B||^2=(A-B)\cdot (A-B)=||A||^2+||B||^2-2(A\cdot B) (极化身份) ∣∣AB2=(AB)(AB)=∣∣A2+∣∣B22(AB)(极化身份)

通过扩展。当 A 和 B 归一化为单位长度时,此表达式等于

2 ( 1 − cos ⁡ ( A , B ) ) 2(1-\cos{(A, B)}) 2(1cos(A,B))

简而言之,余弦距离可以用欧几里得距离表示为

D C ( A , B ) = ∣ ∣ A − B ∣ ∣ 2 2 w h e n ∣ ∣ A ∣ ∣ 2 = ∣ ∣ B ∣ ∣ 2 = 1 D_C(A, B) = \frac{||A-B||^2}{2} when ||A||^2=||B||^2 = 1 DC(A,B)=2∣∣AB2when∣∣A2=∣∣B2=1

欧几里得距离称为和弦距离(因为它是单位圆上弦的长度),它是向量之间的欧几里得距离,这些向量被归一化为其中平方值的单位和。

零分布: 对于既可以是负数也可以是正数的数据,余弦相似度的零分布是两个独立的随机单位向量的点积的分布。该分布的均值为零,方差为 (其中 是维数),尽管分布在 -1 和 +1 之间,但随着分布的变大,分布越来越接近正态分布。其他类型的数据,例如仅采用值 0 或 1 的比特流,空分布采用不同的形式,并且可能具有非零均值。

余弦相似度的三角不等式

常规的角度三角不等式(即单位超球面上的弧长)提供了以下关系

∣ ∠ A C − ∠ C B ∣ ≤ ∠ A B ≤ A C + ∠ C B | \angle AC-\angle CB| \leq \angle AB \leq AC + \angle CB ∣∠ACCBABAC+CB

由于余弦函数随着 [0, π] 弧度中的角度的增加而减小,因此当我们取每个值的余弦时,这些不等式的意义是相反的:

cos ⁡ ( ∠ A C − ∠ C V ) ≥ cos ⁡ ( ∠ A B ) ≥ cos ⁡ ( ∠ A C + ∠ C B ) \cos{(\angle AC-\angle CV)} \geq\cos{(\angle AB)}\geq\cos{(\angle AC + \angle CB)} cos(ACCV)cos(AB)cos(AC+CB)

利用余弦的加法和减法公式,这两个不等式可以重写为仅使用原始余弦值的形式

cos ⁡ ( A , C ) ⋅ cos ⁡ ( C , B ) + ( 1 − cos ⁡ ( A , C ) 2 ) ⋅ ( 1 − cos ⁡ ( C , B ) 2 ) ≥ cos ⁡ ( A , B ) , cos ⁡ ( A , B ) ≥ cos ⁡ ( A , C ) ⋅ cos ⁡ ( C , B ) − ( 1 − cos ⁡ ( A , C ) 2 ) ⋅ ( 1 − cos ⁡ ( C , B ) 2 ) . \cos{(A, C)}\cdot \cos{(C, B)}+\sqrt{(1-\cos{(A, C)}^2)\cdot(1-\cos{(C, B)}^2) } \geq \cos(A, B),\\ \cos(A, B)\geq\cos(A, C)\cdot \cos(C, B) - \sqrt{(1-\cos{(A, C)}^2)\cdot(1-\cos{(C, B)}^2) }. cos(A,C)cos(C,B)+(1cos(A,C)2)(1cos(C,B)2) cos(A,B),cos(A,B)cos(A,C)cos(C,B)(1cos(A,C)2)(1cos(C,B)2) .

如果已知对象 A 和 C 之间的相似度,那么这种形式的三角不等式可以用来确定对象 A 和 B 之间的最小和最大相似度。例如,这用于度量数据索引,但也用于加速球面 k 均值聚类,就像欧几里得三角形不等式用于加速常规 k 均值一样。

软余弦测量

软余弦或称作“软”相似度,是在计算两个向量之间的相似度时考虑特征对之间相似性的一种方法。传统的余弦相似性认为向量空间模型(VSM)的特征是独立的或完全不同的,而软余弦度量则考虑VSM中特征的相似性,这有助于推广余弦(和软余弦)的概念以及(软)相似性的概念。

以自然语言处理(NLP)为例,其中特征间的相似性通常很直观。例如,单词、n-gram 或句法 n-gram 这些特征可能具有高度相似性,尽管它们在 VSM 中正式被视为不同的特征。例如,单词“play”和“game”是不同的单词,因此映射到 VSM 中的不同点;然而,它们在语义上是相关的。在 n-gram 或句法 n-gram 的情况下,可以应用 Levenshtein 距离(实际上,Levenshtein 距离也可以应用于单词)。

为了计算软余弦,矩阵 s 用于表示特征之间的相似性。它可以通过 Levenshtein 距离、WordNet 相似性或其他相似性度量来计算。然后我们乘以这个矩阵。

给定两个 N 维向量a 和b ,软余弦相似度的计算公式如下:

s o f t _ c o s i n e 1 ( a , b ) = ∑ i , j N s i , j a i b j ∑ i , j N s i , j a i a j ∑ i , j N s i , j b i b j soft\_cosine_1(a, b)=\frac{\sum^N_{i,j}{s_{i, j}a_ib_j}}{\sqrt{\sum^N_{i,j}{s_{i, j}a_ia_j}}\sqrt{\sum^N_{i,j}{s_{i, j}b_ib_j}}} soft_cosine1(a,b)=i,jNsi,jaiaj i,jNsi,jbibj i,jNsi,jaibj

其中 s i j s_{ij} sij = 相似性(特征,特征ij)。

如果特征之间没有相似性( i ≠ j i \neq j i=j s = 1 s = 1 s=1 s i i i j = 0 s_{iiij} = 0 siiij=0),则给定的方程等价于传统的余弦相似度公式。

该度量的时间复杂度是二次的,这使得它适用于实际任务。请注意,复杂度可以简化为亚二次。Gensim 开源库中包含了这种软余弦相似性的有效实现。

应用

余弦相似度在文本分析中特别有用。在文本处理中,文档或句子通常会被转换为向量(例如使用词频或TF-IDF值)。每个维度代表一个独特的词。通过计算这些文本向量的余弦相似度,我们可以量化文档间的相似性。

示例

假设有两个文本文档:

  • 文档1: “I like machine learning”
  • 文档2: “I love machine learning”

首先,将这些句子转换为向量。例如,基于词频,我们可能得到:

  • 向量1: [1, 1, 1, 0] (对应 “I”, “like”, “machine”, “learning”)
  • 向量2: [1, 0, 1, 1] (对应 “I”, “love”, “machine”, “learning”)

然后,我们可以计算这两个向量的余弦相似度。

扩展

除了在文本分析中的应用之外,余弦相似度还广泛应用于推荐系统(比如比较用户的喜好),以及在机器学习领域,如聚类分析和异常检测。

余弦相似度的主要优势之一在于它不受向量长度的影响,这在比较文本时尤其重要,因为文档长度可能会有很大差异。

GPT图像示例

为了更好地解释这个概念,我将生成一个图像,展示两个向量在二维空间中的表示,以及它们之间的夹角,来直观展示余弦相似度的概念。

在这里插入图片描述
上图展示了两个向量在二维空间中的表示,标记为向量A和向量B,以及它们之间的夹角。这个图像也包含了余弦相似度的公式,可以直观地帮助理解这个概念,非常适合用于技术博客中解释余弦相似度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/297015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建分区的学生成绩表4、按分区加载数据5、查看分区…

解决“由于找不到d3dx9_43.dll无法继续执行代码”的5种方法

找不到d3dx9_43.dll文件导致无法继续执行代码的问题,通常是由于DirectX组件缺失或损坏引起的。这个错误通常出现在运行某些游戏或应用程序时,它会导致程序无法正常运行。下面我将介绍5种解决找不到d3dx9_43.dll的方法。 一、d3dx9_43.dll的文件属性&…

Filter Options in Select Field

Filter Options in Select Field 假设有两个下拉字段State和City。邦有两个值卡纳塔克邦和马哈拉施特拉邦,城市有四个值,班加罗尔,迈索尔,孟买和浦那。如果希望根据State中选择的值过滤City中的选项,可以编写如下所示的…

十种编程语言的对比分析

在当今的软件开发领域,编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景,选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析,帮助读者了解它们的优缺点和适用场景。 一、Python Pyt…

vue封装组件(一)标签和下拉框组合实现添加数据

背景: 最近接入短剧内容,需要添加短剧合作方。在详情页需要支持添加组件 方案一:标签tag加上输入框实现添加数据。图片见下 这个是刚开始做的,后来产品觉得这样会造成随意修改数据,需要改成下拉框形式添加 方案二:标签…

跟随chatgpt从零开始安装git(Windows系统)

为什么我们要安装Git?Git有什么用? 1. 版本控制:Git 可以追踪代码的所有变化,记录每个提交的差异,使您能够轻松地回溯到任何历史版本或比较不同版本之间的差异。 2. 分支管理:通过 Git 的分支功能&#xff…

【数据结构和算法】字符串解码

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 什么情况会用到栈 2.2 方法一:辅助栈法 三、代码 3.1 方法一:辅助栈法 四…

UE5.1_UMG序列帧动画制作

UE5.1_UMG序列帧动画制作 UMG序列帧动画制作相对比较简单,不像视频帧需要创建媒体播放器那么复杂,以下简要说明: 1. 事件函数 2. 准备序列帧装入数组 3. 构造调用事件函数 4. 预览 序列帧UMG0105 5. 完成!按需配置即可。

洗地机、扫地机器人和吸尘器哪个好?三选一谁更值得买?

传统的清洁地面方式,不仅耗费时间、精力,还会造成人的腰酸背痛,带来一连串的家务后遗症,简直是苦不堪言。像洗地机、扫地机器人、吸尘器等电动清洁工具的诞生让人们的清洁更加轻松省事,也凭借着这些优势深受大众喜爱。…

Python基础(十九、文件操作写入与追加)

文章目录 一、文件的写入(使用 "w" 模式)二、文件的追加(使用 "a" 模式)三、文件备份案例接之前的答案 在 Python 中,open() 是一个内置函数,用于打开文件并返回文件对象。它是处理文件…

2024更新阿里云域名优惠口令大全_优惠口令获取方法

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

Python学习之路——文件部分【文件的读取】

目录 先解释一下引文的答案 一、open()打开函数 二、mode常用的三种基础访问模式 三、读-操作相关方法 (一)read方法 (二)readlines方法 (三)with open 语法 (四)操作汇总 …

损失函数篇 | YOLOv8 引入 Shape-IoU 考虑边框形状与尺度的度量

作者导读:Shape-IoU:考虑边框形状与尺度的度量 论文地址:https://arxiv.org/abs/2312.17663 作者视频解读:https://www.bilibili.com 开源代码地址:https://github.com/malagoutou/Shape-IoU/blob/main/shapeiou.py…

代码随想录day21 二叉搜索树进阶

530.二叉搜索树的最小绝对差 题目 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 思考 本题有一种笨办法,就是把二叉树的所有结点都存到一个vector里,因为二叉搜索树是左中右排序…

Spring整合MyBatis框架!!!

搭建环境&#xff1a; pom.xml: <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></pro…

Spring 整合MyBatis

创建工程 pom.xml <?xml version"1.0" encoding"UTF-8"?> 4.0.0 <groupId>com.by</groupId> <artifactId>Spring_MyBatis</artifactId> <version>1.0-SNAPSHOT</version><properties><!-- 项目源码…

高可用分布式部署Spark、完整详细部署教程

前言 Spark 是 UC Berkeley AMP Lab 开源的通用分布式并行计算框架。 Spark基于map reduce算法实现的分布式计算&#xff0c;拥有Hadoop MapReduce所具有的优点&#xff1b;但不同于MapReduce的是Job中间输出和结果可以保存在内存中&#xff0c;从而不再需要读写HDFS&#xff…

数据采集有哪些方法?HTTP代理起到什么作用?

在这个数字化的时代&#xff0c;数据就如同生活中不可或缺的元素&#xff0c;我们的行为、喜好、甚至是想法都被转化成了数字化的信息。那么&#xff0c;现代社会是如何进行数据的采集的呢&#xff1f;让我们一同来看看&#xff01; 1. 网络浏览行为的追踪 在我们浏览互联网的…

【Windows】之微软输入法配置小鹤双拼

前言 Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法&#xff0c;不需要去安装多余的第三方输入法软件。同时&#xff0c;微软中文拼音输入法支持双拼输入法&#xff0c;但微软自带的双拼输入法不包含小鹤双拼方案的。所以&#xff0c;在这里将会讲解如何配置…

原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)解决ios不显示问题

最终效果 前言 动态设置Svg图片颜色就是修改Svg源码的path中的fill属性&#xff0c; 通过wx.getFileSystemManager().readFile读取.xlsx文件 ios不显示需要把encoding设置 binary 把文件转成base64 封装svg-icon组件 1、在项目的components下新建svg-icon文件夹&#xff0c;新…
最新文章