可以使用scikit-learn(或其他众所周知的python包)来获得一对集之间的Jaccard相似度吗?
我只看到sklearn jaccard_similarity_score
function处理长度相等的向量/数组/张量,而我确实需要intersection-over-union计算,这是一个集计算,而不是两个相同的计算大小的张量。
也许我应该使用the multi-label-binarizer, exemplified here,如果这是scikit api提供的预期方式。
当然,实现自己没有包的几行代码......
* 这个问题不是家庭作业,我一次为非技术观众制作的幻灯片,这说明了这一点。
只是想知道。
答案 0 :(得分:4)
Numpy内置了一些Set Routines。在这种情况下,@Harpal指出你可以使用交叉和联合操作。
在纯python中使用intersection
和union
:
AND
在NumPy中使用intersect1d
和union1d
:
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中进行计算更快。这一切都取决于您的数据大小。