我在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)
答案 0 :(得分:1)
据我所知,这个问题(不知道使用了什么all_labels和all_predictions)是由于balanced_accuracy_score
和accuracy_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
3 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html