📜  如何在Python中计算余弦相似度?

📅  最后修改于: 2022-05-13 01:54:55.217000             🧑  作者: Mango

如何在Python中计算余弦相似度?

在本文中,我们计算了两个非零向量之间的余弦相似度。向量是单个二元一维信号NumPy 数组。余弦相似度是相似度的一种度量,在文本分析中常用于度量文档相似度。我们使用下面的公式来计算余弦相似度。

Similarity = (A.B) / (||A||.||B||) 

其中 A 和 B 是向量:

  • AB 是 A 和 B 的点积:它被计算为 A 和 B 的元素乘积之和。
  • ||一个||是 A 的 L2 范数:它被计算为向量 A 的元素的平方和的平方根。

示例 1:

在下面的示例中,我们计算两个向量(一维 NumPy 数组)之间的余弦相似度。要在此处定义向量,我们还可以使用Python列表。

Python
# import required libraries
import numpy as np
from numpy.linalg import norm
 
# define two lists or array
A = np.array([2,1,2,3,2,9])
B = np.array([3,4,2,4,5,5])
 
print("A:", A)
print("B:", B)
 
# compute cosine similarity
cosine = np.dot(A,B)/(norm(A)*norm(B))
print("Cosine Similarity:", cosine)


Python
# import required libraries
import numpy as np
from numpy.linalg import norm
 
# define two lists or array
A = np.array([[2,1,2],[3,2,9], [-1,2,-3]])
B = np.array([3,4,2])
print("A:\n", A)
print("B:\n", B)
 
# compute cosine similarity
cosine = np.dot(A,B)/(norm(A, axis=1)*norm(B))
print("Cosine Similarity:\n", cosine)


Python
# import required libraries
import numpy as np
from numpy.linalg import norm
 
# define two arrays
A = np.array([[1,2,2],
               [3,2,2],
               [-2,1,-3]])
B = np.array([[4,2,4],
               [2,-2,5],
               [3,4,-4]])
 
print("A:\n", A)
print("B:\n", B)
 
# compute cosine similarity
cosine = np.sum(A*B, axis=1)/(norm(A, axis=1)*norm(B, axis=1))
 
print("Cosine Similarity:\n", cosine)
print("Cosine Similarity:\n", cosine)



输出:

示例 2:

在下面的示例中,我们计算了一批三个向量(二维 NumPy 数组)和一个向量(一维 NumPy 数组)之间的余弦相似度。

Python

# import required libraries
import numpy as np
from numpy.linalg import norm
 
# define two lists or array
A = np.array([[2,1,2],[3,2,9], [-1,2,-3]])
B = np.array([3,4,2])
print("A:\n", A)
print("B:\n", B)
 
# compute cosine similarity
cosine = np.dot(A,B)/(norm(A, axis=1)*norm(B))
print("Cosine Similarity:\n", cosine)


输出:

请注意,A 有三个向量,B 是一个向量。在上面的输出中,我们得到了余弦相似度数组中的三个元素。第一个元素对应于 A 的第一个向量(第一行)和第二个向量(B)之间的余弦相似度。第二个元素对应于 A 的第二个向量(第二行)和第二个向量(B)之间的余弦相似度。第三个元素也是如此。

示例 3:

在下面的示例中,我们计算两个二维数组之间的余弦相似度。这里每个数组都有三个向量。这里使用元素乘积的 m 来计算点积。

Python

# import required libraries
import numpy as np
from numpy.linalg import norm
 
# define two arrays
A = np.array([[1,2,2],
               [3,2,2],
               [-2,1,-3]])
B = np.array([[4,2,4],
               [2,-2,5],
               [3,4,-4]])
 
print("A:\n", A)
print("B:\n", B)
 
# compute cosine similarity
cosine = np.sum(A*B, axis=1)/(norm(A, axis=1)*norm(B, axis=1))
 
print("Cosine Similarity:\n", cosine)
print("Cosine Similarity:\n", cosine)

输出:

余弦相似度数组的第一个元素是 A 和 B 的第一行之间的相似度。类似地,第二个元素是 A 和 B 的第二行之间的余弦相似度。对于第三个元素也是如此。