看论文时看到评估指标里有很多种accuracy,在中文网站上搜索好像没有关于这两种准确度的对比,所以在这边记录分享一下。
1.instance accuracy和class accuracy
最简单,最容易理解的准确率公式如下:
a
c
c
=
h
i
t
s
preds
\begin{aligned} acc=\frac{hits}{\text{preds}} \end{aligned}
acc=predshits
将预测正确的数量hits 除以 参与预测的样本总量preds,得到准确率acc。
instance accuracy
实例准确率将正确预测的总数除以所做预测的总数,而不考虑类别,公式如下:
a
c
c
micro
=
total hits
total preds
\begin{aligned} a c c_{\text {micro }}=\frac{\text { total hits }}{\text { total preds }} \end{aligned}
accmicro = total preds total hits
如果你看的论文没有特别指明是什么准确率,那大概率就是 instance accuracy。
举例:猫狗猪三分类任务,100个猫狗猪的图片参与预测,正确预测(即猪的图片预测为猪,即狗的图片预测为狗,即猫的图片预测为猫)的数量为80张图片,那么 instance accuracy = 80/100 = 80% 。
class accuracy
类准确率分别计算每个类别的准确率(更准确的说法应该是召回率recall),并对所有类的结果进行平均,公式如下:
a
c
c
macro
=
1
M
∑
i
=
1
M
a
c
c
i
\begin{aligned} a c c_{\text {macro }}=\frac{1}{M} \sum_{i=1}^{M} a c c_{i} \end{aligned}
accmacro =M1i=1∑Macci
a c c i acc_i acci是类别i的预测准确率,类别总数为 M,结果就是所有类的分别的准确率总和 除以类别数。
举例:还是猫狗猪分类任务,猫样本有50张图,狗样本40张图,猪样本10张图,若原本是猫的图片被正确预测为猫的有45张,原本是狗的图片被正确预测为狗的有32张,原本是猪的图片被正确预测为猪的有5张:
a
c
c
猫
=
45
/
50
=
0.9
acc_猫 =45/50= 0.9
acc猫=45/50=0.9
a
c
c
狗
=
32
/
40
=
0.8
acc_狗 =32/40= 0.8
acc狗=32/40=0.8
a
c
c
猪
=
5
/
10
=
0.5
acc_猪 =5/10 = 0.5
acc猪=5/10=0.5
则 class accuracy = (0.9+0.8+0.5) /3 ~= 0.73
为什么要用后者?
精度是一个对类别不平衡非常敏感的指标,而 instance accuracy是一种在计算时使每个类别的重要性相同的方法。
而class accuracy更能体现出类别不平衡带来的影响。
所以也经常可以看到class accuracy是低于 instance accuracy的。
举个极端点的例子,三分类的测试集分别有 猫图片90张,狗图片5张,猪图片5张,共计100个测试数据。模型1中,猫预测正确85张,狗和猪全部预测错误,此时网络可以说是完全没有分辨狗和猪的能力,但是 instance accuracy仍然达到了85%;而另一种情况,模型2中,猫预测正确75张,狗和猪全部预测正确,instance accuracy依然是85%;这种情况下我们明显知道后一个模型是好于前一个模型的,所以这种情况下使用class accuracy衡量两者更为公平。
2. overall accuracy和average accuracy
看完第一节这边就很简单了,其实就是上面两种准确率换了个名字而已。
论文里的 OA就是 overall accuracy;mAcc 就是average accuracy或者mean accuracy。
overall accuracy == instance accuracy;
average accuracy == class accuracy;
所以也经常可以看到 mAcc 是低于 OA 的。