当前位置:   article > 正文

skmetrics输出acc、precision、recall、f1值相同的问题_accuracy和recall总是相等

accuracy和recall总是相等

一个很神奇的现象

我给一个多分类任务做分类的评估,反正指标说来说去就那几个嘛

acc = skmetrics.accuracy_score(y_true, y_pred)
b_acc = skmetrics.balanced_accuracy_score(y_true, y_pred)
k = skmetrics.cohen_kappa_score(y_true, y_pred)
   
precision = skmetrics.precision_score(y_true, y_pred, average='micro')
recall = skmetrics.recall_score(y_true, y_pred ,average='micro')
f1 = skmetrics.f1_score(np.array(y_true), np.array(y_pred), average='micro')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

神奇的是,输出的值居然长这样:
acc 0.7777777777777778
b_acc 0.8571428571428572
k 0.5714285714285714
recall 0.7777777777777778
precision 0.7777777777777778
f1 0.7777777777777778

原因是我average用了micro,这个方法的原理是:
把每个类别的TP、FP、FN先相加,再把这个问题当成二分类来进行计算。

比方说 :
二分类的precision计算公式为:
precision = TP/(TP+FP)
二分类的recall的计算公式为:
recall = TP/(TP+FN)

在猫狗猪动物的三分类里,用micro-average来计算precision和recall的话,公式就变成了这样子:›请添加图片描述
那为什么最后得到的值是一样的呢?
因为在某一类中被判断成FP的样本,在其他类中一定是FN的样本。
比如说系统错把「狗」预测成「猫」,那么对于狗而言,其错误类型就是False Negative,对于猫而言,其错误类型就是False Positive。于此同时,Micro-precision和Micro-recall的数值都等于Accuracy,因为它们计算了对角线样本数和总样本数的比值,总结就是:

请添加图片描述
参考来源

解决方法的话就是换一种平均的方法average = ‘macro’
这种方法是对于不同的类分别计算评估指标,然后加起来求平均请添加图片描述
觉得蛮有意思的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/142980
推荐阅读
相关标签
  

闽ICP备14008679号