余弦相似度的理解和实现


前言

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


一、余弦相似度是什么?

余弦相似度是判断两个变量之间的关系的一种方法
我们可以根据余弦相似度的含义画出如下图像
在这里插入图片描述
我们可以看到向量 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计算余弦相似度
相似度算法之余弦相似度
原创不易,侵权必究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值