class accuracy、 instance accuracy、overall accuracy和average accuracy的区别

看论文时看到评估指标里有很多种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=1Macci

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 accuracymAcc 就是average accuracy或者mean accuracy

overall accuracy == instance accuracy;
average accuracy == class accuracy;

所以也经常可以看到 mAcc 是低于 OA 的。

你可能感兴趣的:(深度学习)