机器学习笔记-准确率、错误率、精确率、召回率、F1-Score、PR曲线 & ROC曲线

时间:2024-02-21 11:23:19

准确率、错误率、精确率、召回率、F1-Score、PR曲线 & ROC曲线


目录

  1. 混淆矩阵
  2. 错误率
  3. 准确率
  4. 精确率
  5. 召回率
  6. P-R曲线
  7. \(F_1\)-Score
  8. ROC与AUC

在机器学习问题中,对学习得到的模型的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,这意味着模型的"好坏"是相对的,什么样的模型是好的?不仅取决于算法和数据,还决定于任务需求。

这篇笔记记录一些分类问题中常用的性能度量。以二分类问题为例:

1. 混淆矩阵

混淆矩阵是数据科学、数据分析和机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型作出的分类判断两个标准进行汇总。混淆矩阵显示了分类模型在进行预测时会对哪一部分产生混淆。它不仅可以让你了解分类模型所犯的错误,更重要的是可以了解哪些错误类型正在发生。正是这种对结果的分解克服了仅使用分类准确率所带来的局限性。

对于二分类问题,可将样例根据其真实类别与模型预测类别的组合划分为真正例 (true positive) 、假正例 (false positive) 、真反例 (true negative) 、假反例 (false negative) 四种情形,令TP、FP、TN、FN分别表示其对应的样例数。分类结果的"混淆矩阵" (confusion matrix) 如下表所示:

真实情况 预测结果
正例 反例
正例 TP FN
反例 FP TN

TP: True Positive(也称真阳性),表示被预测为正例,实际也是正例;

FP: False Positive(也称假阳性),表示被预测为正但实际是负例;

FN: False Negative(也称假阴性),表示被预测为负例但实际是正例;

TN: True Negative(也称真阴性),表示预测为负,实际也是负;

TP+FP: 表示被预测为正例的所有样例;

TP+FN: 表示实际为正的所有样例;

TP+FP+TN+FN:表示样例总数。

我们通常是把自己关心的问题定为正例,如买西瓜肯定要买好瓜,则好瓜是正例;预测患者患有某种疾病,那么患病则为正例。

接下来我们假设给定数据集\(D=\{(\pmb x_1,y_1),(\pmb x_2,y_2), \dots, (\pmb x_m,y_m)\}\),其中\(y_i\)是样例\(\pmb x_i\)的真实标记。要评估模型的性能,就要模型的预测结果\(f(\pmb x)\)与真实标记\(y\)进行比较。

2. 错误率

错误率是分类错误的样本数占样本总数的的比例,对于样例集\(D\),分类错误率定义为

\[E(f;D) = \frac{1}{m}\sum_{i=1}^mI(f(\pmb x_i) \ne y_i) \tag{1} \]

使用混淆矩阵的标记则为:

\[Err = \frac{FP+FN}{TP+TN+FP+FN} \tag{2} \]

3. 准确率

准确率(Accuracy)是分类正确的样本数占样本总数的比例。定义为

\[\begin{aligned} acc(f:D) & = \frac{1}{m}\sum_{i=1}^mI(f(\pmb x_i) = y_i) \\ & = 1 - E(f;D) \end{aligned} \tag{3}\]

使用混淆矩阵的标记则为:

\[Acc = \frac{TP+TN}{TP+TN+FP+FN} \tag{4} \]

准确率看上去是一个不错的评判标准,但在实际当中往往却存在着一些问题。其主要问题在于它隐藏了我们需要的细节,从而阻碍我们更好地理解分类模型的性能。 有两个最常见的例子:

  1. 当我们的数据有2个以上的类时,如3个或更多类,我们可以得到80%的分类准确率,但是我们却不知道是否所有的类别都被预测得同样好,或者说模型是否忽略了一个或两个类;

  2. 比如在样本集中,正样本有90个,负样本有10个,样本是严重的不均衡。对于这种情况,我们只需要将全部样本预测为正样本,就能得到90%的准确率,但是完全没有意义。对于新数据,完全体现不出准确率。因此,在样本不平衡的情况下,得到的高准确率没有任何意义,此时准确率就会失效。所以,我们需要寻找新的指标来评价模型的优劣。

4. 精确率

精确率(Precision),也被称为精确率,是针对预测结果而言的,其含义是在所有被预测为正例的样本中实际为正例样本的比率,表达式为

\[P = \frac{TP}{TP+FP} \tag{5} \]

精确率和准确率看上去有些类似,但是是两个完全不同的概念。精确率代表对正样本结果中的预测准确程度,准确率则代表整体的预测准确程度,包括正样本和负样本。

比如,瓜农拉来了一车西瓜,这时我们可能不太关心这一车瓜中有多少好瓜,而更关心“自己挑中的瓜(挑中的瓜就是我们预测的好瓜)中有多少好瓜”。

再如,在信息检索中,我们经常会关心"检索出的信息中有多少比例是用户感兴趣的"

5. 召回率

召回率(Recall),也称为查全率,是针对原样本而言的,其含义是在实际为正例的样本中被预测为正例的比率

\[R = \frac{TP}{TP+FN} \tag{6} \]

同样用上边的例子,召回率则表示“所有好瓜中有多少比例被挑了出来”,或者是说“用户感兴趣的信息中有多少被检索出来了”

下面我们通过一个简单例子来看看精确率和召回率。假设一共有10篇文章,里面4篇是你要找的。根据你的算法模型,你找到了5篇,但实际上在这5篇之中,只有3篇是你真正要找的。得到的混淆矩阵为

真正想要的 实际找到的
正例 反例
正例 3 1
反例 2 4

那么算法的精确率是3/5=60%,也就是你找的这5篇,有3篇是真正对的。算法的召回率是3/4=75%,也就是需要找的4篇文章,你找到了其中3篇。以精确率还是以召回率作为评价指标,需要根据具体问题而定。精确率和召回率是既矛盾又统一的两个指标,为了提高精确率,分类器需要尽量在“更高把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致召回率降低。

通俗点说,精确率就是找得对,召回率就是找得全。

6. P-R曲线

在很多情形下,我们可根据模型的预测结果对样例进行排序,排在前面的是模型认为"最可能"是正例的样本,排在最后的则是模型认为"最不可能"是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的精确率和召回率。以精确率为纵轴、召回率为横轴作图 ,就得到了精确率-召回率(Precision-Recall)曲线,简称"P-R曲线",显示该曲线的图称为"P-R图",图1给出了一个示意图。


图1 P-R曲线与平衡点示意图(来自:机器学习-周志华)

注意:为绘图方便和美观,示意图显示出单调平滑曲线,但现实任务中的P-R曲线常是非单调、不平滑的,在很多局部有上下波动。

从另一个角度说,P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。以逻辑回归举例,其输出值是0-1之间的数字。因此,如果我们想要判断用户的好坏,那么就必须定一个阈值。比如大于0.5指定为好用户,小于0.5指定为坏用户,然后就可以得到相应的精确率和召回率。但问题是,这个阈值是我们随便定义的,并不知道这个阈值是否符合我们的要求。因此为了寻找一个合适的阈值,我们就需要遍历0-1之间所有的阈值,而每个阈值都对应一个精确率和召回率,从而就能够得到上述曲线。

P-R图直观地显示出模型在样本总体上的召回率、精确率。在进行比较时,若一个模型的P-R曲线被另一个模型的曲线完全"包住",则可断言后者的性能优于前者,例如图1中模型A的性能优于模型C; 如果两个模型的P-R曲线发生了交叉,例如图1中的A与B,则难以一般性地断言两者孰优孰劣,只能在具体的精确率或召回率条件下进行比较。然而,在很多情形下,人们往往仍希望把学习器A与B比出个高低。这时一个比较合理的判据是比较P-R曲线下面积的大小,它在一定程度上表征了模型在精确率和召回率上取得相对"双高"的比例。但这个值不太容易估算,因此,人们设计了一些综合考虑精确率、 召回率的性能度量。

7. \(F_1\)-Score 和 \(F_\beta\)-Score

“平衡点”(Break-Event Point,简称BEP)就是一个综合考虑精确率和召回率的指标,它是“精确率=召回率”时的取值。如图1所示,模型C的BEP是0.64,而基于BEP的比较,可认为模型A优于B。

但是BEP还是过于简化了,更常用的是\(F_1\)度量,也称F1分数、\(F_1\)-Score或\(F_1\)-Measure

\[F_1= \frac{2\times P \times R}{P+R} = \frac{2 \times TP}{样本总数 + TP - TN} \tag{7} \]

在一些应用中,对精确率和召回率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时精确率更重要,而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时召回率更重要。\(F_\beta\)-Score是\(F_1\)-Score的一般形式,能够让我们表达出对精确率和召回率的不同偏好,它的定义为

\[F_\beta = \frac{(1+\beta^2)\times P \times R}{(\beta^2 \times P)+R}\tag{8} \]

其中,\(\beta \gt 0\)度量了召回率对精确率的相对重要性。\(\beta =1\)时退化为标准的\(F_1\)\(\beta \gt 1\)时召回率有更大的影响,\(\beta \lt 1\)时精确率有更大影响。

\(F_\beta\)的物理意义就是将精准率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是精准率的\(\beta\)倍。\(F_1\)分数认为召回率和精准率同等重要,\(F_2\)分数认为召回率的重要程度是精准率的2倍,而\(F_{0.5}\)分数认为召回率的重要程度是精准率的一半。

这里简单补充说明一下\(F_1\)-Score,\(F_1\)-Score是基于精确率与召回率的调和平均,对精确率与召回率进行平均的一个结果。该算法的特点就是会更多聚焦在较低的值,所以会对每个指标非常重视

平均算法有四个:

调和平均数:\(H_n=\dfrac{n}{(\frac{1}{a_1}+\frac{1}{a_2}+\dots+\frac{1}{a_n})}\)

几何平均数:\(G_n=(a_1\times {a_2} \times \dots \times {a_n})^{\frac{1}{n}}\)

算术平均数:\(A_n=\dfrac{a_1+a_2+\dots+a_n}{n}\)

平方平均数:\(Q_n=\sqrt{\cfrac{a_1^2+a_2^2+\dots+a_n^2}{n}}\)

这四种平均数满足\(H_n ≤ G_n ≤ A_n ≤ Q_n\)

看harmony公式变形:\(H_n= \dfrac{2\times a \times b}{a+b}\),若\(a+b\)恒等于1,\(a\times b=a\times (1-a) = -a^2+a\);令其导数\(-2a+1=0\),则\(a=0.5\)时值最大;\(H_n\)的最大值为0.5,从这里可以看出如果\(a+b\)有约束的情况下,\(a\)\(b\)越接近值越大;

\(F_1\)-Score这里,\(a\)\(b\)不存在共同约束,只有\(0\le a \le 1\)\(0\le b \le 1\); 所以最大值不是0.5,比如说\(Hn=2\times 1 \times 1/(1+1)=1\),这也是最完美的,精确率与召回率都是100%。

8. ROC与AUC

正式介绍ROC和AUC之前,还需要再介绍两个指标,真正例率(True Positive Rate, TPR)假正例率(False Positive Rate, FPR)

真正例率(TPR):灵敏度(Sensitivity),预测为正例且实际为正例的样本占所有正例样本的比例。

\[TPR = \dfrac{TP}{TP+FN} \tag{9} \]

假正例率(FPR):1-特异度(Specificity),预测为正例但实际为负例的样本占所有负例样本的比例

\[FPR = \dfrac{FP}{FP+TN} \tag{10} \]

举个例子解释一下,以医院诊断病人为例。 假设有10位疑似癌症患者,其中有3位很不幸确实患了癌症(TP+FN=3),另外7位不是癌症患者(FP+TN=7) 。医院对这10位疑似患者做了诊断,诊断出3位癌症患者,其中有2位确实是真正的患者(TP=2)。那么真正例率TPR=TP/(TP+FN)=2/3。对于7位非癌症患者来说,有一位很不幸被误诊为癌症患者(FP=1),那么假正例率FPR=FP/(FP+TN)=1/7。

8.1 ROC

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,它源于"二战"中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,此后被引入机器学习领域。

与上述的P-R曲线相似,ROC曲线是通过移动分类模型的分类阈值来生成曲线上的一组关键点的。我们根据模型的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出TPR和FPR的值,以FPR为横坐标、TPR为纵坐标作图,就得到了ROC曲线

显示ROC曲线的图称为ROC图。如图2所示,对角线对应于“随机猜测”模型,而点(0, 1)则对应于将所有的正例排在所有的反例之前的“理想模型”。ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。


图2 ROC 曲线与AUC示意图(来自:机器学习-周志华)

现实任务中通常是利用有限个测试样例来绘制ROC图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生图2中的光滑ROC曲线,只能绘制出如图2所示的近似ROC曲线。下面举个例子演示ROC曲线的绘制过程:

在二值分类问题中,模型的输出一般都是预测样本为正例的概率或者[0.0, 1.0]之间的实值。假设测试集中有20个样本,表1是模型的输出结果。样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会判为负例。比如,在表1中如果指定阈值为0.9,则只有第一个样本会被预测为正例,其他全部为负例。


表1 二值分类模型的输出结果样例

通过动态的调整阈值,从最高的得分开始(实际上是从正无穷开始,对应着ROC曲线的零点),逐渐调整到最低得分,每一个阈值都会对应一个FPR和TPR。

就本例来说,当阈值选择为正无穷时,模型把全部样本预测为负例,那么FP和TP必然都为0, FPR和TPR也都为0,因此曲线的第一个点的坐标就是(0, 0)。 当把阈值调整为0.9时,模型预测l号样本为正样本,并且该样本确实是正样本,因此,TP=1, 20个样本中,所有正例数量为TP+FN=10 ,故TPR=TP/(TP+FN)=1/10;这里没有预测错的正样本,即FP=0,负样本总数FP+TN=10 ,故FPR=FP/(FP+TN)=0,对应ROC曲线上的点(0, 0.1)。依次调整阈值,直到画出全部的关键点,再连接关键点即得到最终的ROC曲线,如图3所示。


图3 ROC曲线

进行模型的比较时,与P-R图相似,若一个模型的ROC曲线被另一个模型的曲线完全"包住", 则可断言后者的性能优于前者,若两个模型的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下 的面积,即AUC(Area Under ROC Curve),如图2所示。

8.2 AUC

AUC(Area Under ROC Curve)指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于\(y=x\)这条直线的上方(如果不是的话,只要把模型预测的概率反转成\(1-p\)就可以得到一个更好的分类器),所以AUC的取值一般在0.5~l之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

从AUC判断分类器(预测模型)优劣的标准:

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

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

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

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

总之,AUC的值越大,模型的性能越好

8.3 ROC曲线和P-R曲线的特点

从TPR和FPR的定义可以看出,TPR和FPR分别是基于实际表现1、0出发的,也就是说在实际的正样本和负样本中来观察相关概率问题。因此,无论样本是否均衡,都不会被影响。

如上面提过的例子,总样本中有90%的正样本,10%的负样本。TPR能够得到90%正样本中有多少是被真正覆盖的,而与那10%负样本无关。同理FPR能够得到10%负样本中有多少是被覆盖的,而与那90%正样本无关。因此我们从实际表现的各个结果出发,就能避免样本不平衡的问题,因此,ROC曲线无视样本间的不平衡问题。不论样本比例如何改变,ROC曲线都几乎没有影响。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。而当正负样本的分布发生变化时,P-R曲线的形状一般会发生较剧烈的变化。

需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映真性能。

 

 

开心吧

上英语课的时候,老师问我:Do you have a girlfriend?
我笑着回答:Yes and she’s from another nation.
老师接着问:Which nation?.....
我说:Imagination.

 

 

参考来源
1)机器学习 - 周志华
2)百面机器学习-算法工程师带你去面试
3)https://www.jianshu.com/p/66dc6ba84ff9
4)详解准确率、精确率、召回率、F1值等评价指标的含义
5)https://blog.csdn.net/ningyanggege/article/details/81660950 F1 score的意义
6)https://blog.csdn.net/u013063099/article/details/80964865