0


机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)

文章目录


前言

入门机器学习分类问题,总有些内容是绕不过的,为了辨别模型好坏,必须要了解模型评估的各项指标。

为了能够加深记忆,本人在基于他人文章的基础下写了本篇博客,同时也方便自身查阅。

看懂机器学习指标:准确率、精准率、召回率、F1、ROC曲线、AUC曲线

什么是ROC曲线?为什么要使用ROC?以及 AUC的计算


一、混淆矩阵(confusion matrix)

二分类的在此不作介绍,此图为我最近训练的比较差的四分类模型(yolo5s-v6)所生成的混淆矩阵:

具体解释如下:

X横坐标为正确的分类(即你用标签所标注的真实分类)

Y纵坐标为模型所预测的分类(即图片经过模型推理后模型将其辨别为的分类)

举例,如S07_A_1:

该项分类的训练结果很差,有50%被认为是S07_A_2,另外50%则是S07_A_normal,也就是模型完全无法分辨出S07_A_1这项分类。

举例,如S07_A_3:

该项没有训练到任何分类数据,所以指标上一片空白。

还有 background FP和 background FN会比较难解释些:


这里先普及一下多分类下的TN、TP、FN、FP的概念:

True positives (TP): 缺陷的图片被正确识别成了缺陷。(本缺陷的正确分类预测)
True negatives(TN): 背景的图片被正确识别为背景。(非本缺陷被预测为其他分类缺陷或背景)
False positives(FP): 背景的图片被错误识别为缺陷。(非本缺陷被预测为本缺陷)
False negatives(FN): 缺陷的图片被错误识别为背景。(本缺陷被预测为其他缺陷或者背景)

举例,如background FP(背景的图片被错误识别为缺陷):

100%在S07_A_normal的横坐标上,即100%的背景都被认为是S07_A_normal缺陷。

如background FN(缺陷的图片被错误识别为背景):

一片空白,即没有任何的缺陷被误判为背景。

这里我引进之前做的一个单分类模型:

在这里插入图片描述

这是一个只判断是否为鱼的模型,即打标签时只有一个分类:

可以看出,有22%的鱼被模型认为是背景(background FN),不过模型并没有将任何背景认为是鱼(background FP)。

清楚了TP、TN、FP、FN的各项概念,就可以去计算各项分类的其余指标了。


二、准确率,精准率,召回率,F1分数

这里当然也是不对二分类做论述,同样举例刚刚的四分类模型:

同时拟定了他们的分类个数:

在这里插入图片描述

实际上background FP的数量很少,大多数是没有标记的S07_A_normal,一般寥寥几个,假设为5个。


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​

本缺陷的正确分类预测

加上

非本缺陷被预测为其他分类缺陷或背景

除以总预测数量。

在正负样本数量接近的情况下,准确率越高,模型的性能越好,例如S07_A_normal:

在这里插入图片描述

      A 
     
    
      c 
     
    
      c 
     
    
      u 
     
    
      r 
     
    
      a 
     
    
      c 
     
    
      y 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
      = 
     
     
      
      
        800 
       
      
        + 
       
      
        ( 
       
      
        200 
       
      
        + 
       
      
        2 
       
      
        ) 
       
      
      
      
        800 
       
      
        + 
       
      
        ( 
       
      
        5 
       
      
        + 
       
      
        100 
       
      
        + 
       
      
        2 
       
      
        ) 
       
      
        + 
       
      
        ( 
       
      
        200 
       
      
        + 
       
      
        2 
       
      
        ) 
       
      
        + 
       
      
        0 
       
      
     
    
      = 
     
    
      90.35 
     
    
      % 
     
    
   
     Accuracy = \frac{TP+TN}{TP+FP+TN+FN} = \frac{800+(200+2)}{800+(5+100+2)+(200+2)+0} = 90.35\% 
    
   
 Accuracy=TP+FP+TN+FNTP+TN​=800+(5+100+2)+(200+2)+0800+(200+2)​=90.35%

不过由于准确率的局域性,在TP和TN相差太大的情况下,例如S07_A_1:

在这里插入图片描述

      A 
     
    
      c 
     
    
      c 
     
    
      u 
     
    
      r 
     
    
      a 
     
    
      c 
     
    
      y 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
      = 
     
     
      
      
        0 
       
      
        + 
       
      
        ( 
       
      
        200 
       
      
        + 
       
      
        100 
       
      
        + 
       
      
        5 
       
      
        + 
       
      
        800 
       
      
        ) 
       
      
      
      
        0 
       
      
        + 
       
      
        0 
       
      
        + 
       
      
        ( 
       
      
        200 
       
      
        + 
       
      
        100 
       
      
        + 
       
      
        5 
       
      
        + 
       
      
        800 
       
      
        ) 
       
      
        + 
       
      
        ( 
       
      
        2 
       
      
        + 
       
      
        2 
       
      
        ) 
       
      
     
    
      = 
     
    
      99.64 
     
    
      % 
     
    
   
     Accuracy = \frac{TP+TN}{TP+FP+TN+FN} = \frac{0+(200+100+5+800)}{0+0+(200+100+5+800)+(2+2)} = 99.64\% 
    
   
 Accuracy=TP+FP+TN+FNTP+TN​=0+0+(200+100+5+800)+(2+2)0+(200+100+5+800)​=99.64%

可见,S07_A_1的识别率这么差,但是计算的Accuracy还这么高,因此,不能仅仅从单项准确率来判断模型的好坏。

总体准确率:
在这里插入图片描述

      A 
     
    
      c 
     
    
      c 
     
    
      u 
     
    
      r 
     
    
      a 
     
    
      c 
     
    
      y 
     
    
      = 
     
     
      
      
        正 
       
      
        方 
       
      
        形 
       
      
        k 
       
      
        = 
       
      
        − 
       
      
        1 
       
      
        的 
       
      
        对 
       
      
        角 
       
      
        线 
       
      
        值 
       
      
      
      
        所 
       
      
        有 
       
      
        样 
       
      
        本 
       
      
        数 
       
      
     
    
      = 
     
     
      
      
        0 
       
      
        + 
       
      
        200 
       
      
        + 
       
      
        0 
       
      
        + 
       
      
        800 
       
      
        + 
       
      
        0 
       
      
        ) 
       
      
      
      
        2 
       
      
        + 
       
      
        200 
       
      
        + 
       
      
        2 
       
      
        + 
       
      
        100 
       
      
        + 
       
      
        800 
       
      
        + 
       
      
        5 
       
      
     
    
      = 
     
    
      90.17 
     
    
      % 
     
    
   
     Accuracy = \frac{正方形k=-1的对角线值}{所有样本数} = \frac{0+200+0+800+0)}{2+200+2+100+800+5} = 90.17\% 
    
   
 Accuracy=所有样本数正方形k=−1的对角线值​=2+200+2+100+800+50+200+0+800+0)​=90.17%

若是以Accuracy来说模型质量很好,不过这都归功于庞大的S07_A_normal数据及其高正确率,其他分类识别率很差。


2. 精确率(Precision)

精准率(Precision)又叫查准率,它是针对

预测结果

而言的,它的含义是`在所有被预测为正的样本中实际为正的样本的概率``,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确,其公式如下:

      P 
     
    
      r 
     
    
      e 
     
    
      c 
     
    
      i 
     
    
      s 
     
    
      i 
     
    
      o 
     
    
      n 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
     
    
   
     Precision = \frac{TP}{TP+FP} 
    
   
 Precision=TP+FPTP​

也就是只看分类所在行,对于S07_A_normal来说:

      P 
     
    
      r 
     
    
      e 
     
    
      c 
     
    
      i 
     
    
      s 
     
    
      i 
     
    
      o 
     
    
      n 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
     
    
      = 
     
     
     
       800 
      
      
      
        800 
       
      
        + 
       
      
        ( 
       
      
        2 
       
      
        + 
       
      
        100 
       
      
        + 
       
      
        5 
       
      
        ) 
       
      
     
    
      = 
     
    
      88.20 
     
    
      % 
     
    
   
     Precision = \frac{TP}{TP+FP} = \frac{800}{800+ (2+100+5)} = 88.20\% 
    
   
 Precision=TP+FPTP​=800+(2+100+5)800​=88.20%

结果来说,略低于准确率的90.35%

对于S07_A_01来说:

      P 
     
    
      r 
     
    
      e 
     
    
      c 
     
    
      i 
     
    
      s 
     
    
      i 
     
    
      o 
     
    
      n 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
     
    
      = 
     
     
     
       0 
      
      
      
        0 
       
      
        + 
       
      
        0 
       
      
     
    
      = 
     
    
      ? 
     
    
      % 
     
    
   
     Precision = \frac{TP}{TP+FP} = \frac{0}{0+0} = ?\% 
    
   
 Precision=TP+FPTP​=0+00​=?%

没有结果预测成为S07_A_01,已经可以看出来是一个失败的分类。


3. 召回率(Recall)

召回率(Recall)又叫

查全率

,它是针对

原样本

而言的,它的含义是

在实际为正的样本中被预测为正样本的概率

,其公式如下:

      R 
     
    
      e 
     
    
      c 
     
    
      a 
     
    
      l 
     
    
      l 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
   
     Recall = \frac{TP}{TP+FN} 
    
   
 Recall=TP+FNTP​

也就是只看分类所在列,对于S07_A_normal来说:

      R 
     
    
      e 
     
    
      c 
     
    
      a 
     
    
      l 
     
    
      l 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
      = 
     
     
     
       800 
      
      
      
        800 
       
      
        + 
       
      
        0 
       
      
     
    
      = 
     
    
      100.00 
     
    
      % 
     
    
   
     Recall = \frac{TP}{TP+FN} = \frac{800}{800+ 0} = 100.00\% 
    
   
 Recall=TP+FNTP​=800+0800​=100.00%

所有的S07_A_normal都被识别出来,很成功。

对于S07_A_normal来说:

      R 
     
    
      e 
     
    
      c 
     
    
      a 
     
    
      l 
     
    
      l 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
      = 
     
     
     
       0 
      
      
      
        0 
       
      
        + 
       
      
        ( 
       
      
        2 
       
      
        + 
       
      
        2 
       
      
        ) 
       
      
     
    
      = 
     
    
      0.00 
     
    
      % 
     
    
   
     Recall = \frac{TP}{TP+FN} = \frac{0}{0+ (2+2)} = 0.00\% 
    
   
 Recall=TP+FNTP​=0+(2+2)0​=0.00%

所有的S07_A_01都没被识别出来,很失败。

对比高达99.64%的准确率,召回率更能反映S07_A_01的实际性能。


4. F1分数

1. 概念

通过上面的公式,我们发现:精准率和召回率的分子是相同,都是TP,但分母是不同的,一个是(TP+FP),一个是(TP+FN)。两者的关系可以用一个P-R图来展示:

      F 
     
    
      1 
     
    
      = 
     
     
      
      
        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 = \frac{2 \times Precision \times Recall}{Precision + Recall} 
    
   
 F1=Precision+Recall2×Precision×Recall​

在这里插入图片描述

对于图中,

交点乘积最大值——面积最大值

即为该分类的F1值。

不过对于连续光滑的曲线,F1最大值点为 Precision=Recall 的直线与PR曲线的交点。

在这里插入图片描述

那么应该都很好奇,不是前面计算S07_A_1的Recall和Precision都是0%吗?为什么该处就有值了?

那先要引入一个概念:置信度(Confidence)


2. 置信度(Confidence)

在获取最优F1前,先理解置信度的设定。

置信度(Confidence)可以理解为阈值,如我之前设定50%以上就判断为真,现在设定10%以上就为真,那么:

TP、FP个数就加多

(模型会把更多该分类或不是该分类的标签认定为该分类)。

继而

TN、FN个数会减少

,因此Prediction和Recall都会因为置信度的改变而变化。

相反,如果我现在设定90%以上才为真,那么:

TP、FP个数就减少

(模型会把更多该分类或不是该分类的标签认定为其他该分类)

继而

TN、FN个数会增多

一般来说,

置信度设定越大,Prediction约接近1,Recall越接近0。

因此,要寻找

最优的F1分数,需要遍历置信度。

在这里插入图片描述
在这里插入图片描述


3. F1曲线图判断

在这里插入图片描述

F1分数置于[0,1]间,越接近1是越好的,没有例外。

由上可以看出,在置信度为6.3%的情况下,模型整体的最高F1分数为0.63,并不是一个好的模型。


三、mAP、ROC、AUC

1. 总体平均精确度:mAP(mean Average Precision)

将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即mAP

在这里插入图片描述
mAP值越接近1说明模型越优秀。

肯定多少有些疑惑,mAP@0.5后面的0.5代表什么含义。

这里就要再引入一个概念,重叠度:Intersection over Union(IoU)


重叠度:Intersection over Union(IoU)

IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。

以下举个例子来简要说明:

在这里插入图片描述

因此IoU=0.5就是预测框和标注框的交集与非交集占比相同,都为50%。

显而易见的是,IoU受confidence置信度影响,因此,对于IoU和confidence的调参也是一个需要注意的事情。


2. ROC(Receiver Operating Characteristic)

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC 曲线是基于混淆矩阵得出的。

类似于PR曲线一般,ROC是以FPR为横坐标,TPR为纵坐标所构建的曲线,因此在了解ROC前,首先先理解TPR和FPR。

设定以下模型:

在这里插入图片描述


TPR真正率(Sensitivity、True Positive Rate)

      T 
     
    
      P 
     
    
      R 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
   
     TPR = \frac{TP}{TP + FN} 
    
   
 TPR=TP+FNTP​

意为:

所有被预测为该分类的缺陷

真正属于该分类的缺陷

的比例。

举例:

在这里插入图片描述


FPR假正率(False Positive Rate)

      F 
     
    
      P 
     
    
      R 
     
    
      = 
     
     
      
      
        F 
       
      
        P 
       
      
      
      
        F 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
     
    
   
     FPR = \frac{FP}{FP + TN} 
    
   
 FPR=FP+TNFP​

意为:

所有其他分类的缺陷

被认为是该分类的缺陷

的比例。

举例:
在这里插入图片描述


可以看出,真正率仅仅是对标注为鸟(

该分类——正样本

)的判断,假正率仅仅是对标注不为鸟(

非该分类的所有分类——负样本

)的判断。

也就是说,无论正样本和负样本的数量差距有多少,这两种比率仅会在其对应的正样本或者负样本中计算,没有交叉,因此可以

无视正负样本比例

,并不会像Accuary准确率那样受正负样本比例影响非常大。
(具体可以参考一下S07_A_1的准确率)


通过定义的解释,不难看出,想要模型更加优秀,假正率FPR越低越好,真正率TPR越高越好。

也就是:

TP↑、TN↑、FP↓、FN↓

因此,ROC曲线同PR曲线,一样受到置信度的影响,所以他也和PR曲线一样遍历置信度绘制:

在这里插入图片描述

可以看出,对于ROC曲线,左上角最大值点越接近 [0,1] 越好,可以说曲线与 TPR = 0 和 FPR = 1的直线相交面积越大越好,这个面积称为AUC。


3. AUC(Area Under roc Curve)

先看我前言提到的这篇文章——什么是ROC曲线?为什么要使用ROC?以及 AUC的计算

这文章已经非常详细地介绍了ROC和AUC。


AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

在这里插入图片描述

简单来说,AUC 的一般判断标准:

0.5 – 0.7: 效果较低,但用于预测股票已经很不错了

0.7 – 0.85: 效果一般

0.85 – 0.95: 效果很好

0.95 – 1: 效果非常好,但一般不太可能



(扩展:Yolov5 训练所生成的所有文件)

最后再给一个链接解释所有yolov5所生成的训练文件:

yolov5 训练结果解析


本文转载自: https://blog.csdn.net/Emins/article/details/125484539
版权归原作者 Emins 所有, 如有侵权,请联系我们删除。

“机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)”的评论:

还没有评论