news 2026/8/5 18:38:09

如何用Python计算余弦相似性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用Python计算余弦相似性

如何用计算余弦相似性

衡量两个非零向量于多维空间里方向相似度情形的指标是余弦相似性, 其借由算出两个向量夹角余值来展现相似程度, 余值越靠拢1, 表明两个向量越相似, 于其中, 能依照很多方法算出余弦相似性, 最常运用的方式涵盖使用NumPy库、-learn库等, 紧接着, 我们会细致介绍怎样运用这些方法以算出余弦相似性。

一个强大的科学计算库是 NumPy, 它提供了丰富并且具数组与矩阵操作功能, 借之有助于轻松达成向量计算。NumPy能使我们轻易地展开余弦相似性的计算。

一、使用 NumPy 计算余弦相似性

NumPy属于一个具备强大能力的数值计算库, 它给出了许多针对数组以及矩阵运算的函数。借助于NumPy能够相当简便地开展余弦相似性的计算工作。下述内容为具体的步骤:

1. 导入 NumPy 库

首先, 我们要导入NumPy库, 要是你尚未装上NumPy, 能够运用pip来完成安装!

pip install numpy

然后在代码中导入 NumPy:

import numpy as np

2. 定义向量

随后, 界定两个向量, 而后, 我们会去计算这两个向量相互之间的余弦相似性。

vector1 = np.array([1, 2, 3])

vector2 = np.array([4, 5, 6])

3. 计算余弦相似性

计算余弦相似性的公式为:

通过 NumPy 可以非常方便地计算余弦相似性:

dot_product = np.dot(vector1, vector2)

norm_vector1 = np.linalg.norm(vector1)

norm_vector2 = np.linalg.norm(vector2)

cosine_similarity = dot_product / (norm_vector1 * norm_vector2)

print(cosine_similarity)

二、使用 -learn 计算余弦相似性

有一种名为-learn的强大机器学习库, 它里面有能计算余弦相似性的函数, 我们能够借助它去计算向量间的余弦相似性。

1. 导入 -learn 库

首先, 要保证你已然安装了 -learn 库, 能够借助 pip 来实行安装:

pip install scikit-learn

然后在代码中导入 -learn 的 函数:

from sklearn.metrics.pAIrwise import cosine_similarity

2. 定义向量

定义两个向量:

vector1 = np.array([[1, 2, 3]])

vector2 = np.array([[4, 5, 6]])

3. 计算余弦相似性

使用 -learn 的 函数计算余弦相似性:

cosine_sim = cosine_similarity(vector1, vector2)

print(cosine_sim)

三、使用 SciPy 计算余弦相似性

SciPy是一个供科学计算使用的库, 它给出诸多高级函数, 其中涵盖计算余弦相似性的函数。我们能够借助SciPy的函数去计算余弦相似性。

1. 导入 SciPy 库

首先, 要保证你已然安装了SciPy库, 能够通过pip来做到安装:

pip install scipy

然后在代码中导入 SciPy 的 函数:

from scipy.spatial.distance import cosine

2. 定义向量

定义两个向量:

vector1 = np.array([1, 2, 3])

vector2 = np.array([4, 5, 6])

3. 计算余弦相似性

运用 SciPy 的函数去计算余弦相似性, 要留意的是, SciPy 的函数返回的乃是余弦距离, 并非余弦相似性, 所以我们得用 1 减去余弦距离从而获取余弦相似性。

cosine_distance = cosine(vector1, vector2)

cosine_similarity = 1 - cosine_distance

print(cosine_similarity)

四、余弦相似性的应用

存在广泛应用的余弦相似性, 在许许多多个不同领域里都能见到踪迹, 特别是其中文本进行分析以及推荐这一系统环境当中, 下面是一些存在具体应用情况的场景。

1. 文本相似性

于自然语言处理范畴当中, 余弦相似性常常被运用来计算文档之间的相似性情况。借助把文档呈现为词频向量的方式, 能够运用余弦相似性去衡量两个文档相契合的程度状况。这对于文档聚类以及信息检索等相关任务而言是极为有用处的。

2. 推荐系统

于推荐系统里头, 余弦相似性常常是被用于去计算那用户彼此之间或者物品相互之间所存在的相似性情况的。举例来说, 可以凭借余弦相似性来对用户有着的行为向量予以计算, 借助此计算来寻觅到跟目标用户最为相似的用户, 进而达成推荐的目的。

3. 图像相似性

在计算机视觉这个领域当中, 余弦相似性能够被用来计算图像特征向量相互之间的相似程度, 进而开展图像检索以及图像聚类等这些任务操作。

总结

那一种被称作余弦相似性的, 是用于衡量向量相似度的、极为强大的指标, 其在文本分析、推荐系统以及计算机视觉等众领域有着广泛应用。于相关方面里, 能够运用NumPy、-learn以及SciPy等库, 来便利地计算该余弦相似性。借助掌握这些方法, 便可更好地处理各类相似性计算任务。

相关问答FAQs:

如何在中导入计算余弦相似性所需的库?

想进行余弦相似性的计算, 您能够用以使用的是NumPy库且或者-learn库, 借助以下这般的命令来装上这些库:

pip install numpy scikit-learn

导入时,您可以使用以下代码:

import numpy as np from sklearn.metrics.pairwise import cosine_similarity

这样就可以开始计算余弦相似性了。

在计算余弦相似性时,如何准备数据?

通常情况下, 数据是以向量的形式而存在的, 在其中, 您能够运用NumPy数组去表示这些向量, 要保证每个向量具备相同的维度, 比如说:

vector_a = np.array([1, 2, 3]) vector_b = np.array([4, 5, 6])

您可以根据具体问题的需求,选择不同的向量。

如何在中计算两个向量的余弦相似性?

使用-learn库的函数非常简单。例如:

similarity = cosine_similarity([vector_a], [vector_b]) print(similarity)

这段代码会返回处于两个向量之间的余弦相似性值, 该值的范围是从-1到1, 而且值越向着1靠近就意味着相似度越是高。

如何处理高维数据以计算余弦相似性?

对于处于高维状态的数据来说, 可依据特定规则把此类数据贮存于一个二维数组以内, 该二维数组里的每一行均是用来代表一个向量的。借助-learn的函数呢, 能够在同一时间计算多个向量之间所存在的相似性。举例说明如下:

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) similarity_matrix = cosine_similarity(data) print(similarity_matrix)

如此一来, 您会获取到一个相似性矩阵, 它能够方便于对多个向量之间的相似度展开分析。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 18:34:44

3分钟快速上手PoeCharm:中文版流放之路构建工具终极指南

3分钟快速上手PoeCharm:中文版流放之路构建工具终极指南 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm PoeCharm是一款专为《流放之路》玩家设计的Path of Building中文版本构建工具&a…

作者头像 李华
网站建设 2026/8/5 18:32:30

文件处理高级技巧:制作图片木马与编码转换的实用方法

文件处理高级技巧:制作图片木马与编码转换的实用方法 【免费下载链接】pentestdb WEB渗透测试数据库 项目地址: https://gitcode.com/gh_mirrors/pe/pentestdb 在网络安全领域,文件处理技巧是渗透测试人员必备的核心能力之一。本文将详细介绍如何…

作者头像 李华
网站建设 2026/8/5 18:31:34

Cortex-M3:为什么需要区分“加载地址”和“执行地址”?

难度:★ 本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。 先看两个地址。 你写了一个全局变量: int g_counter = 100;用调试器查看 &g_counter,显示 0x20000000。 用 objdump 或 fromelf 查看固件,发现 100 这个初始值存在 0x08001000。 同…

作者头像 李华
网站建设 2026/8/5 18:30:13

Resource Override:网络请求拦截层的架构重构范式

Resource Override:网络请求拦截层的架构重构范式 【免费下载链接】ResourceOverride An extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content. 项目地址: https://gitcode.com/gh_mi…

作者头像 李华
网站建设 2026/8/5 18:29:12

Proxmark3终极指南:掌握RFID/NFC安全测试的完整解决方案

Proxmark3终极指南:掌握RFID/NFC安全测试的完整解决方案 【免费下载链接】proxmark3 Iceman Fork - Proxmark3 项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3 Proxmark3是一款功能强大的开源RFID/NFC安全测试工具,专为安全研究人员…

作者头像 李华