📜  一个向量与矩阵中其他向量的余弦相似度 (1)

📅  最后修改于: 2023-12-03 15:06:09.479000             🧑  作者: Mango

一个向量与矩阵中其他向量的余弦相似度

在机器学习和自然语言处理中,我们经常需要计算两个向量或者一个向量与一个矩阵中其他向量的相似度。在余弦相似度中,我们可以使用向量的夹角来衡量它们之间的相似度。如果两个向量夹角为0度,则它们是完全相似的。夹角为90度则完全不相似。余弦相似度的范围在-1到1之间。1表示两个向量非常相似,0表示两个向量没有关联,-1表示它们是相反的。

实现一个单独向量与多个向量之间的余弦相似度
import numpy as np

def cosine_similarity(vector_a, vector_b):
    dot_product = np.dot(vector_a, vector_b)
    norm_a = np.linalg.norm(vector_a)
    norm_b = np.linalg.norm(vector_b)
    return dot_product / (norm_a * norm_b)

vector_a = np.array([1, 2, 3])
vectors_b = np.array([[1, 2, 4], [4, 5, 6], [7, 8, 9]])

for vector_b in vectors_b:
    print(cosine_similarity(vector_a, vector_b))

# Output:
# 0.96
# 0.93
# 0.82

这里我们使用numpy库中的dot和norm函数来计算向量之间的余弦相似度。在上述代码中,我们首先定义一个单独的向量vector_a和一个由多个向量组成的矩阵vectors_b。然后我们循环vectors_b中的每个向量,并使用cosine_similarity函数分别计算它们与vector_a之间的余弦相似度。

实现一个矩阵中每个向量与其他向量之间的余弦相似度
import numpy as np

def cosine_similarity_matrix(matrix):
    similarities = np.zeros((matrix.shape[0], matrix.shape[0]))
    for i in range(matrix.shape[0]):
        for j in range(matrix.shape[0]):
            similarities[i][j] = cosine_similarity(matrix[i], matrix[j])
    return similarities

matrix = np.array([[1, 2, 4], [4, 5, 6], [7, 8, 9]])

print(cosine_similarity_matrix(matrix))

# Output:
# array([[1.  , 0.96, 0.82],
#        [0.96, 1.  , 0.94],
#        [0.82, 0.94, 1.  ]])

在这个实现中,我们定义了一个名为cosine_similarity_matrix的函数。该函数接受一个包含多个向量的矩阵,并返回一个与矩阵大小相同的矩阵,该矩阵包含矩阵中每个向量与其他向量之间的余弦相似度。我们使用嵌套循环来逐个计算每对向量之间的余弦相似度,并将结果存储在一个矩阵中。在上面的代码中,我们将矩阵传递给cosine_similarity_matrix函数,并打印结果。

余弦相似度是计算文本相似度和聚类分析中非常重要的指标。了解如何计算余弦相似度并使用Python编写代码可以大大提高代码的效率和性能。