Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >余弦相似度简单介绍

余弦相似度简单介绍

作者头像
jack.yang
发布于 2025-04-05 13:25:29
发布于 2025-04-05 13:25:29
10300
代码可运行
举报
运行总次数:0
代码可运行

余弦相似度原理

余弦相似度是一种衡量两个向量之间相似性的方法,它基于向量之间的夹角余弦值来计算。在文本挖掘、推荐系统等领域,余弦相似度被广泛应用来度量文档、用户偏好等对象之间的相似性。

定义

余弦相似度通过计算两个向量之间的夹角余弦值来衡量它们的相似性。余弦值越接近1,夹角越小,说明两个向量越相似;余弦值越接近-1,夹角越大,说明两个向量越不相似;余弦值为0时,两个向量正交,表示它们之间没有相关性。

引伸义

余弦相似度在推荐系统、文本分类、信息检索等领域有广泛应用。例如,在推荐系统中,可以通过计算用户的历史偏好向量和物品特征向量之间的余弦相似度,来推荐与用户兴趣最相似的物品。

数据分析

数据准备:首先,我们需要准备两个向量,这些向量可以代表文本、用户偏好、物品特征等。例如,我们有两个用户U1和U2的评分向量,分别表示他们对不同物品的评分。 U1: [5, 3, 0, 1, 4] U2: [4, 2, 1, 0, 5] 计算点积:然后,我们计算这两个向量的点积。 A = [5, 3, 0, 1, 4] B = [4, 2, 1, 0, 5] A ⋅ B = 5*4 + 3*2 + 0*1 + 1*0 + 4*5 = 20 + 6 + 0 + 0 + 20 = 46 计算模长:接下来,我们分别计算这两个向量的模长。 ||A|| = √(5^2 + 3^2 + 0^2 + 1^2 + 4^2) = √(25 + 9 + 0 + 1 + 16) = √51 ||B|| = √(4^2 + 2^2 + 1^2 + 0^2 + 5^2) = √(16 + 4 + 1 + 0 + 25) = √46 计算余弦相似度:最后,我们用点积除以两个向量模长的乘积,得到余弦相似度。 Cosine Similarity = (A ⋅ B) / (||A|| * ||B||) = 46 / (√51 * √46) ≈ 0.976

Java示例代码

当使用Java来计算两个向量之间的余弦相似度时,你需要确保两个向量的长度是相同的。以下是一个简单的Java示例代码,用于计算两个double数组(表示向量)之间的余弦相似度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CosineSimilarityCalculator {

/**
* 计算两个向量的余弦相似度
*
* @param vectorA 第一个向量
* @param vectorB 第二个向量
* @return 余弦相似度
* @throws IllegalArgumentException 如果两个向量的长度不同
*/
public static double cosineSimilarity(double[] vectorA, double[] vectorB) {
if (vectorA.length != vectorB.length) {
throw new IllegalArgumentException("两个向量的长度必须相同");
}

double dotProduct = 0.0;
double normA = 0.0;
double normB = 0.0;

// 计算点积
for (int i = 0; i < vectorA.length; i++) {
dotProduct += vectorA[i] * vectorB[i];
normA += Math.pow(vectorA[i], 2);
normB += Math.pow(vectorB[i], 2);
}

// 计算模长
double magnitudeA = Math.sqrt(normA);
double magnitudeB = Math.sqrt(normB);

// 防止除以0
if (magnitudeA == 0 || magnitudeB == 0) {
return 0.0; // 如果其中一个向量为零向量,则余弦相似度为0
}

// 计算余弦相似度
return dotProduct / (magnitudeA * magnitudeB);
}

public static void main(String[] args) {
double[] vectorA = {5, 3, 0, 1, 4};
double[] vectorB = {4, 2, 1, 0, 5};

try {
double similarity = cosineSimilarity(vectorA, vectorB);
System.out.println("Cosine Similarity: " + similarity);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}

在这个示例中,cosineSimilarity 方法接受两个 double 数组作为参数,并返回它们的余弦相似度。如果两个向量的长度不同,它将抛出一个 IllegalArgumentException。在 main 方法中,我们创建了两个示例向量,并调用了 cosineSimilarity 方法来计算并打印它们的余弦相似度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
余弦相似度(Cosine Similarity)
余弦相似度是一种衡量两个向量之间相似性的方法,它基于向量之间的夹角余弦值来计算。在文本挖掘、推荐系统等领域,余弦相似度被广泛应用来度量文档、用户偏好等对象之间的相似性。
jack.yang
2025/04/05
3040
余弦相似度(Cosine Similarity)
修正余弦相似度(Adjusted Cosine Similarity)
修正余弦相似度(Adjusted Cosine Similarity)是一种在文本挖掘和信息检索中常用的相似度计算方法,它是对余弦相似度的一种改进。传统的余弦相似度在计算时,只考虑了向量中各个维度的数值,而没有考虑到可能的均值偏移(mean offset)。修正余弦相似度试图通过移除均值来修正这一点。
jack.yang
2025/04/05
1500
修正余弦相似度(Adjusted Cosine Similarity)
相似度计算——余弦相似度
余弦相似度是利用两个向量之间的夹角的余弦值来衡量两个向量之间的相似度,这个值的范围在-1到1之间。
鳄鱼儿
2024/05/21
7620
相似度计算——余弦相似度
Look! 跨模态对齐与跨领域学习
在人工智能的研究中,如何使不同模态的数据(如图像、文本、音频等)以及不同领域的数据(如不同风格的图像或不同语言的文本)在共享的表示空间中进行有效的对齐,是一个极具挑战性的课题。随着深度学习的发展,跨模态对齐和跨领域学习成为了多个领域中重要的研究方向,特别是多模态融合、迁移学习、自然语言处理、计算机视觉等。
用户11289931
2024/10/20
4650
推荐算法在商城系统实践
本文博主给大家讲解如何在自己开源的电商项目newbee-mall-pro中应用协同过滤算法来达到给用户更好的购物体验效果。
wayn
2023/04/09
1.9K0
推荐算法在商城系统实践
皮尔逊相关系数(PPMCC或PCC)与余弦相似度(Cosine Similarity)
皮尔逊相关系数(Pearson Correlation Coefficient),也称为皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称PPMCC或PCC),是衡量两个连续变量之间线性相关程度的统计量。它的值域是-1到1之间,其中1表示完全正相关,-1表示完全负相关,而0则表示没有线性相关。
jack.yang
2025/04/05
2550
TF-IDF与余弦相似度
在将文本分词并向量化后,我们可以得到词汇表中每个词在各个文本中形成的词向量,我们将下面4个短文本做了词频统计:
Coggle数据科学
2019/09/12
2.6K0
java实现Word2Vec计算语义相似度,AI入门,附源码,分步骤详细注释版
源码以及预训练文件比较大 下载地址https://pan.quark.cn/s/aeb85eaf95e2
用户3992092
2024/08/12
4720
AIGC - 入门向量空间模型
向量和标量最大的区别在于,向量除了拥有数值的大小,还拥有方向。向量或者矢量中的“向”和“矢”这两个字,都表明它们是有方向的。
小小工匠
2023/10/23
2940
AIGC - 入门向量空间模型
AI 驱动的个性化推荐系统设计
文章链接:https://cloud.tencent.com/developer/article/2469020
Swift社区
2024/11/25
4030
AI 驱动的个性化推荐系统设计
简单易学的机器学习算法——协同过滤推荐算法(2)
一、基于协同过滤的推荐系统     协同过滤(Collaborative Filtering)的推荐系统的原理是通过将用户和其他用户的数据进行比对来实现推荐的。比对的具体方法就是通过计算两个用户数据之间的相似性,通过相似性的计算来说明两个用户数据之间的相似程度。相似度函数的设计必须满足度量空间的三点要求,即非负性,对称性和三角不等性。常用的相似度的计算方法有:欧式距离法、皮尔逊相关系数法和夹角余弦相似度法。具体的可以参见上一篇文章“协同过滤推荐算法(1) ”。 二、面临的问题     在基本的协同过滤的推荐
felixzhao
2018/03/15
6140
简单易学的机器学习算法——协同过滤推荐算法(2)
常用的相似度度量总结:余弦相似度,点积,L1,L2
相似性度量在机器学习中起着至关重要的作用。这些度量以数学方式量化对象、数据点或向量之间的相似性。理解向量空间中的相似性概念并采用适当的度量是解决广泛的现实世界问题的基础。本文将介绍几种常用的用来计算两个向量在嵌入空间中的接近程度的相似性度量。
deephub
2023/10/10
2.7K0
常用的相似度度量总结:余弦相似度,点积,L1,L2
余弦相似度可能没用?对于某些线性模型,相似度甚至不唯一
在机器学习和数据科学领域,余弦相似度长期以来一直是衡量高维对象之间语义相似度的首选指标。余弦相似度已广泛应用于从推荐系统到自然语言处理的各种应用中。它的流行源于人们相信它捕获了嵌入向量之间的方向对齐,提供了比简单点积更有意义的相似性度量。
机器之心
2025/02/03
1210
余弦相似度可能没用?对于某些线性模型,相似度甚至不唯一
简单易学的机器学习算法——协同过滤推荐算法(1)
一、推荐系统的概念     推荐系统(Recommendation System, RS),简单来说就是根据用户的日常行为,自动预测用户的喜好,为用户提供更多完善的服务。举个简单的例子,在京东商城,我
felixzhao
2018/03/15
1K0
简单易学的机器学习算法——协同过滤推荐算法(1)
使用AVX2指令集加速推荐系统MMR层余弦相似度计算
前一段时间公司上线了一套Go实现的推荐系统,上线后发现MMR层虽然只有纯计算但耗时十分离谱,通过pprof定位问题所在之后进行了优化,虽然降低了非常多但是我们认为其中还有优化空间。
Orlion
2024/10/11
1690
使用AVX2指令集加速推荐系统MMR层余弦相似度计算
简单易学的机器学习算法——协同过滤推荐算法(1)
    推荐系统(Recommendation System, RS),简单来说就是根据用户的日常行为,自动预测用户的喜好,为用户提供更多完善的服务。举个简单的例子,在京东商城,我们浏览一本书之后,系统会为我们推荐购买了这本书的其他用户购买的其他的书:
felixzhao
2019/02/13
5590
文本分析 | 词频与余弦相似度
这个系列打算以文本相似度为切入点,逐步介绍一些文本分析的干货,包括分词、词频、词频向量、文本匹配等等。 上一期,我们介绍了文本相似度的概念,通过计算两段文本的相似度,我们可以: 对垃圾文本(比如小广告)进行批量屏蔽; 对大量重复信息(比如新闻)进行删减; 对感兴趣的相似文章进行推荐,等等。 那么如何计算两段文本之间的相似程度?上一篇我们简单介绍了夹角余弦这个算法,其思想是: 将两段文本变成两个可爱的小向量; 计算这两个向量的夹角余弦cos(θ): 夹角余弦为1,也即夹角为0°,两个小向量无缝合体,则相似度
数说君
2018/04/04
1.9K0
文本分析 | 词频与余弦相似度
LintCode 余弦相似度题目分析代码
给你两个相同大小的向量 A B,求出他们的余弦相似度 返回2.0000 如果余弦相似不合法 (比如 A = [0] B = [0]).
desperate633
2018/08/22
4780
LintCode 余弦相似度题目分析代码
Springboot+vue.js+协同过滤推荐+余弦相似度算法实现新闻推荐系统
针对海量的新闻资讯数据,如何快速的根据用户的检索需要,完成符合用户阅读需求的新闻资讯推荐?本篇文章主要采用余弦相似度及基于用户协同过滤算法实现新闻推荐,通过余弦相似度算法完成针对不同新闻数据之间的相似性计算,实现分类标签。通过协同过滤算法发现具备相似阅读习惯的用户,展开个性化推荐。
计算机程序优异哥
2022/05/18
8360
基于用户的协同过滤(余弦相似度)
原文:https://blog.csdn.net/weixin_44510615/article/details/89021205
润森
2020/02/27
2.8K0
推荐阅读
相关推荐
余弦相似度(Cosine Similarity)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验