【问题标题】:Difference between balanced_accuracy_score and accuracy_scorebalance_accuracy_score 和 accuracy_score 的区别
【发布时间】:2019-08-28 03:24:10
【问题描述】:

我在 sklearn.metrics 中都使用了 balance_accuracy_score 和 accuracy_score。

根据文档,这两个指标是相同的,但在我的代码中,第一个是 96%,第二个是 97%,而训练的准确率是 98%

您能否向我解释一下这三种准确度之间的区别以及每种准确度的计算方法?

注意:这个问题是一个三类的多分类问题。

我附上了代码示例。

准确率为 98%

model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.00001),
              metrics=['accuracy'])

准确率为 96%

from sklearn.metrics import balanced_accuracy_score
balanced_accuracy_score(all_labels, all_predications)

准确率为 97%

from sklearn.metrics import accuracy_score
accuracy_score(all_labels, all_predications)

【问题讨论】:

  • 你忘了分享你的代码,这样更容易重现你的问题
  • 我添加了代码示例

标签: python scikit-learn deep-learning


【解决方案1】:

据我了解问题(不知道 all_labels、all_predictions 是在什么情况下运行的),balanced_accuracy_scoreaccuracy_score 之间的样本外预测差异是由前一个函数的平衡引起的。

accuracy_score 只返回您预测正确的标签百分比(即有 1000 个标签,您准确预测 980,即您得到 98% 的分数。

balanced_accuracy_score 的工作方式不同,因为它返回每个类别的平均准确率,这是一个不同的指标。假设您的 1000 个标签来自 2 个类,其中 1 类中有 750 个观察值,第 2 类有 250 个观察值。如果您在每个类中错误预测 10 个,则在第 1 类中的准确度为 740/750= 98.7% 和 240/250=96 % 在第 2 类中。balanced_accuracy_score 将返回 (98.7%+96%)/2 = 97.35%。因此,根据文档,我相信该程序可以按预期工作。

【讨论】:

  • 奇怪的是balanced_accuracy_score 的文档说这是 recall 的平均值,我认为这应该是一个错误。
  • 我想这取决于你对召回的定义。在 Sklearn 的在线指南中,他们引用了 Mosley (2013) (lib.dr.iastate.edu/etd/13537),并且鉴于作者对召回的定义,balanced_accuracy_score 的计算似乎是准确的。再说一次,您可以使用其他加权规则,而不仅仅是将每个类别的召回总和除以所有类别的数量。
【解决方案2】:

Accuracy = tp+tn/(tp+tn+fp+fn) 不适用于不平衡的类。

因此我们可以使用平衡精度 = TPR+TNR/2

TPR= 真阳性率 = tp/(tp+fn) : 也叫“敏感度”

TNR = 真阴性率= tn/(tn+fp) : 也称为“特异性”

Balanced Accuracy 的结果与 ROC AUC 分数几乎相同。

链接:

1 https://en.wikipedia.org/wiki/Precision_and_recall

2https://scikit-learn.org/stable/modules/generated/sklearn.metrics.balanced_accuracy_score.html#sklearn.metrics.balanced_accuracy_score

3https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html

【讨论】:

  • 我不认为平衡精度与 AUC“几乎相同”。根据我的数据,AUC 为 0.75,但平衡精度仅为 0.54
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 2019-09-25
  • 2019-06-07
  • 1970-01-01
  • 2019-06-30
  • 2017-07-16
  • 2020-04-27
  • 2013-08-07
相关资源
最近更新 更多