两个数字表之间的余弦相似性

2024-05-15 05:14:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要计算两个列表之间的余弦相似性,例如列表1是datasetI,列表2是dataSetII。我不能使用任何东西,比如numpy或统计模块。我必须使用公共模块(数学等)(并且尽可能少地使用模块,以减少所花费的时间)。

假设dataSetI[3, 45, 7, 2],而dataSetII[2, 54, 13, 15]。列表的长度总是相等。

当然,余弦相似度介于0和1之间,因此,余弦相似度将用format(round(cosine, 3))四舍五入到小数点后三位或四位。

非常感谢你的帮助。


Tags: 模块numpyformat列表时间数学相似性花费
3条回答

另一个版本仅基于numpy

from numpy import dot
from numpy.linalg import norm

cos_sim = dot(a, b)/(norm(a)*norm(b))

可以使用cosine_similarity函数形式sklearn.metrics.pairwisedocs

In [23]: from sklearn.metrics.pairwise import cosine_similarity

In [24]: cosine_similarity([[1, 0, -1]], [[-1,-1, 0]])
Out[24]: array([[-0.5]])

你应该试试SciPy。它有许多有用的科学程序,例如“数值计算积分、求解微分方程、优化和稀疏矩阵的程序”,它使用超高速优化的NumPy进行数字运算。安装请参见here

请注意,space.distance.cosine计算的是距离,而不是相似度。因此,必须从1中减去该值,才能获得相似性。

from scipy import spatial

dataSetI = [3, 45, 7, 2]
dataSetII = [2, 54, 13, 15]
result = 1 - spatial.distance.cosine(dataSetI, dataSetII)

相关问题 更多 >

    热门问题