【附代码】图像分类 — 测评指标

在深度学习中,对模型的测量和评估至关重要,只有选择与问题相匹配的评估方法,才能够快速地发现在模型选择和训练过程中可能出现的问题,从而迭代地对模型进行优化。


图像分类是计算机视觉中最基础的一个任务,它的目标是将不同的图像划分到不同的类别,实现最小的分类误差,这里我们只考虑单标签分类问题,即每一幅图像都只有唯一的类别。

对于单标签分类任务,其评价指标主要有:

对于二分类而言:
判断样本是否为正类,只需要神鼎一个概率阈值T,预测概率大于 T 的为正类,小于 T 的为负类,T 默认值是 0.5,如果我们减少阈值 T,更多的样本会被识别为 正类,这样可以提高正类的召回率,但同时也会让更多的负类被错分为正类,如果增加阈值 T,则正类的召回率降低,分类精度提高。

如果多分类而言:
如 ImageNet 分类中的 1000类,那么预测类别就是预测概率最大的那一类。


1、准确率

对于单标签任务而言,每个样本都只有一个正确的类别,预测到该类别就是分类正确,没有预测到的就是分类错误,因此分类最直观的指标就是 Accuracy,即准确率,计算方法如下:

A c c u r a c y = T P + T N T P + F P + T N + F N Accuracy = \frac{TP +TN}{TP +FP +TN +FN} Accuracy=TP+FP+TN+FNTP+TN

记样本 x i x_i xi 的类别为 y i y_i yi ,类别种类为 ( 0 , 1 , . . . , N ) (0,1,...,N) (0,1,...,N),预测类别函数为 f f f ,则 TOP-1 Accuracy 的计算方法如下:

T O P − 1 A c c u r a c y = ∑ i = 0 N − 1 ( f ( x i ) = = y i ) N TOP-1 Accuracy = \frac{\sum^{N-1}_{i=0} (f(x_i)==y_i)}{N} TOP1Accuracy=Ni=0N1(f(xi)==yi)

如果给出预测概率最大的5个预测类别,只要其中包含了真实的类别,则判定预测正确计算出来的指标就是 TOP-5 Accuracy。

import torch

def accuracy(output, target, topk=(1,)):
    """Computes the accuracy over the k top predictions for the specified values of k"""
    maxk        = max(topk)
    batch_size  = target.size(0)
    _, pred     = output.topk(maxk, dim=1, largest=True, sorted=True)
    pred        = pred.t()
    correct     = pred.eq(target.reshape(1, -1).expand_as(pred))
    return [correct[:k].reshape(-1).float().sum(0) * 100. / batch_size for k in topk]


2、精确率 & 召回率

如果只考虑正样本的指标,则有两个很常用的指标 – 精确率 & 召回率

  • 正样本精确率 Precision = TP / (TP + FP),表示召回为正样本的样本中,到底有多大比例是真正的正样本;
  • 正样本召回率 Recall = TP / (TP + FN),表示真正的正样本有多大比例被召回;

当然,如果对负样本感兴趣的话,也可以计算对应的精确率和召回率。

通常召回率越高,精确率越低,根据两者对应的值可以绘制 Recall-Precision 曲线,如下图,曲线越靠近右上角说明其性能越好,该性能可以用该曲线与坐标轴包围的面积来定量评估。

在这里插入图片描述


3、F1-score

有时我们不仅关注正样本的精确率,也关心其召回率,但又不想用准确率来衡量,一个折中的方法是采用 F1-score。

F 1 − s c o r e = 2 × P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1-score = 2 \times \frac{Precision \cdot Recall}{Precision + Recall} F1score=2×Precision+RecallPrecisionRecall

只有在精确率和召回率都高的情况下, F1-score 才会很高,因此 F1-score是一个平衡性能的指标。


4、混淆矩阵

详情可以参考这篇博客 「解析」语义分割性能指标 附代码

如果我们想知道类别之间相互误分的情况,查看是否有特定的类别相互混淆,就可以用混淆矩阵画出分类的详细预测结果。对于包含多个类别的任务,混淆矩阵很清晰地反映了各类别之间的错分概率。

如图,对于一个包含11个类别的分类任务,其混淆矩阵为 11x11 的矩阵,其中第 i 行第 j 列的元素表示第 i 类目标被分为第 j 类的概率。可以看出,越好的分类器对角线上的值越大。
在这里插入图片描述


5、ROC曲线

准确率、精确率、召回率 和 F1-score 都是单一的数值指标,如果想观察分类算法在不同的参数下的表现,此时可以使用一条曲线,及 ROC(Receiver Operating Characteristic)曲线。

ROC 曲线可以用评价一个分类器在不同阈值下的表现。在 ROC 曲线中,每个点的

  • 横坐标是 FPR(False Position Rate)
  • 纵坐标是TPR(True position Rate)

其描绘了分类器在 True Position 和 False Position 之间的平衡。TPR 和 FPR 的计算如下:

  • TPN = TP / (TP + FN):表示分类器预测的正类中实际正实例占所有正实例的比例;
  • FPN = FP / (FP + TN):表示分类器预测的正类中实际负实例占所有负实例的比例,FPR越大,预测正类中的实际负类越多。

在这里插入图片描述

ROC 曲线有四个关键点:

  • (0,0)点:FPR=TPR=0,表示分类器预测所有的样本都为负样本;
  • (1,1)点:FPR=TPR=1,表示分类器预测所有的样本都为正样本;
  • (0,1)点:FPR=0,TPR=1,此时FN=0且FP=0,表示最优分类器,所有的样本都被正确分类;
  • (1,0)点:FPR=1,TPR=0,此时TP=0且TN=0,表示最差分类器,有所得样本都被错误分类;

ROC 曲线有一个很好的特征:当测试集中的正负样本比例分布变化时,ROC曲线能够保持不变,即它对正负样本不均衡问题不敏感。例如:负样本的数量增加到原来的10倍,TPR不受影响,FPR 的各项也呈比例地增加,本身并不会有太大的变化,所以对不均衡样本问题,通常选择ROC曲线作为评价标准。

ROC 曲线越接近左上角,表示该分类器的性能越好,若一个分类器的ROC曲线完全包住了另一个分类器ROC曲线,那么可以判断前者的性能更好。

如果想通过两条ROC曲线来定量评估两个分类器的性能,就可以使用 AUC指标。


6、AUC

AUC(Area Under Curve) 为ROC曲线下的面积,这个面积的数值不会大于1。它的含义是一个概率,即随机挑选一个正样本 及 一个负样本,AUC 表征的是分类器对正样本给出的预测值 高于 负样本给出的预测值的概率。

当然,前提是正样本的预测值的确应该高于负样本。

不同 AUC 值表示不同的含义:

  • AUC=1:在任何阈值下分类器都可以 100% 识别所有类别,这是理想的分类器,基本不存在;
  • AUC=0.5:相当于随机预测,此时分类器不可用;
  • 0.5<AUC<1:优于随机预测,这也是实际作用中大部分分类器所处的状态;
  • AUC<0.5:总是比随机预测更差;

AUC 作为一个评价标准,常和 ROC 曲线一起使用,因为 ROC曲并不能清晰地说明那个分类器的效果更好,而 AUC值的大小直接量化评估了分类器的性能。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ViatorSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值