本文将介绍机器学习算法中很重要的知识—分类(classification),即找一个函数判断输入数据所属的类别,可以是二类别问题(是/不是),也可以是多类别问题(在多个类别中判断输入数据具体属于哪一个类别)。与回归问题(regression)相比,分类问题的输出不再是连续值,而是离散值,用来指定其属于哪个类别。分类问题在现实中应用十分普遍,比如垃圾邮件识别,手写数字识别,人脸识别,语音识别等。
逻辑回归返回的是概率。你可以“原样”使用返回的概率(例如,用户点击此广告的概率为 0.00023),也可以将返回的概率转换成二元值(例如,这封电子邮件是垃圾邮件)。
如果某个逻辑回归模型对某封电子邮件进行预测时返回的概率为 0.9995,则表示该模型预测这封邮件非常可能是垃圾邮件。相反,在同一个逻辑回归模型中预测分数为 0.0003 的另一封电子邮件很可能不是垃圾邮件。可如果某封电子邮件的预测分数为 0.6 呢?为了将逻辑回归值映射到二元类别,你必须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件”。人们往往会认为分类阈值应始终为 0.5,但阈值取决于具体问题,因此你必须对其进行调整。
我们将在后面的部分中详细的介绍可用于对分类模型的预测做评估的指标,以及更改分类阈值对这些预测的影响。
“调整”逻辑回归的阈值不同于调整学习速率等超参数。在选择阈值时,需要评估你将因犯错而承担多大的后果。例如,将非垃圾邮件误标记为垃圾邮件会很糟糕。不过,虽然将垃圾邮件误标记为非垃圾邮件会令人不快,但应该不会让你丢掉工作。
在本部分,我们将定义用于评估分类模型指标的主要组成部分先。不妨,我们从一则寓言故事开始:
伊索寓言:狼来了(精简版) 有一位牧童要照看镇上的羊群,但是他开始厌烦这份工作。为了找点乐子,他大喊道:“狼来了!”其实根本一头狼也没再次出现。村民们迅速跑来保护羊群,但他们发现这个牧童是在开玩笑后非常生气。(这样的情形重复出现了很多次。)...一天晚上,牧童看到真的有一头狼靠近羊群,他大声喊道:“狼来了!”村民们不想再被他捉弄,都待在家里不出来。这头饥饿的狼对羊群大开杀戒,美美饱餐了一顿。这下子,整个镇子都揭不开锅了。恐慌也随之而来。
我们能够正常的使用一个 2x2的混淆矩阵来总结我们的“狼预测”模型,该矩阵描述了所有可能出现的结果(共四种):
真正例是指模型将正类别样本正确地预测为正类别。同样,真负例是指模型将负类别样本正确地预测为负类别。
假正例是指模型将负类别样本错误地预测为正类别,而假负例是指模型将正类别样本错误地预测为负类别。
在后面的部分中,我们将介绍怎么样去使用从这四种结果中衍生出的指标来评估分类模型。
准确率是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。正式点说,准确率的定义如下:
其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。让我们来试着计算一下以下模型的准确率,该模型将 100 个肿瘤分为恶性 (正类别)或良性(负类别):
准确率为 0.91,即 91%(总共 100 个样本中有 91 个预测正确)。这表示我们的肿瘤分类器在识别恶性肿瘤方面表现得很出色,对吧?
实际上,只要我们仔细分析一下正类别和负类别,就可以更好地了解我们模型的效果。
在 91 个良性肿瘤中,该模型将 90 个正确识别为良性。这很好。不过,在 9 个恶性肿瘤中,该模型仅将 1 个正确识别为恶性。这是多么可怕的结果!9 个恶性肿瘤中有 8 个未被诊断出来!
虽然 91% 的准确率可能乍一看还不错,但如果另一个肿瘤分类器模型总是预测良性,那么这个模型使用我们的样本做预测也会实现相同的准确率(100 个中有 91 个预测正确)。换言之,我们的模型与那些没有预测能力来区分恶性肿瘤和良性肿瘤的模型差不多。
当你使用分类不平衡的数据集(比如正类别标签和负类别标签的数量之间有明显差异)时,单单准确率一项并不能反映全面情况。
在下一部分中,我们将介绍两个可以更加好地评估分类不平衡问题的指标:精确率和召回率。
一只造价昂贵的机器鸡每天要穿过一条交通繁忙的道路一千次。某个机器学习模型评估交通模式,预测这只鸡何时可以安全穿过街道,准确率为 99.99%。
一种致命但可治愈的疾病影响着 0.01% 的人群。某个机器学习模型使用其症状作为特征,预测这种疾病的准确率为 99.99%。
在 roulette 游戏中,一只球会落在旋转轮上,并且最终落入 38 个槽的其中一个内。某个机器学习模型能够正常的使用视觉特征(球的旋转方式、球落下时旋转轮所在的位置、球在旋转轮上方的高度)预测球会落入哪个槽中,准确率为 4%。
精确率指标尝试回答以下问题:在被识别为正类别的样本中,确实为正类别的比例是多少?
该模型的精确率为 0.5,也就是说,该模型在预测恶性肿瘤方面的正确率是 50%。
召回率尝试回答以下问题:在所有正类别样本中,被正确识别为正类别的比例是多少?
该模型的召回率是 0.11,也就是说,该模型能够正确识别出所有恶性肿瘤的百分比是 11%。
要全面评估模型的有效性,必须同时检查精确率和召回率。遗憾的是,精确率和召回率往往是此消彼长的情况。也就是说,提高精确率通常会降低召回率值,反之亦然。请观察下图来了解这一概念,该图显示了电子邮件分类模型做出的 30 项预测。分类阈值右侧的被归类为“垃圾邮件”,左侧的则被归类为“非垃圾邮件”。
精确率指的是被标记为垃圾邮件的电子邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:
召回率指的是实际垃圾邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:
假正例数量会减少,但假负例数量会相应地增加。结果,精确率有所提高,而召回率则有所降低:
相反,图 3 显示了降低分类阈值(从图 1 中的初始位置开始)产生的效果。
假正例数量会增加,而假负例数量会减少。结果这一次,精确率有所降低,而召回率则有所提高:
我们已根据精确率和召回率指标制定了各种指标。有关示例,请参阅 F1 值。
让我们以一种将电子邮件分为“垃圾邮件”或“非垃圾邮件”这两种类别的分类模型为例。如果提高分类阈值,精确率会怎样?
让我们以一种将电子邮件分为“垃圾邮件”或“非垃圾邮件”这两种类别的分类模型为例。如果提高分类阈值,召回率会怎样?
以两个模型(A 和 B)为例,这两个模型分别对同一数据集做评估。以下哪一项陈述属实?
ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果图表。该曲线绘制了以下两个参数:
ROC 曲线用于绘制采用不一样分类阈值时的 TPR 与 FPR。降低分类阈值会导致将更多样本归为正类别,从而增加假正例和真正例的个数。下图显示了一个典型的 ROC 曲线. 不同分类阈值下的 TP 率与 FP 率
为了计算 ROC 曲线上的点,我们大家可以使用不同的分类阈值多次评估逻辑回归模型,但这样做效率非常低。幸运的是,有一种基于排序的高效算法可以为咱们提供此类信息,这种算法称为曲线 曲线下面积:ROC 曲线下面积
曲线下面积表示“ROC 曲线下面积”。也就是说,曲线) 之间整个 ROC 曲线以下的整个二维面积(参考积分学)。
不过,这两个原因都有各自的局限性,这有几率会使曲线下面积在某些用例中不太实用:
并非总是希望尺度不变。例如,有时我们很需要被良好校准的概率输出,而曲线下面积无法告诉我们这一结果。
并非总是希望分类阈值不变。在假负例与假正例的代价存在比较大差异的情况下,最好能够降低一种类型的分类错误可能至关重要。例如,在进行垃圾邮件检测时,你可能希望第一先考虑最好能够降低假正例(即使这会导致假负例大幅度的增加)。对此类优化,曲线下面积并非一个实用的指标。
将给定模型的所有预测结果都乘以 2.0(例如,如果模型预测的结果为 0.4,我们将其乘以 2.0 得到 0.8),会使按 AUC 衡量的模型效果产生何种变化?
这会使 AUC 变得更好,因为预测值之间相差都很大。没有变化。AUC 只关注相对预测分数。这会使 AUC 变得很糟糕,因为预测值现在相差太大。
如果出现非常高的非零预测偏差,则说明模型某处存在错误,因为这表明模型对正类别标签的出现频率预测有误。
例如,假设我们大家都知道,所有电子邮件中平均有 1% 的邮件是垃圾邮件。如果我们对某一封给定电子邮件一无所知,则预测它是垃圾邮件的可能性为 1%。同样,一个出色的垃圾邮件模型应该预测到电子邮件平均有 1% 的可能性是垃圾邮件。(换言之,如果我们计算单个电子邮件是垃圾邮件的预测可能性的平均值,则结果应该是 1%。)然而,如果该模型预测电子邮件是垃圾邮件的平均可能性为 20%,那么我们大家可以得出结论,该模型出现了预测偏差。
逻辑回归可预测 0 到 1 之间的值。不过,所有带标签样本都正好是 0(例如,0 表示“非垃圾邮件”)或 1(例如,1 表示“垃圾邮件”)。因此,在检查预测偏差时,你无法仅根据一个样本准确地确定预测偏差;你必须在“一大桶”样本中检查预测偏差。也就是说,只有将足够的样本组合在一起以便能够比较预测值(例如 0.392)与观察值(例如 0.394),逻辑回归的预测偏差才有意义。