根据我所阅读的内容,Jaccard指数的计算公式是(交集/并集)。Jaccard指数公式
看起来在二元情况下,sklearn.metrics.accuracy_score应该等同于Jaccard指数。然而,当我使用这个函数时,我对得到的结果感到困惑。例如:
from sklearn import metricsy=np.array([0,0,0,0,1,1])y2=np.array([1,1,0,0,1,1])metrics.accuracy_score(y,y2)
这应该会得到一个Jaccard指数为4/(6+6-4)=0.5,对吗?然而,最后一行代码的结果是0.67,显然这是基于相似/总数的计算。我是否误解了Jaccard指数公式?
回答:
你的1维数组被视为6个样本,Jaccard指数的公式是针对每个样本的,如用户指南中的公式所示,而不是跨所有样本。(多类别和多标签的例子可能会帮助澄清这一点。)
在二元分类的情况下,预测的标签是互斥且详尽的,0或1;因此,对于正确的预测,交集的大小为1,否则为0,而并集的大小对于正确的预测为1,否则为2,因此每个样本的Jaccard指数要么是1要么是0。这然后在所有样本中取平均(”…计算Jaccard相似系数的平均值…”来自用户指南),这与准确率相同。