余弦相似度是一种用来确定两个向量之间相似性的度量。它在数据科学、信息检索和自然语言处理(NLP)等多个领域被广泛使用,用于度量在多维空间中两个向量之间角度的余弦。这个指标捕捉的是方向上的相似性而非大小,使其非常适合比较长度不同或需要归一化的文档或向量。
定义
余弦相似度使用两个向量的点积及各自向量的大小来计算。余弦相似度的公式是:
其中:
- A 和 B 是您正在计算相似度的两个向量。
- A⋅B 是向量 A 和 B 的点积。
- ∥A∥ 和 ∥B∥ 分别是向量 A 和 B 的欧几里得范数(或大小)。
属性
-
范围:余弦相似度的值范围从 -1 到 1。
- 1 表示两个向量在方向上完全相同。
- 0 表示正交(无相似性)。
- -1 表示两个向量方向完全相反。
-
规模不变性:余弦相似度对乘以常数(规模不变)是不变的。这在比较不同规模的出现频率时特别有用。
简单例子:
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# 定义两个向量
vector_a = np.array([[1, 2, 3]])
vector_b = np.array([[4, 5, 6]])
# 计算余弦相似度
similarity = cosine_similarity(vector_a, vector_b)
print("余弦相似度:", similarity[0][0])
我们下面从视觉化的角度,感觉Cosin Simiarity。
首先,我们定义三个向量,并且将它们显示在二维坐标系中。
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
A = [1, 4]
B = [3, 3]
C = [2, 3]
#colors数组为每个向量定义颜色,以便视觉区分。
colors = ['r', 'g', 'b']
#V是从向量A、B和C创建的NumPy数组。
V = np.array([A, B, C])
#向量的起点设置为一个2x3的全零数组。这允许所有向量都从点(0, 0)开始。
origin = np.array([[0, 0, 0],[0, 0, 0]]) # origin point
plt.figure(figsize=(9, 9))
#使用plt.quiver函数绘制向量。参数确保向量从x和y方向的原点绘制。scale_units='xy'和scale=1确保
#向量在x和y方向上按1:1的比例绘制。
plt.quiver(*origin, V[:,0], V[:,1], color=colors, angles='xy', scale_units='xy', scale=1)
for lett