cosine_similarity 返回矩阵而不是单个值

数据挖掘 机器学习 Python scikit-学习 余弦距离
2021-09-17 05:06:58

我正在使用下面的代码来计算 2 个向量之间的余弦相似度。它返回一个矩阵而不是单个值0.8660254

[[ 1. 0.8660254]

[0.8660254 1.]]

from sklearn.metrics.pairwise import cosine_similarity
vec1 = [1,1,0,1,1]
vec2 = [0,1,0,1,1]
print(cosine_similarity([vec1, vec2]))
2个回答

根据文档 cosine_similarity(X, Y=None, dense_output=True)返回一个形状为 (n_samples_X, n_samples_Y) 的数组您的错误是您将 [vec1, vec2] 作为方法的第一个输入传递。您的向量也应该是numpy数组:

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
vec1 = np.array([[1,1,0,1,1]])
vec2 = np.array([[0,1,0,1,1]])
#print(cosine_similarity([vec1, vec2]))
print(cosine_similarity(vec1, vec2))

X : ndarray 或稀疏数组,shape: (n_samples_X, n_features) 输入数据。

所以你必须指定尺寸。

np.array([1, 2]).shape

有有趣的形状:

(2, )

vec1 = [1, 1, 0, 1, 1]
vec2 = [0, 1, 0, 1, 1]
print(cosine_similarity([vec1], [vec2]))

我将第二个 vec2 作为 Y 传递,并将输出作为标量。