balanced_accuracy_score和precision_score之间的区别

时间:2019-04-06 11:35:01

标签: python scikit-learn deep-learning

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

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

您能告诉我这三种精度之间的区别是什么?如何计算?

注意:该问题是具有三个类别的多分类问题。

我已附上代码示例。

准确性为98%

function json($data = [], $status = 200, array $headers = [], $options = 0)

准确性为96%

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

准确性为97%

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

2 个答案:

答案 0 :(得分: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%。因此,我相信该程序会根据文档而按预期工作。

答案 1 :(得分:1)

精度= tp + tn /(tp + tn + fp + fn)对于不平衡的类来说效果不佳。

因此,我们可以使用Balanced Accuracy = TPR + TNR / 2

TPR =真实阳性率= tp /(tp + fn):也称为“敏感性”

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

平衡精度得出的结果与ROC AUC得分几乎相同。

链接:

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

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

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