如何在Python中计算余弦相似度
在这篇文章中,我们计算两个非零向量之间的余弦相似度。向量是一个单一的二维信号NumPy数组。余弦相似度是一种相似度的测量方法,通常用于测量文本分析中的文档相似度。我们使用下面的公式来计算余弦相似度。
Similarity = (A.B) / (||A||.||B||)
其中A和B是矢量。
- A.B是A和B的点积:它被计算为A和B的元素相乘之和。
- ||A||是A的L2准则。它被计算为向量A的元素的平方之和的平方根。
示例 1:
在下面的例子中,我们计算两个向量(1-d 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])
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)
输出:
示例 2:
在下面的例子中,我们计算了一批三个向量(二维NumPy数组)和一个向量(一维NumPy数组)之间的余弦相似度。
# 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:
在下面的例子中,我们计算两个2维数组之间的余弦相似度。这里每个数组有三个向量。在这里,我们用元素相乘的m来计算点积。
# 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的第二行之间的余弦相似度,第三个元素也是如此。