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

news2024/10/6 1:35:22

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

在数据分析领域,余弦相似度用于度量内积空间中两个非零向量之间的相似性。它等于这两个向量间夹角的余弦值,即向量点积除以它们长度的乘积。因此,余弦相似度与向量的大小无关,仅与它们的夹角有关。余弦相似度总是属于区间,例如,两个成比例的矢量的余弦相似度为 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.coloradmin.cn/o/1361307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

残疾大学生找工作好难

有点肢体残疾且普通话不太标准的大学生好难找工作啊,怎么办?难道得去捡垃圾了?求学多年,好容易读了个大学(省内一本),我咋这么命苦,找了800多家,面试好几家,都没一个要我的。

《剑指 Offer》专项突破版 - 面试题 3 :前 n 个数字二进制形式中 1 的个数(C++ 实现)

目录 前言 方法一 方法二 方法三 前言 题目链接:338. 比特位计数 - 力扣(LeetCode) 题目: 输入一个非负数 n,请计算 0 到 n 之间每个数字的二进制形式中 1 的个数,并输出一个数组。例如&#xff0…

【python爬虫开发实战 情感分析】利用爬虫爬取城市评论并对其进行情感分析

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏: python网络爬虫从基础到实战 带你学习爬虫从基础到实战 深度学习带你感受AI的魅力 💡往期推荐: ⭐️前面比较重要的基础内容: 【Py…

日常测试工作中哪些是必须知道的 SQL 语句?

SQL 简介 SQL(Structured Query Language,结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS),基于 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,比较重要的版本是 SQL92…

2023 最火的是什么? 超维计算 + 神经网络

从chatgpt开始,人工智能进步的步伐似乎势不可挡,但支撑这些程序的人工神经网络遇到了一些重大限制,其他的很难推理但是人类的大脑能够通过类比进行推理,当我们看到新事物时,我们不必生长新的神经元,我们可以…

飞凌全志T113-i开发板视频编码测试

前言 本文测试OK113i-S开发板-视频编解码的功能 OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能 T113-i 是一种为多媒体解码平台设计的高级应用处理器。T113-i 集成了64位玄铁C906 RISC-V CPU, 双核 Cortex - A7 CPU 和 HiFi4 DSP&a…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

所有单片机使用的汇编语言是统一的吗?

所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…

跑通大模型领域的 hello world

跑通书生浦语大模型的 3 个趣味 demo(InternLM-Chat-7B 智能对话、Lagent工具调用解简单数学题、浦语灵笔多模态图文创作和理解)视频和文档。 1、两个框架 InternLM 是⼀个开源的轻量级训练框架,旨在⽀持⼤模型训练⽽⽆需⼤量的依赖。 Lage…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所,主要道路车辆违停等违规行为会对园区的安全造成隐患,并且在上下班高峰期内,由于发现不及时,车辆违停行为会造成出入口拥堵现象,这也成为园区管理的棘手问题。为了…

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域,UI自动化测试工具被广泛应用,其意义不仅仅体现在节省时间和资源上,更关系到软件质量的提升、团队效率的增加,以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性,以及它在软件开发生命周期中…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存:受虚拟机内存大小的参数控制,当大小超过参数设置的大小时会报OOM。本地内存:本地内存不受虚拟机内存参数的限制,只受物理内存容量的限制;虽然不受参数的限制,如果所占内存超过…

C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

长度受限制的字符串函数介绍 一、strncpy函数的使用 &#xff08;一&#xff09;strncpy使用 #include <stdio.h> #include <string.h>int main() {char arr1[20] "asdfgdfv";char arr2[7] "zxcvbn";strncpy(arr1, arr2, 4);printf("…

Origin无法使用主题管理器相关功能或报错:Err, Save Theme dialog error!

问题描述 在使用origin绘图时&#xff0c;往往需要进行大批量绘制同样类型的图。如果每个图都不断地去修改相关设置&#xff0c;无疑是浪费了许多宝贵的时间。为了提高绘图效率&#xff0c;了解到了主题管理器&#xff0c;可在“工具–主题管理器”找到。 然而&#xff0c;当我…

计算机毕业设计-----SSM宠物商城带后台管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 加入购物车,发表留言,提交订单,查看订单信息,会员注册,登录页面等功能。 管理员角色包含以下…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C++补充内容--EasyX-UI界面

esay x 其他 地图打印(利用二维数组) 双缓冲 当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题 开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可…

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

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

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…