余弦相似度的理解和实现


前言

在学习数学建模的内容的时候,学习并了解到了余弦相似度这一部分内容,在这里进行一个分享


一、余弦相似度是什么?

余弦相似度是判断两个变量之间的关系的一种方法
我们可以根据余弦相似度的含义画出如下图像
在这里插入图片描述
我们可以看到向量 a a a b b b之间存在一个夹角

  • 若两个向量值之间的夹角越小,就说明两个向量有较强的相似性,在极端得到两个向量的值是相等的
  • 还有一种情况就是 a a a b b b的夹角是大于 90 90 90度的,这就表明该两个向量是刚好负相关的,也就是负相似
  • a a a b b b的夹角恰好等于 90 90 90度,表示两个向量值完全不相关
    我们可以更与余弦公式得到如下式子:
    cos ⁡ ( θ ) = ∑ i = 1 n ( x i × y i ) ∑ i = 1 n ( x i ) 2 × ∑ i = 1 n ( y i ) 2    = a ⋅ b ∣ ∣ a ∣ ∣ × ∣ ∣ b ∣ ∣ \cos \left( \theta \right) =\frac{\sum_{i=1}^n{\left( x_i\times y_i \right)}}{\sqrt{\sum_{i=1}^n{\left( x_i \right) ^2}}\times \sqrt{\sum_{i=1}^n{\left( y_i \right) ^2}}} \\ \,\, =\frac{a\cdot b}{||a||\times ||b||} cos(θ)=i=1n(xi)2 ×i=1n(yi)2 i=1n(xi×yi)=∣∣a∣∣×∣∣b∣∣ab

二、操作步骤

1.具体实现

代码如下(示例):

#余弦相似度
import pandas as pd
import numpy as np
from numpy.linalg import norm
X=np.random.random((4,2))
Y=np.random.random((5,2))
C=np.dot(X,np.transpose(Y))/(norm(X)*norm(Y))
C

2.得出结果

因为是设置了随机数,所以每次运行处理出来的结果可能不一样

array([[0.14788162, 0.18879034, 0.18509333, 0.09146902, 0.19443364],
       [0.081497  , 0.12903919, 0.12898972, 0.05616926, 0.11422284],
       [0.2490191 , 0.24689625, 0.23502376, 0.13766032, 0.30732159],
       [0.23183351, 0.27200703, 0.26430589, 0.13787399, 0.29803554]])

总结

主要是根据两个向量之间的值的大小,计算其夹角的余弦的大小,查看两个向量之间的关系,若两个值越是垂直,那么说明两个值之间的关系越小,其实这就和计算cov是十分类似的

参考文章

基于python计算余弦相似度
相似度算法之余弦相似度
原创不易,侵权必究

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MTALB是一种数学计算软件,用于实现各种算法,包括计算一维数组的余弦相似度和Pearson相关系数。余弦相似度主要用于评估两个向量之间的相似度,Pearson相关系数则用于衡量两个变量之间的线性关系强度和方向。但是,这两种指标在衡量一维数组时的结果却是反的。 首先,要理解余弦相似度和Pearson相关系数的计算方法余弦相似度是通过计算两个向量之间的夹角余弦值来衡量相似度的。如果两个向量的夹角越小,余弦值越接近于1,表示它们之间越相似。而Pearson相关系数则是通过计算两个变量之间的协方差和各自标准差的乘积之比来计算的。如果两个变量之间是线性相关的,Pearson相关系数会接近于1,表示它们之间的关系越强。 对于一维数组,余弦相似度的计算方法是可以直接使用的。但是,Pearson相关系数的计算方法需要对数组做一些变换。因为数组中的数据并不是变量,而是具体的观测值,所以需要将数组中的值转化为变量,然后计算相关系数。这个转化会导致两个变量之间的相关性呈现反向关系,也就是说,当余弦相似度越高时,Pearson相关系数越低,反之亦然。 因此,当我们比较两个一维数组的相似度时,需要根据具体情况选择使用余弦相似度还是Pearson相关系数。如果我们想衡量两个数组之间的相似程度,可以使用余弦相似度;如果我们想衡量它们之间的关系强度和方向,可以使用Pearson相关系数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值