多分类 · Multi-class

多分类:逐类指标与三种平均

三个以上的类别时,每一类都可以看成「这一类 vs 其余所有类」的二分类,各有自己的精确率和召回率。怎么把它们汇总成一个数,有宏平均、微平均、加权平均三种做法,结果可能差很多。

输入数据 INPUT

三种平均怎么选 AVERAGING

宏平均 macro
每一类算出指标后直接取平均,小类和大类同样重要。某个小类判得很差,宏平均会明显下降。
加权平均 weighted
按每类的真实样本数加权。结果更接近大类的表现,小类判得差不太看得出来。
微平均 micro
先把所有类的 TP、FP、FN 加起来再算。每个样本只有一个真实类别、一个预测类别时,一个错判同时算作一个 FP 和一个 FN,所以微平均的精确率、召回率、F1 都等于准确率。
01

计算结果

样本数20
类别数3
准确率0.7500

混淆矩阵

真实 ↓ · 预测 →合计
6118
1618
1034
合计87520

逐类指标

类别TPFPFN支持数精确率召回率F1
62280.75000.75000.7500
61280.85710.75000.8000
32140.60000.75000.6667

三种平均

平均方式精确率召回率F1
宏平均 macro3 个类别的指标直接取平均,每类同等重要0.73570.75000.7389
加权平均 weighted按每类的支持数(真实样本数)加权0.76290.75000.7533
微平均 micro先把所有类别的 TP、FP、FN 加总再算;单标签多分类时三者都等于准确率0.75000.75000.7500
02

逐类指标是怎么来的

TP、FP、FN 从哪里读

对第 i 类:对角线上第 i 格是 TP;第 i 列里除对角线外的数加起来是 FP(别的类被错判成 i);第 i 行里除对角线外的数加起来是 FN(i 被错判成别的类)。支持数是第 i 行的合计。

然后套二分类的公式

精确率 = TP / (TP + FP),召回率 = TP / (TP + FN),F1 = 2TP / (2TP + FP + FN)。和二分类计算台用的是同一套公式,只是「正类」换成了第 i 类。

某一类没有被预测到

如果模型从没预测过某一类,这一类的精确率分母为 0,是无定义的。算宏平均和加权平均时本站按 0 计入,并在结果下方列出,见约定

和手算对不上?

先核对行列方向:本站行是真实类别、列是预测类别。有些资料正好反过来,转置之后精确率和召回率会互换。