余弦相似度公式及推导案例

余弦相似度公式及推导案例


定义


余弦相似度通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。
注意这上下界对任何维度的向量空间中都适用,而且余弦相似性最常用于高维正空间。例如在信息检索中,每个词项被赋予不同的维度,而一个维度由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。
另外,它通常用于文本挖掘中的文件比较。此外,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。

两个向量间的余弦值可以通过使用欧几里得点积公式求出:
在这里插入图片描述
给定两个属性向量,A和B,其余弦相似性θ由点积和向量长度给出,如下所示:
在这里插入图片描述
这里的Ai、Bi分别代表向量A和B的各分量。

公式推导


如果对于上述的公式不是很理解,那就请看这里的公式推导:
(由于不会键盘敲数轴和公式,就直接上笔了)
在这里插入图片描述

案例


看一个案例来加深理解:
某购物网站有如下数据:小明购买了T恤a、T恤b、T恤e,小红购买了T恤b、T恤c、小强购买了T恤a、T恤e。
把以上信息转为向量图,代入上述的公式来计算得出相似度,过程如下:
在这里插入图片描述由上述的结果便可得到如下结论:小明和小红这两个用户有一定的相似度,但是不大,因为他们只有一个共同商品;小明和小强这两个用户相似度最大,因为他们有两个共同商品;而小红和小强的相似度为0,因为小红买的T恤小强都没有买。

转自:https://blog.csdn.net/smile_shujie/article/details/89516305

<think>嗯,用户之前问过关于ChromaDB如何排序结果的问题,现在接着问余弦相似度和欧氏距离的区别。看来他们在使用向量数据库时,可能对不同的相似度度量方法感到好奇,或者在选择哪种方法时遇到了困惑。需要解释清楚这两个概念的区别,以及它们在实际应用中的不同场景。 首先,得回顾用户之前的问题,他们在使用ChromaDB的query方法时,提到了默认的排序是基于余弦相似度的。现在他们想了解余弦相似度和欧氏距离的差别,可能是因为在创建集合时可以选择不同的距离度量方式,比如L2(欧氏距离)或余弦,而用户需要知道如何选择。 用户可能的需求是理解这两种方法的数学原理、计算方式以及适用场景。需要解释清楚余弦相似度关注的是方向,而欧氏距离关注的是距离的绝对值。同时,他们可能想知道在什么情况下应该选择哪一种,比如在高维数据下余弦可能更有效,或者在需要考虑向量长度时用欧氏距离。 还需要考虑用户的背景,可能不是数学或数据科学专家,所以需要用通俗易懂的语言,避免复杂的公式推导。用例子来说明可能更好,比如文本分类中使用余弦相似度,图像识别中使用欧氏距离。同时要指出ChromaDB中如何选择这两种方法,比如在创建集合时的参数设置,这样用户可以直接应用到他们的项目中。 另外,用户之前的问题提到过默认使用余弦相似度,所以需要强调当使用不同的距离度量时,排序结果会有不同。比如,余弦相似度范围在-1到1之间,而欧氏距离是非负的,值越小越相似。可能需要提醒用户,在切换距离度量时,结果排序的逻辑也会变化,需要根据实际需求选择合适的度量方式。 总结下来,回答需要结构清晰,分点说明两者的定义、计算方式、特点、适用场景,并给出ChromaDB中的具体应用例子。可能还需要注意代码示例的正确性,比如之前用户提供的创建集合时的参数设置是否正确,是否需要更多的参数说明。确保用户能够理解并正确应用这些概念到他们的实际项目中去。</think>--- ### 核心区别总结 余弦相似度(**方向敏感**)和欧氏距离(**绝对距离敏感**)是向量相似性度量的两种主要方式,**本质区别在于数学定义和应用场景**: | 维度 | 余弦相似度 | 欧氏距离(L2距离) | |--------------|-------------------------------------|-----------------------------------| | **数学定义** | $\cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|}$ | $\sqrt{\sum_{i=1}^n (A_i - B_i)^2}$ | | **取值范围** | [-1, 1](1表示完全同向,-1反向) | [0, +∞)(0表示完全重合) | | **核心关注** | 向量方向的相似性 | 向量空间中的绝对距离 | | **向量长度** | **不受影响**(仅看方向夹角) | **显著影响**(长度差异直接改变距离) | --- ### 直观理解 1. **余弦相似度示例(文本相似性)** - 句子A:"我喜欢编程和机器学习" - 句子B:"编程与机器学习是我的爱好" - **词频向量方向接近** → 余弦值高(即使句子长度不同) 2. **欧氏距离示例(空间定位)** - 点A坐标(1,2)、点B坐标(4,6) - 绝对距离:$\sqrt{(4-1)^2 + (6-2)^2} = 5$ - **坐标差异直接决定距离** --- ### 关键差异场景 | 场景 | 推荐方法 | 原因 | |--------------------------|------------------|----------------------------------------------------------------------| | 文本、词向量比对 | 余弦相似度 | 文本关注语义方向,忽略文本长度差异(如TF-IDF向量) | | 图像像素值、坐标点匹配 | 欧氏距离 | 关注像素/位置的绝对差异(如RGB颜色距离) | | 高维稀疏数据(推荐系统) | 余弦相似度 | 方向比对更稳定,避免维度灾难 | | 物理空间测量(位置导航) | 欧氏距离 | 实际距离的物理意义明确 | --- ### ChromaDB中的应用 在ChromaDB中,**创建集合时需显式指定距离算法**,直接影响查询结果的排序逻辑: ```python # 创建集合时指定距离算法(二选一) collection = chroma_client.create_collection( name="my_collection", metadata={"hnsw:space": "cosine"} # 或 "l2"(欧氏距离) ) # 查询时结果自动按指定算法排序 results = collection.query( query_embeddings=[query_vector], n_results=5, include=["distances"] ) ``` --- ### 选择依据(简单决策树) 1. **数据是否归一化?** - 是 → 欧氏距离和余弦相似度等价($\|A\|=\|B\|=1$时,$\cos(\theta) = 1 - \frac{\|A-B\|^2}{2}$) - 否 → 根据需求选择 2. **关注语义还是绝对差异?** - 语义 → 余弦相似度 - 绝对差异 → 欧氏距离 3. **数据维度是否极高?** - 高维(如文本)→ 余弦相似度更鲁棒 - 低维(如坐标)→ 两者均可,按需求选择 --- 通过理解这些差异,您可以更精准地为ChromaDB或其他向量数据库选择相似性度量方法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值