两个向量的余弦相似度如何计算

两个向量的余弦相似度是通过测量两个向量在方向上的相似性来计算的。它是向量空间中两个向量夹角的余弦值。如果两个向量的方向相同,它们的余弦相似度接近1;如果两个向量的方向完全相反,它们的余弦相似度接近-1;如果两个向量正交,则它们的余弦相似度为0。
给定两个向量 A 和 B,它们的余弦相似度可以通过以下公式计算:
\[ \text{余弦相似度}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} \]
其中:
- \( A \cdot B \) 表示向量 A 和向量 B 的点积(内积)。
- \( \|A\| \) 表示向量 A 的欧几里得范数(即长度)。
- \( \|B\| \) 表示向量 B 的欧几里得范数。
点积 \( A \cdot B \) 可以这样计算:
\[ A \cdot B = \sum_{i=1}^{n} A_i B_i \]
向量的欧几里得范数是这样计算的:
\[ \|A\| = \sqrt{\sum_{i=1}^{n} A_i^2} \]
\[ \|B\| = \sqrt{\sum_{i=1}^{n} B_i^2} \]
因此,计算两个向量 A 和 B 的余弦相似度的步骤如下:
1. 计算向量 A 和 B 的点积。
2. 分别计算向量 A 和 B 的欧几里得范数。
3. 将点积除以两个向量范数的乘积。
以下是具体的计算步骤:
假设向量 A 和 B 如下:
\[ A = [A_1, A_2, ..., A_n] \]
\[ B = [B_1, B_2, ..., B_n] \]
步骤 1: 计算点积
\[ A \cdot B = A_1B_1 + A_2B_2 + ... + A_nB_n \]
步骤 2: 计算范数
\[ \|A\| = \sqrt{A_1^2 + A_2^2 + ... + A_n^2} \]
\[ \|B\| = \sqrt{B_1^2 + B_2^2 + ... + B_n^2} \]
步骤 3: 计算余弦相似度
\[ \text{余弦相似度}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} \]
注意,在计算过程中,如果分母为零(即其中一个向量为零向量),则余弦相似度没有定义。在实际应用中,通常需要处理这种情况,以避免除以零的错误。


例子:向量[2,3,4]与向量[5,5,6]和[2,3,4]与向量[7,7,8],哪个余弦相似度更接近?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定义向量
A = np.array([2, 3, 4])
B1 = np.array([5, 5, 6])
B2 = np.array([7, 7, 8])
# 创建三维坐标图
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# 绘制向量
ax.quiver(0, 0, 0, A[0], A[1], A[2], color='red', arrow_length_ratio=0.1, label='向量 A [2,3,4]')
ax.quiver(0, 0, 0, B1[0], B1[1], B1[2], color='blue', arrow_length_ratio=0.1, label='向量 B1 [5,5,6]')
ax.quiver(0, 0, 0, B2[0], B2[1], B2[2], color='green', arrow_length_ratio=0.1, label='向量 B2 [7,7,8]')
# 设置坐标轴标签和标题
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('三维坐标系中的向量')
# 显示图例
ax.legend()
# 显示图形
plt.show()


这是三维坐标系中向量 [2,3,4](红色),向量 [5,5,6](蓝色)和向量 [7,7,8](绿色)的示意图。每个向量的起点都在原点 (0,0,0),箭头指向了向量的终点。通过这个图,你可以直观地看到这三个向量在三维空间中的方向和相对位置。

当然可以。以下是计算向量 [2,3,4] 与向量 [5,5,6] 和 [7,7,8] 的余弦相似度的详细步骤。
### 向量 [2,3,4] 与向量 [5,5,6]
#### 步骤 1: 计算点积
\[ A \cdot B1 = 2 \times 5 + 3 \times 5 + 4 \times 6 = 10 + 15 + 24 = 49 \]
#### 步骤 2: 计算范数
\[ \|A\| = \sqrt{2^2 + 3^2 + 4^2} = \sqrt{4 + 9 + 16} = \sqrt{29} \]
\[ \|B1\| = \sqrt{5^2 + 5^2 + 6^2} = \sqrt{25 + 25 + 36} = \sqrt{86} \]
#### 步骤 3: 计算余弦相似度
\[ \text{余弦相似度}(A, B1) = \frac{49}{\sqrt{29} \times \sqrt{86}} \approx 0.981 \]
### 向量 [2,3,4] 与向量 [7,7,8]
#### 步骤 1: 计算点积
\[ A \cdot B2 = 2 \times 7 + 3 \times 7 + 4 \times 8 = 14 + 21 + 32 = 67 \]
#### 步骤 2: 计算范数
(范数与之前相同)
\[ \|A\| = \sqrt{29} \]
\[ \|B2\| = \sqrt{7^2 + 7^2 + 8^2} = \sqrt{49 + 49 + 64} = \sqrt{162} \]
#### 步骤 3: 计算余弦相似度
\[ \text{余弦相似度}(A, B2) = \frac{67}{\sqrt{29} \times \sqrt{162}} \approx 0.978 \]
这样,我们得到了两个余弦相似度的值,分别为约 0.981 和 0.978。
 

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨航 AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值