TL;DR对于多类问题,Jaccard 分数是否与准确率相同?
2019 年 3 月 29 日更新
现在使用 pull request #13151修复了 scikit-learn 中的错误实现。万岁!
PS 这里的教训是,无论库、框架或想法多么成熟和广泛,它们总是存在错误和缺点。作为一名工程师、科学家或学生,您有责任验证您工作的理论和实际结果,尤其是当您依赖其他人的结果时。
我正在研究分类问题并使用scikit-learn计算准确度和 Jaccard 分数,我认为它是 pythonic 科学世界中广泛使用的库。但是,我和我的 matlab 同事得到了不同的结果。
sklearn.metrics.jaccard_similarity_score声明如下:
注意:在二分类和多分类中,这个函数相当于accuracy_score。它在多标签分类问题上有所不同。
sklearn.metrics.accuracy_score说:
注释 在二元和多类分类中,此函数等于 jaccard_similarity_score 函数。
实际上,如果问题不是多标签类型,则jaccard_similarity_score实现会回到准确性:
if y_type.startswith('multilabel'):
...
else:
score = y_true == y_pred
return _weighted_sum(score, sample_weight, normalize)
是不是和Jaccard 索引(交集大于联合)的定义相矛盾?这些“分数”和“索引”是不同的指标吗?为多类问题计算 Jaccard 度量的正确且普遍接受的方法是什么?


