正样例与负样例
预计用时:5 分钟
在本部分,我们将定义用于评估分类模型的指标的主要组成部分。不过,我们先来看一则寓言故事:
伊索寓言:狼来了(精简版)
有一位牧童要照看镇上的羊群,但是他开始厌烦这份工作。为了找点乐子,他大喊道:“狼来了!”其实根本一头狼也没有出现。村民们迅速跑来保护羊群,但他们发现这个牧童是在开玩笑后非常生气。
[这样的情形重复出现了很多次。]
一天晚上,牧童看到真的有一头狼靠近羊群,他大声喊道:“狼来了!”村民们不想再被他捉弄,都待在家里不出来。这头饥饿的狼对羊群大开杀戒,美美饱餐了一顿。这下子,整个镇子都揭不开锅了。恐慌也随之而来。
我们做出以下定义:
- “狼来了”是正类别。
- “没有狼”是负类别。
我们可以使用一个 2x2 [混淆矩阵](/machine-learning/crash-course/glossary#confusion_matrix] 来总结我们的“狼预测”模型,该矩阵描述了所有可能出现的结果(共四种):
真正例 (TP):
|
假正例 (FP):
|
假负例 (FN):
|
真负例 (TN):
|
真正例是指模型将正类别样本正确地预测为正类别。同样,真负例是指模型将负类别样本正确地预测为负类别。
假正例是指模型将负类别样本错误地预测为正类别,而假负例是指模型将正类别样本错误地预测为负类别。
在后面的部分中,我们将介绍如何使用从这四种结果中衍生出的指标来评估分类模型。
准确率
预计用时:6 分钟
准确率是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。正式点说,准确率的定义如下:
对于二元分类,也可以根据正类别和负类别按如下方式计算准确率:
其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。
让我们来试着计算一下以下模型的准确率,该模型将 100 个肿瘤分为恶性(正类别)或良性(负类别):
真正例 (TP):
|
假正例 (FP):
|
假负例 (FN):
|
真负例 (TN):
|
准确率为 0.91,即 91%(总共 100 个样本中有 91 个预测正确)。这表示我们的肿瘤分类器在识别恶性肿瘤方面表现得非常出色,对吧?
实际上,只要我们仔细分析一下正类别和负类别,就可以更好地了解我们模型的效果。
在 100 个肿瘤样本中,91 个为良性(90 个 TN 和 1 个 FP),9 个为恶性(1 个 TP 和 8 个 FN)。
在 91 个良性肿瘤中,该模型将 90 个正确识别为良性。这很好。不过,在 9 个恶性肿瘤中,该模型仅将 1 个正确识别为恶性。这是多么可怕的结果!9 个恶性肿瘤中有 8 个未被诊断出来!
虽然 91% 的准确率可能乍一看还不错,但如果另一个肿瘤分类器模型总是预测良性,那么这个模型使用我们的样本进行预测也会实现相同的准确率(100 个中有 91 个预测正确)。换言之,我们的模型与那些没有预测能力来区分恶性肿瘤和良性肿瘤的模型差不多。
当您使用分类不平衡的数据集(比如正类别标签和负类别标签的数量之间存在明显差异)时,单单准确率一项并不能反映全面情况。
在下一部分中,我们将介绍两个能够更好地评估分类不平衡问题的指标:精确率和召回率。
精确率
精确率指标尝试回答以下问题:
在被识别为正类别的样本中,确实为正类别的比例是多少?
精确率的定义如下:
让我们来计算一下上一部分中用于分析肿瘤的机器学习模型的精确率:
| 真正例 (TP):1 | 假正例 (FP):1 |
| 假负例 (FN):8 | 真负例 (TN):90 |
该模型的精确率为 0.11,也就是说,该模型在预测恶性肿瘤方面的正确率是 50%。
召回率
召回率尝试回答以下问题:
在所有正类别样本中,被正确识别为正类别的比例是多少?
从数学上讲,召回率的定义如下:
让我们来计算一下肿瘤分类器的召回率:
| 真正例 (TP):1 | 假正例 (FP):1 |
| 假负例 (FN):8 | 真负例 (TN):90 |
该模型的召回率是 0.11,也就是说,该模型能够正确识别出所有恶性肿瘤的百分比是 11%。
精确率和召回率:一场拔河比赛
要全面评估模型的有效性,必须同时检查精确率和召回率。遗憾的是,精确率和召回率往往是此消彼长的情况。也就是说,提高精确率通常会降低召回率值,反之亦然。请观察下图来了解这一概念,该图显示了电子邮件分类模型做出的 30 项预测。分类阈值右侧的被归类为“垃圾邮件”,左侧的则被归类为“非垃圾邮件”。
图 1. 将电子邮件归类为垃圾邮件或非垃圾邮件。
我们根据图 1 所示的结果来计算精确率和召回率值:
| 真正例 (TP):8 | 假正例 (FP):2 |
| 假负例 (FN):3 | 真负例 (TN):17 |
精确率指的是被标记为垃圾邮件的电子邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:
召回率指的是实际垃圾邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:
图 2 显示了提高分类阈值产生的效果,实际上不是垃圾邮件
图 2. 提高分类阈值。
假正例数量会减少,但假负例数量会相应地增加。结果,精确率有所提高,而召回率则有所降低:
| 真正例 (TP):7 | 假正例 (FP):1 |
| 假负例 (FN):4 | 真负例 (TN):18 |
相反,图 3 显示了降低分类阈值(从图 1 中的初始位置开始)产生的效果。
图 3. 降低分类阈值。
假正例数量会增加,而假负例数量会减少。结果这一次,精确率有所降低,而召回率则有所提高:
| 真正例 (TP):9 | 假正例 (FP):3 |
| 假负例 (FN):2 | 真负例 (TN):16 |
我们已根据精确率和召回率指标制定了各种指标。
ROC与ROC曲线下面积预计用时:8 分钟ROC 曲线
ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表。该曲线绘制了以下两个参数:
- 真正例率
- 假正例率
真正例率 (TPR) 是召回率的同义词,因此定义如下:
假正例率 (FPR) 的定义如下:
ROC 曲线用于绘制采用不同分类阈值时的 TPR 与 FPR。降低分类阈值会导致将更多样本归为正类别,从而增加假正例和真正例的个数。下图显示了一个典型的 ROC 曲线
图 4. 不同分类阈值下的 TP 率与 FP 率。
为了计算 ROC 曲线上的点,我们可以使用不同的分类阈值多次评估逻辑回归模型,但这样做效率非常低。幸运的是,有一种基于排序的高效算法可以为我们提供此类信息,这种算法称为曲线下面积。
曲线下面积:ROC 曲线下面积
曲线下面积表示“ROC 曲线下面积”。也就是说,曲线下面积测量的是从 (0,0) 到 (1,1) 之间整个 ROC 曲线以下的整个二维面积(参考积分学)。
图 5. 曲线下面积(ROC 曲线下面积)。
曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。以下面的样本为例,逻辑回归预测从左到右以升序排列:
实际负例实际正例逻辑回归模型的输出图 6. 预测按逻辑回归分数以升序排列。
曲线下面积表示随机正类别(绿色)样本位于随机负类别(红色)样本右侧的概率。
曲线下面积的取值范围为 0-1。预测结果 100% 错误的模型的曲线下面积为 0.0;而预测结果 100% 正确的模型的曲线下面积为 1.0。
曲线下面积因以下两个原因而比较实用:
- 曲线下面积的尺度不变。它测量预测的排名情况,而不是测量其绝对值。
- 曲线下面积的分类阈值不变。它测量模型预测的质量,而不考虑所选的分类阈值。
不过,这两个原因都有各自的局限性,这可能会导致曲线下面积在某些用例中不太实用:
并非总是希望尺度不变。 例如,有时我们非常需要被良好校准的概率输出,而曲线下面积无法告诉我们这一结果。
并非总是希望分类阈值不变。 在假负例与假正例的代价存在较大差异的情况下,尽量减少一种类型的分类错误可能至关重要。例如,在进行垃圾邮件检测时,您可能希望优先考虑尽量减少假正例(即使这会导致假负例大幅增加)。对于此类优化,曲线下面积并非一个实用的指标。
逻辑回归预测应当无偏差。即:
“预测平均值”应当约等于“观察平均值”
预测偏差指的是这两个平均值之间的差值。即:
如果出现非常高的非零预测偏差,则说明模型某处存在错误,因为这表明模型对正类别标签的出现频率预测有误。
例如,假设我们知道,所有电子邮件中平均有 1% 的邮件是垃圾邮件。如果我们对某一封给定电子邮件一无所知,则预测它是垃圾邮件的可能性为 1%。同样,一个出色的垃圾邮件模型应该预测到电子邮件平均有 1% 的可能性是垃圾邮件。(换言之,如果我们计算单个电子邮件是垃圾邮件的预测可能性的平均值,则结果应该是 1%。)然而,如果该模型预测电子邮件是垃圾邮件的平均可能性为 20%,那么我们可以得出结论,该模型出现了预测偏差。
造成预测偏差的可能原因包括:
- 特征集不完整
- 数据集混乱
- 模型实现流水线中有错误?
- 训练样本有偏差
- 正则化过强
您可能会通过对学习模型进行后期处理来纠正预测偏差,即通过添加校准层来调整模型的输出,从而减小预测偏差。例如,如果您的模型存在 3% 以上的偏差,则可以添加一个校准层,将平均预测偏差降低 3%。但是,添加校准层并非良策,具体原因如下:
- 您修复的是症状,而不是原因。
- 您建立了一个更脆弱的系统,并且必须持续更新。
如果可能的话,请避免添加校准层。使用校准层的项目往往会对其产生依赖 - 使用校准层来修复模型的所有错误。最终,维护校准层可能会令人苦不堪言。