如何计算数组之间的相似性?

How to compute similarities between arrays?

我正在尝试计算两个样本之间的相似度。 python 函数 sklearn.metrics.pairwise.cosine_similarityscipy.spatial.distance.cosine return 个我不满意的结果。例如:

在 python 中有没有办法实现这些预期结果?

那些向量在几何上非常接近。余弦相似度不仅衡量元素是否相同,还衡量它们的不同程度。

您似乎只想要一个元素匹配率?

sum([t1 == t2 for t1, t2 in zip(tt1, tt2)]) / len(tt1)
# or
np.equal(tt1, tt2).mean()

我认为您误解了函数的计算内容。根据您的描述,您想要计算错误分类错误/准确度。但是,该函数接收两个样本 u、v 并计算它们之间的余弦距离。在您的第一个示例中:

tt1 = [1, 16, 4, 21]
tt2 = [5, 17, 3, 22]

然后 u=tt1 和 v=tt2。两个数组的不同值是这些样本所在的向量 space 中的坐标(这里是 4 维 space)——而不是不同的样本。参考 function documentation 并具体参考底部的示例。

如果这些数组中的每个坐标代表一个不同的样本,那么:

  • 如果顺序很重要:(考虑使用 numpy 数组开始)

    np.mean(np.array(tt1) == np.array(tt2))
    
  • 如果顺序无关紧要:

     len(np.intersect1d(np.array(tt1), np.array(tt2))) / len(tt1)
    

您可以按照 documentation

中的说明使用 numpy.intersect1d

这是我如何使用示例 4#

的示例
import numpy as np 
tt1 = [1, 16, 4, 21]
tt2 = [1, 16, 4, 22]
res = len(np.intersect1d(tt1, tt2)) / ((len(tt1)+len(tt2))/2)
print(res)