alex_bn_lee

导航

【747】多分类模型metrics计算

参考:Evaluation Metrics For Multi-class Classification(Micro-, Macro- 计算)

参考:多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨

参考:二分类和多分类问题下的评价指标详析(Precision, Recall, F1,Micro,Macro)

参考:详解多分类模型的Macro-F1/Precision/Recall计算过程

参考:sklearn.metrics.precision_score, sklearn.metrics.recll_score, sklearn.metrics.f1_score, sklearn.metrics.accuracy_score

参考:分类评价指标 F值 详解 | Micro F1 & Macro F1 & Weight F1 【计算的是平均precision、recall和F1,因此三者本身不满足相应的调和平均关系】

参考:分类问题的评价指标:多分类【Precision、 micro-P、macro-P】、【Recall、micro-R、macro-R】、【F1、 micro-F1、macro-F1】

参考:Micro-average & Macro-average Scoring Metrics – Python

参考:Micro averaged precision, recall, and F1 are always the same


注意:Micro-Precision = Micro-Recall = Micro-F1 score = Accuracy(因此相对于Micro来说没啥作用)

这是因为在某一类中的False Positive样本,一定是其他某类别的False Negative样本。听起来有点抽象?举个例子,比如说系统错把「狗」预测成「猫」,那么对于狗而言,其错误类型就是False Negative,对于猫而言,其错误类型就是False Positive。于此同时,Micro-precision和Micro-recall的数值都等于Accuracy,因为它们计算了对角线样本数和总样本数的比值。参考:多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨


通过argmax函数获取标签值

# test_preds 预测的结果是三维向量的小数值
# 需要通过 argmax 函数获取值最大的位置,也就是对应的标签值
y_pred_vector = np.argmax(y_pred_vector, axis=1)

代码:

from sklearn.metrics import f1_score, precision_score, recall_score

y_true=[1,2,3]
y_pred=[1,1,3]

f1 = f1_score( y_true, y_pred, average='macro' )
p = precision_score(y_true, y_pred, average='macro')
r = recall_score(y_true, y_pred, average='macro')

print(f1, p, r)
# output: 0.555555555556 0.5 0.666666666667

Accuracy

from sklearn.metrics import accuracy_score

accuracy_score(y_true, y_pred)

 

posted on 2022-10-09 20:30  McDelfino  阅读(337)  评论(0)    收藏  举报