📜  余弦相似度(1)

📅  最后修改于: 2023-12-03 14:49:34.061000             🧑  作者: Mango

余弦相似度

余弦相似度是一种衡量两个向量间相似度的方法,它将向量空间中的两个向量进行比较,并给出它们之间的相似度。在自然语言处理、信息检索、数据挖掘等领域中都得到了广泛应用。

算法原理

假设有两个向量 $A$ 和 $B$,它们的维度分别为 $n$,则余弦相似度 $\mathrm{similarity}$ 的计算方法如下:

$$ \mathrm{similarity}(A,B) = \frac{A \cdot B}{|A| |B|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}} $$

其中 $\cdot$ 表示向量点积,$| \cdot |$ 则表示向量的模长。

应用场景

余弦相似度广泛应用在以下领域:

自然语言处理

在自然语言处理中,余弦相似度常用于衡量两段文本之间的相似度。例如,在搜索引擎中,用户输入的查询语句可以看作一个向量,而页面中的文档也可以看作一个向量,通过计算它们之间的余弦相似度可以得到和查询语句最为相似的文档。

推荐系统

在推荐系统中,余弦相似度可以用于计算用户之间的相似度或者计算物品之间的相似度。例如,在一个音乐推荐系统中,可以将用户听过的歌曲看作一个向量,通过计算不同用户之间的向量之间的余弦相似度,推荐那些和用户听歌历史相似的歌曲。

代码实现

下面给出 Python 代码实现余弦相似度:

import numpy as np
 
def cosine_similarity(A, B):
    # 计算向量A和B的余弦相似度
    numerator = np.dot(A, B)  # 分子
    denominator = np.linalg.norm(A) * np.linalg.norm(B)  # 分母
    return numerator / denominator

其中 np.dot() 函数表示向量点积,np.linalg.norm() 函数表示向量的模长。