余弦相似度输出对于不同的库是不同的

时间:2016-05-03 07:37:35

标签: python scipy scikit-learn cosine-similarity

我试图找到两个n维向量之间的余弦距离。我是通过使用scipy和sklearn来实现的。不知何故,两个库的输出是不同的。我无法理解为什么。

import numpy as np
from scipy import spatial
from sklearn import metrics
a=np.array([1,2,3,4])
b=np.array([2,3,1,4])
X=np.array([a,b])
print spatial.distance.pdist(X,'cosine')[0]
print metrics.pairwise.cosine_similarity(a,b)[0][0]
print metrics.pairwise_distances(np.reshape(a,(1,4)),np.reshape(b,(1,4)),metric = 'cosine')[0][0]

此代码的输出如下:

0.1

0.9

0.1

1 个答案:

答案 0 :(得分:0)

不同之处在于,有一次计算余弦距离spatial.distance.pdistmetrics.pairwise_distances),而另一次计算余弦相似度metrics.pairwise.cosine_similarity)。

所以cosine_distance = 1 - cosine_similarity,这解释了为什么示例中两个数据点之间的distance0.1,而两者之间的similarity0.9

scipy通常会计算距离,如果您查看docs,则余弦距离实际上定义为1 - cosine_similarity