Python 余弦相似性输出不同的scipy与sklearn
我确信我忽略了一些东西,但是为什么这些输出不同呢 scikit学习Python 余弦相似性输出不同的scipy与sklearn,python,scikit-learn,cosine-similarity,Python,Scikit Learn,Cosine Similarity,我确信我忽略了一些东西,但是为什么这些输出不同呢 scikit学习 from sklearn.metrics.pairwise import cosine_similarity cosine_similarity([[3,5,1]],[[1,2,3]]) ### output `array([[0.72280632]])` scipy from scipy.spatial.distance import cosine cosine([3,5,1],[1,2,3]) ### output 0
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity([[3,5,1]],[[1,2,3]])
### output `array([[0.72280632]])`
scipy
from scipy.spatial.distance import cosine
cosine([3,5,1],[1,2,3])
### output 0.27719367767579906
为什么这些不一样?从我的计算结果来看,在分母中使用L1或L2范数似乎没有什么区别,它们使用的余弦距离定义是不同的
sklearn.metrics.pairwise.cosine\u相似度的文档字符串表示:
计算X和Y中样本之间的余弦相似度。余弦相似度或余弦核将相似度计算为X和Y的标准化点积:
$cosine(X,Y)=/(| | X | | |*| | Y |)$
而scipy.space.distance.cosine
表示:
X和Y之间的余弦距离定义为
$cosine(X,Y)=1-/(| | X | | |*| | Y |)$
其中$$是介于$X$和$Y$之间的点积,$| | X | |是L2规范
(为了便于比较,我稍微修改了文档字符串,使用了相同的变量名和数学约定。)
基本上,您有1-cosine\u sklearn=cosine\u scipy
它们使用的余弦距离定义是不同的
sklearn.metrics.pairwise.cosine\u相似度的文档字符串表示:
计算X和Y中样本之间的余弦相似度。余弦相似度或余弦核将相似度计算为X和Y的标准化点积:
$cosine(X,Y)=/(| | X | | |*| | Y |)$
而scipy.space.distance.cosine
表示:
X和Y之间的余弦距离定义为
$cosine(X,Y)=1-/(| | X | | |*| | Y |)$
其中$$是介于$X$和$Y$之间的点积,$| | X | |是L2规范
(为了便于比较,我稍微修改了文档字符串,使用了相同的变量名和数学约定。)
基本上,你有1-cosine\u sklearn=cosine\u scipy
如果你能修正数学公式,效果会更好。回答得好!你是说不来吗?我修复了这个问题(我想降价处理器会将它识别为HTML标记,所以它不会显示?)。不过,我不能让$X$在这个网站上看起来像LaTeX。它说你可以使用第三方服务插入图像:这是否意味着sklearn是一种相似性的度量,而scipy是一种不同性的度量?我真的没有想到这一点,但是的,名字告诉你他们在做什么:在sklearn
中,你有余弦相似性,但在scipy中有余弦距离。因此,如果$X=Y$,那么相似度是1,但距离是0。如果你能修正数学公式,可能会更好。回答得好!你是说不来吗?我修复了这个问题(我想降价处理器会将它识别为HTML标记,所以它不会显示?)。不过,我不能让$X$在这个网站上看起来像LaTeX。它说你可以使用第三方服务插入图像:这是否意味着sklearn是一种相似性的度量,而scipy是一种不同性的度量?我真的没有想到这一点,但是的,名字告诉你他们在做什么:在sklearn
中,你有余弦相似性,但在scipy中有余弦距离。因此,如果$X=Y$,那么相似度为1,但距离为0。