【问题标题】:Is there contradiction in the sklearn.metrics.accuracy_score function?sklearn.metrics.accuracy_score 函数是否存在矛盾?
【发布时间】:2020-10-04 09:27:02
【问题描述】:

根据我所读到的,Jaccard 指数是由 (intersection/union) 计算的。 Formula for Jaccard index

似乎对于二进制情况,sklearn.metrics.accuracy_score 应该等同于 Jaccard 索引。但是,我对使用此功能时得到的结果感到困惑。例如:

from sklearn import metrics

y=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 指数公式?

【问题讨论】:

  • @taha,OP 说的是二元情况,根据documentation在二元和多类分类中,这个函数等于 jaccard_score 函数。

标签: python machine-learning scikit-learn classification


【解决方案1】:

您的一维数组被视为 6 个样本,而 Jaccard 索引的公式是每个样本,您可以在 the User Guide 的公式中看到更好的结果,而不是所有样本。 (多类和多标签示例可能有助于澄清这一点。)

在二分类的情况下,预测的标签是互斥且穷举的,0或1;所以交集的大小为 1 表示正确预测,否则为 0,而联合的大小为 1 表示正确预测,否则为 2,因此每个样本的 Jaccard 索引为 1 或 0。然后在所有样本中取平均值 (". ..计算 Jaccard 相似度系数的平均值...”来自用户指南),这与准确度相同。

【讨论】:

  • 我明白了。不过,这与 Jaccard 指数的实际定义没有区别吗?通常,它基于组合样本的交集和并集,而不是对每个样本进行平均。我必须使用什么库来根据所有样本查找索引?
  • Jaccard 指数的定义是为了衡量样本的相似性,一些全集的子集。将其应用于固定样本上的模型的真实情况和预测似乎需要一些扭曲;什么是集合 A 和 B?但是,如果您愿意,您可以在 sklearn 中轻松定义自定义指标。以您的示例作为如何定义它的指南,它是普通准确度分数的单调变换:#correct/(2*n-#correct) vs #correct/n:wolframalpha.com/input/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多