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

文章目录

前言

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

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

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

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

一、混淆矩阵(confusion matrix)

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

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

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(缺陷的图片被错误识别为背景):

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

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

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

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

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

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

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

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

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

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

实际上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}A c c u r a c y =T P +F P +T N +F N T P +T N ​

本缺陷的正确分类预测加上 非本缺陷被预测为其他分类缺陷或背景除以总预测数量。

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

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

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\%A c c u r a c y =T P +F P +T N +F N T P +T N ​=8 0 0 +(5 +1 0 0 +2 )+(2 0 0 +2 )+0 8 0 0 +(2 0 0 +2 )​=9 0 .3 5 %

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

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

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\%A c c u r a c y =T P +F P +T N +F N T P +T N ​=0 +0 +(2 0 0 +1 0 0 +5 +8 0 0 )+(2 +2 )0 +(2 0 0 +1 0 0 +5 +8 0 0 )​=9 9 .6 4 %

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

总体准确率:

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

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\%A c c u r a c y =所有样本数正方形k =−1 的对角线值​=2 +2 0 0 +2 +1 0 0 +8 0 0 +5 0 +2 0 0 +0 +8 0 0 +0 )​=9 0 .1 7 %

若是以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}P r e c i s i o n =T P +F P T P ​

也就是只看分类所在行,对于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\%P r e c i s i o n =T P +F P T P ​=8 0 0 +(2 +1 0 0 +5 )8 0 0 ​=8 8 .2 0 %

结果来说,略低于准确率的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} = ?\%P r e c i s i o n =T P +F P T P ​=0 +0 0 ​=?%

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

3. 召回率(Recall)

召回率(Recall)又叫 查全率,它是针对 原样本而言的,它的含义是 在实际为正的样本中被预测为正样本的概率,其公式如下:

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

也就是只看分类所在列,对于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\%R e c a l l =T P +F N T P ​=8 0 0 +0 8 0 0 ​=1 0 0 .0 0 %

所有的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\%R e c a l l =T P +F N T P ​=0 +(2 +2 )0 ​=0 .0 0 %

所有的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}F 1 =P r e c i s i o n +R e c a l l 2 ×P r e c i s i o n ×R e c a l l ​

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

对于图中, 交点乘积最大值——面积最大值即为该分类的F1值。

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

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

那么应该都很好奇,不是前面计算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分数,需要遍历置信度。

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

3. F1曲线图判断

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

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

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

; 三、mAP、ROC、AUC

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

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

机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)
mAP值越接近1说明模型越优秀。

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

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

; 重叠度:Intersection over Union(IoU)

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

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

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

因此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。

设定以下模型:

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

; TPR真正率(Sensitivity、True Positive Rate)

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

意为: 所有被预测为该分类的缺陷真正属于该分类的缺陷 的比例。

举例:

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

FPR假正率(False Positive Rate)

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

意为: 所有其他分类的缺陷被认为是该分类的缺陷 的比例。

举例:

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

可以看出,真正率仅仅是对标注为鸟( 该分类——正样本)的判断,假正率仅仅是对标注不为鸟( 非该分类的所有分类——负样本)的判断。

也就是说,无论正样本和负样本的数量差距有多少,这两种比率仅会在其对应的正样本或者负样本中计算,没有交叉,因此可以 无视正负样本比例,并不会像Accuary准确率那样受正负样本比例影响非常大。
(具体可以参考一下S07_A_1的准确率)

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

也就是:

TP↑、TN↑、FP↓、FN↓

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

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

可以看出,对于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,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

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

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

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

0.7 – 0.85: 效果一般

0.85 – 0.95: 效果很好

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

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

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

yolov5 训练结果解析

Original: https://blog.csdn.net/Emins/article/details/125484539
Author: Emins
Title: 机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/661395/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球