Python Jaccard 的封装函数集合之间的相似性?

Python package function for Jaccard Similarity between sets?

可以使用 scikit-learn(或另一个著名的 python 包)来获得一对 集之间的 Jaccard 相似度吗?

我只看到 sklearn jaccard_similarity_score function working on vectors/arrays/tensors of equal length, whereas I really do need the intersection-over-union 计算,这是一个集合计算,而不是对两个相同大小的张量的计算。

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

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

*这个问题不是家庭作业,我曾经为非技术观众制作的幻灯片,它说明了这一点。

只是想知道。

Numpy 内置了一些 Set Routines。在这种情况下,正如@Harpal 指出的那样,您可以使用相交和并集操作。

纯 python 使用 intersection and union:

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 中使用 intersect1d and union1d :

gold = np.array(gold)
clf = np.array(clf)
jac_sim = np.intersect1d(gold, clf).size / np.union1d(gold, clf).size
jac_sim
0.25

诚然 NumPy 实现有点慢,但如果您的数据已经在 NumPy 数组中,它可能比将其转换为集合并在 Python 中进行计算更快。这完全取决于您的数据大小。