首页 > 解决方案 > 使用 numpy 的相似度度量

问题描述

我正在尝试定义我自己的相似性度量,灵感来自 jaccard 相似度得分。我在 jaccard 度量中唯一想要的额外的东西是如果也考虑标签的频率。为此,我编写了以下代码片段:

u = [12,0,3]
v = [24,6,1]
num = 0
den = 0
for i in range(3):
    if u[i]!=0 and v[i] != 0:
        num+=(u[i]+v[i])
    den+=(u[i]+v[i])
print(1 - num/den)

所以我的问题是

  1. 这可以通过 numpy 的按位运算符来完成吗?
  2. 我可以使用任何其他相似性指标吗?我试过余弦相似度。哪个会更有帮助?

标签: pythonnumpymetricssimilarity

解决方案


使用 numpy 的矢量化函数的方法:

arr = np.array([u,v])

s = arr.sum(0)
(s*(arr==0).any(0)).sum()/s.sum()

输出:

0.13043478260869565

推荐阅读