余弦相似度是一种衡量两个向量之间相似度的方法,它通过计算两个向量夹角的余弦值来实现。余弦相似度的值范围在-1到1之间,1表示两个向量完全相同,-1表示两个向量完全相反,0表示两个向量正交(即无关)。
在文本处理和信息检索中,余弦相似度常用于比较文档的向量表示,以确定它们之间的相似性。下面是如何计算余弦相似度的详细步骤和Python代码示例。
计算步骤
- 向量标准化:确保两个向量的长度相同。
- 计算点积:两个向量的点积是它们对应元素乘积的和。
- 计算向量的模:向量的模是向量各元素平方和的平方根。
- 计算余弦相似度:余弦相似度等于两个向量的点积除以两个向量模的乘积。
数学公式
给定向量 ( A ) 和 ( B ),它们的余弦相似度 ( \text{cosine_similarity}(A, B) ) 计算公式如下:
[ \text{cosine_similarity}(A, B) = \frac{A \cdot B}{|A| |B|} ]
其中:
- ( A \cdot B ) 是向量 ( A ) 和 ( B ) 的点积。
- ( |A| ) 是向量 ( A ) 的模。
- ( |B| ) 是向量 ( B ) 的模。
Python代码示例
下面是一个使用Python计算余弦相似度的示例代码:
import numpy as np
def cosine_similarity(A, B):
"""
计算两个向量A和B的余弦相似度
:param A: 向量A,列表或numpy数组
:param B: 向量B,列表或numpy数组
:return: 余弦相似度值
"""
# 将输入转换为numpy数组
A = np.array(A)
B = np.array(B)
# 计算点积
dot_product = np.dot(A, B)
# 计算向量的模
norm_A = np.linalg.norm(A)
norm_B = np.linalg.norm(B)
# 计算余弦相似度
cosine_sim = dot_product / (norm_A * norm_B)
return cosine_sim
# 示例向量
vector_A = [1, 2, 3]
vector_B = [4, 5, 6]
# 计算余弦相似度
similarity = cosine_similarity(vector_A, vector_B)
print(f"余弦相似度: {similarity}")
解释
- 导入numpy库:用于数组操作和数学计算。
- 定义
cosine_similarity
函数:接受两个向量作为输入,返回它们的余弦相似度。 - 将输入转换为numpy数组:确保输入可以进行向量运算。
- 计算点积:使用
np.dot
函数计算两个向量的点积。 - 计算向量的模:使用
np.linalg.norm
函数计算向量的模。 - 计算余弦相似度:根据公式计算余弦相似度。
- 示例向量:定义两个示例向量
vector_A
和vector_B
。 - 调用函数并打印结果:计算并打印两个向量的余弦相似度。
通过这种方式,您可以轻松计算两个向量之间的余弦相似度,并在各种应用中使用这一度量来比较和分析数据。