首页 > 其他分享 >余弦相似性的应用

余弦相似性的应用

时间:2023-05-17 11:45:43浏览次数:45  
标签:similarity 余弦 np cosine 应用 相似性 向量

余弦相似性

介绍

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间

cosine_similarity是一种度量两个非零向量之间夹角的相似性的方法。它的计算方法如下:

\(cosine\_similarity(A, B) = (A·B) / ||A||*||B||\)

其中:

\(A·B\)表示向量A和向量B对应位置上的元素乘积之和,也可以写成\(sum(Ai * Bi)\),即A和B的点积。

\(||A||\)表示向量A的模(长度),也可以写成\(sqrt(sum(Ai^2))\)。

cosine_similarity的取值范围为-1到1之间,当\(cosine_similarity(A, B)\)等于1时,表示向量\(A\)和\(B\)方向重合;当\(cosine\_similarity(A, B)\)等于-1时,表示向量A和B方向相反;当\(cosine\_similarity(A, B)\)等于0时,表示向量A和B方向垂直。

cosine_similarity常用于文本相似度的计算。在文本中,向量通常是一组词语的词向量,通过计算这些词向量的余弦相似度来评估文本之间的相似度。

两个向量间的余弦值可以通过使用欧几里得点积公式求出:

img

给定两个属性向量,AB,其余弦相似性θ由点积和向量长度给出,如下所示:

img

这里的\(A_i, B_i\)分别代表向量A和B的各分量

给出的相似性范围从-1到1:-1意味着两个向量指向的方向正好截然相反,1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中间的相似性或相异性。

对于文本匹配,属性向量AB通常是文档中的词频向量。余弦相似性,可以被看作是在比较过程中把文件长度正规化的方法。

image

代码实现

使用numpy计算余弦相似度

在Python中,可以使用NumPy库来计算cosine similarity。以下是用Python实现cosine similarity的代码:

import numpy as np

def cosine_similarity(a, b):
    """
    计算向量a和向量b之间的cosine similarity
    """
    # 计算分子
    numerator = np.dot(a, b)
    
    # 计算分母
    denominator = np.linalg.norm(a) * np.linalg.norm(b)
    
    # 计算cosine similarity
    similarity = numerator / denominator
    
    return similarity

其中,a和b是两个一维numpy数组,分别表示向量A和向量B。实际使用时,可以调用cosine_similarity函数并传入两个向量,例如:

a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
similarity = cosine_similarity(a, b)
print(similarity)

输出结果为:

0.9925833339709303

这表示向量a和向量b之间的cosine similarity约为0.992。

使用sklearn

sklearn(Scikit-learn)库也提供了cosine_similarity的API,可以直接使用。以下是使用sklearn计算cosine_similarity的示例代码:

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

# 定义两个向量
a = pd.DataFrame(data=[[1, 2, 3]])
b = pd.DataFrame(data=[[2, 3, 4]])

# 计算cosine similarity矩阵
similarity_matrix = cosine_similarity(a, b)

# 输出结果  去对角线
print(np.diag(similarity_matrix))

这段代码将向量a和b组合成一个2行3列的矩阵,然后利用cosine_similarity函数计算出它们之间的cosine similarity矩阵。输出结果为:

[[1.         0.99258333]
 [0.99258333 1.        ]]

分析输出结果可知,矩阵的对角线上的值都是1,表示向量与其自身之间的cosine similarity为1;矩阵的两个非对角线上的值都是0.99258333,表示向量a和向量b之间的cosine similarity。

标签:similarity,余弦,np,cosine,应用,相似性,向量
From: https://www.cnblogs.com/itelephant/p/17408131.html

相关文章

  • 利用卷积神经网络实现人脸识别的应用
    ​ 利用卷积神经网络实现人脸识别的应用是一个热门的研究领域,它可以在安全、娱乐、医疗等方面发挥重要作用。卷积神经网络是一种深度学习模型,它可以从图像中提取高层次的特征,并通过分类器来判断图像中是否存在人脸,以及人脸属于哪个人。本文介绍了一种基于卷积神经网络的人脸识别......
  • Spring Statemachine应用实践
     前言 在日常开发中经常遇到运营审核经销商活动、任务等等类似业务需求,大部分需求中状态稳定且单一无需使用状态机,但是也会出现大量的if...else前置状态代码,也是不够那么的“优雅”。随着业务的发展、需求迭代,每一次的业务代码改动都需要维护使用到状态的代码,更......
  • 哈希表简单应用—两数之和
    这是一个简单题,本质上直接暴力求解也可以了。但是主要记录下哈希表的应用。给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不......
  • 【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Rest
    问题描述介绍了使用PythonSDK来获取AppService的访问限制信息,那么如何调用RESTAPI来实现呢? 问题解答如大家所知,Azure不管是SDK,门户UI,或者是PowerShell命令方式对Azure中资源进行操作,都是通过RESTAPI方式处理请求。所以,如果不知道当前操作使用的是一个接口时,最简单的方法是......
  • 7.ansible之playbook应用案例02
    1.Playbook应用案例之用户编写playbook创建系统账户、账户属性、设置密码[root@db04ansible]#cattest_john.yml----hosts:testtasks:-name:Addtheuser'johnd'user:name:johndgroup:1002password:"{{'123'|......
  • 用嵌入式sqlite部署winform应用程序
    EmbeddedResource表示数据库已嵌入到您的dll中。Copytooutputdirectory设置在这种情况下不适用,它用于BuildAction:Content嵌入数据库后,您基本上必须在首次使用时将其取消嵌入。为此,将其从Assembly中读取并将其存储到文件中。classEmbeddedResourceTest{publicsta......
  • Flutter 3.1亮点功能介绍,加持移动应用高效开发
    2023年的GoogleI/O大会上,简直能用“亮瞎了眼”来形容:非常多的技术大版本更新,尤其是AI领域技术融合到了办公协同软件中来,以进一步提高蓝领、白领的工作效率,为企业降本增效。Flutter3.10版本的变化1、Dart3众所周知,Flutter是建立在Dart语言基础上的,本次大会上,Dart发布了一......
  • 【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
    问题描述AppService上部署的Java应用,连接 AzureDatabaseforMySQL失败。错误信息:Createconnectionerror,url:jdbc:mysql://.......................communicationslinkfailure. 问题解答应用的错误信息提示为:与MySQL数据库建立连接失败。所以需要考虑如下几种......
  • 关于 Web 应用的 Prerender 策略
    对于一些小型Web应用程序而言,强制使用服务器渲染(Serversiderender)可能会成为一种障碍。这时,预渲染可能是一个非常好的替代选择。Prerender的一种解决方案是使用Preact及其自己的CLI.它允许您编译所有预先选择的路由,以便将完全填充的HTML文件存储到静态服务器上。这......
  • 使用 SAP Fiori Tools 提供的中间件导入本地下载的 SAP UI5 库文件来启动 SAP UI5 应
    本教程第100个步骤,笔者介绍了如何使用本地部署的SAPUI5库文件来运行SAPUI5应用的技巧:SAPUI5应用开发教程之一百-如何修改SAPUI5框架的源代码实现,以及使用本地部署的SAPUI5SDK我们简单回顾一下这种方法的实现步骤:从SAPUI5官网将我们想使用的SAPUI5SDK......