Jaccard的Python包函数集之间的相似性?

时间:2018-01-18 14:44:54

标签: python scikit-learn statistics set multilabel-classification

可以使用scikit-learn(或其他众所周知的python包)来获得一对集之间的Jaccard相似度吗?

我只看到sklearn jaccard_similarity_score function处理长度相等的向量/数组/张量,而我确实需要intersection-over-union计算,这是一个集计算,而不是两个相同的计算大小的张量。

也许我应该使用the multi-label-binarizer, exemplified here,如果这是scikit api提供的预期方式。

当然,实现自己没有包的几行代码......

enter image description here * 这个问题不是家庭作业,我一次为非技术观众制作的幻灯片,这说明了这一点。

只是想知道。

1 个答案:

答案 0 :(得分:4)

Numpy内置了一些Set Routines。在这种情况下,@Harpal指出你可以使用交叉和联合操作。

在纯python中使用intersectionunion

AND

在NumPy中使用intersect1dunion1d

gold = ['A', 'B', 'C']
clf = ['A', 'D']
gold_s = set(gold)
clf_s = set(clf)
jac_sim = len(gold_s.intersection(clf_s)) / len(gold_s.union(clf_s))
jac_sim
0.25

当然,NumPy实现要慢一点,但是如果你的数据已经在NumPy数组中,那么它可能比将它转换为集合并在Python中进行计算更快。这一切都取决于您的数据大小。