第12-1节 分类 (Classification)|机器学习速成课程

96
durian221783310
0.2 2018.08.03 20:02* 字数 8226

文章转载自Google,最近更新:2018-08-3

Google上线了一个“机器学习速成课程”,英文简称MLCC。这个课程节奏紧凑、内容实用。课程基本可以全程中文(包括视频),免费,并且有相关的练习.

如果可以翻墙的小伙伴,可以看看,链接如下:机器学习速成课程

具体内容如下:

1.指定阈值

逻辑回归返回的是概率。您可以“原样”使用返回的概率(例如,用户点击此广告的概率为 0.00023),也可以将返回的概率转换成二元值(例如,这封电子邮件是垃圾邮件)。

如果某个逻辑回归模型对某封电子邮件进行预测时返回的概率为 0.9995,则表示该模型预测这封邮件非常可能是垃圾邮件。相反,在同一个逻辑回归模型中预测分数为 0.0003 的另一封电子邮件很可能不是垃圾邮件。可如果某封电子邮件的预测分数为 0.6 呢?为了将逻辑回归值映射到二元类别,您必须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件”。人们往往会认为分类阈值应始终为 0.5,但阈值取决于具体问题,因此您必须对其进行调整。

我们将在后面的部分中详细介绍可用于对分类模型的预测进行评估的指标,以及更改分类阈值对这些预测的影响。

注意:“调整”逻辑回归的阈值不同于调整学习速率等超参数。在选择阈值时,需要评估您将因犯错而承担多大的后果。例如,将非垃圾邮件误标记为垃圾邮件会非常糟糕。不过,虽然将垃圾邮件误标记为非垃圾邮件会令人不快,但应该不会让您丢掉工作。

关键字词

  1. 二元分类 (binary classification)
    一种分类任务,可输出两种互斥类别之一。例如,对电子邮件进行评估并输出“垃圾邮件”或“非垃圾邮件”的机器学习模型就是一个二元分类器。

  2. 分类模型 (classification model)
    一种机器学习模型,用于区分两种或多种离散类别。例如,某个自然语言处理分类模型可以确定输入的句子是法语、西班牙语还是意大利语。请与回归模型进行比较。

2.分类 (Classification):真与假以及正类别与负类别

在本部分,我们将定义用于评估分类模型的指标的主要组成部分。不过,我们先来看一则寓言故事:

伊索寓言:狼来了(精简版)

有一位牧童要照看镇上的羊群,但是他开始厌烦这份工作。为了找点乐子,他大喊道:“狼来了!”其实根本一头狼也没有出现。村民们迅速跑来保护羊群,但他们发现这个牧童是在开玩笑后非常生气。

[这样的情形重复出现了很多次。]

一天晚上,牧童看到真的有一头狼靠近羊群,他大声喊道:“狼来了!”村民们不想再被他捉弄,都待在家里不出来。这头饥饿的狼对羊群大开杀戒,美美饱餐了一顿。这下子,整个镇子都揭不开锅了。恐慌也随之而来

我们做出以下定义:

  • “狼来了”是正类别。
  • “没有狼”是负类别。

我们可以使用一个 2x2 混淆矩阵来总结我们的“狼预测”模型,该矩阵描述了所有可能出现的结果(共四种):

真正例是指模型将正类别样本正确地预测为正类别。同样,真负例是指模型将负类别样本正确地预测为负类别。

假正例是指模型将负类别样本错误地预测为正类别,而假负例是指模型将正类别样本错误地预测为负类别。

在后面的部分中,我们将介绍如何使用从这四种结果中衍生出的指标来评估分类模型。

关键字词

  1. 混淆矩阵 (confusion matrix)
    一种 NxN 表格,用于总结分类模型的预测成效;即标签和模型预测的分类之间的关联。在混淆矩阵中,一个轴表示模型预测的标签,另一个轴表示实际标签。N 表示类别个数。在二元分类问题中,N=2。例如,下面显示了一个二元分类问题的混淆矩阵示例:

上面的混淆矩阵显示,在 19 个实际有肿瘤的样本中,该模型正确地将 18 个归类为有肿瘤(18 个真正例),错误地将 1 个归类为没有肿瘤(1 个假负例)。同样,在 458 个实际没有肿瘤的样本中,模型归类正确的有 452 个(452 个真负例),归类错误的有 6 个(6 个假正例)。

多类别分类问题的混淆矩阵有助于确定出错模式。例如,某个混淆矩阵可以揭示,某个经过训练以识别手写数字的模型往往会将 4 错误地预测为 9,将 7 错误地预测为 1。混淆矩阵包含计算各种效果指标(包括精确率和召回率)所需的充足信息。

  1. 负类别 (negative class)

二元分类中,一种类别称为正类别,另一种类别称为负类别。正类别是我们要寻找的类别,负类别则是另一种可能性。例如,在医学检查中,负类别可以是“非肿瘤”。在电子邮件分类器中,负类别可以是“非垃圾邮件”。另请参阅正类别

  1. 正类别 (positive class)

二元分类中,两种可能的类别分别被标记为正类别和负类别。正类别结果是我们要测试的对象。(不可否认的是,我们会同时测试这两种结果,但只关注正类别结果。)例如,在医学检查中,正类别可以是“肿瘤”。在电子邮件分类器中,正类别可以是“垃圾邮件”。与负类别相对。

  1. 真正例 (TP, true positive)

被模型正确地预测为正类别的样本。例如,模型推断出某封电子邮件是垃圾邮件,而该电子邮件确实是垃圾邮件。

  1. 真负例 (TN, true negative)

被模型正确地预测为负类别的样本。例如,模型推断出某封电子邮件不是垃圾邮件,而该电子邮件确实不是垃圾邮件。

3.分类 (Classification):准确率

准确率是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。正式点说,准确率的定义如下:

对于二元分类,也可以根据正类别和负类别按如下方式计算准确率:

其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。

让我们来试着计算一下以下模型的准确率,该模型将 100 个肿瘤分为恶性 (正类别)或良性(负类别):

准确率为 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 个预测正确)。换言之,我们的模型与那些没有预测能力来区分恶性肿瘤和良性肿瘤的模型差不多。

当您使用分类不平衡的数据集(比如正类别标签和负类别标签的数量之间存在明显差异)时,单单准确率一项并不能反映全面情况。

在下一部分中,我们将介绍两个能够更好地评估分类不平衡问题的指标:精确率和召回率。

关键字词

  1. 准确率 (accuracy)

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义如下:

二元分类中,准确率的定义如下:

  1. 分类不平衡的数据集 (class-imbalanced data set)

一种二元分类问题,在此类问题中,两种类别的标签在出现频率方面具有很大的差距。例如,在某个疾病数据集中,0.0001 的样本具有正类别标签,0.9999 的样本具有负类别标签,这就属于分类不平衡问题;但在某个足球比赛预测器中,0.51 的样本的标签为其中一个球队赢,0.49 的样本的标签为另一个球队赢,这就不属于分类不平衡问题。

4.分类 (Classification):精确率和召回率

精确率

精确率指标尝试回答以下问题:

在被识别为正类别的样本中,确实为正类别的比例是多少?

精确率的定义如下:


注意:如果模型的预测结果中没有假正例,则模型的精确率为 1.0。

让我们来计算一下上一部分中用于分析肿瘤的机器学习模型的精确率:


该模型的精确率为 0.5,也就是说,该模型在预测恶性肿瘤方面的正确率是 50%。

召回率

召回率尝试回答以下问题:

在所有正类别样本中,被正确识别为正类别的比例是多少?

从数学上讲,召回率的定义如下:

注意:如果模型的预测结果中没有假负例,则模型的召回率为 1.0。

让我们来计算一下肿瘤分类器的召回率:



该模型的召回率是 0.11,也就是说,该模型能够正确识别出所有恶性肿瘤的百分比是 11%。

精确率和召回率:一场拔河比赛

要全面评估模型的有效性,必须同时检查精确率和召回率。遗憾的是,精确率和召回率往往是此消彼长的情况。也就是说,提高精确率通常会降低召回率值,反之亦然。请观察下图来了解这一概念,该图显示了电子邮件分类模型做出的 30 项预测。分类阈值右侧的被归类为“垃圾邮件”,左侧的则被归类为“非垃圾邮件”。

图 1. 将电子邮件归类为垃圾邮件或非垃圾邮件

我们根据图 1 所示的结果来计算精确率和召回率值:

精确率指的是被标记为垃圾邮件的电子邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:


召回率指的是实际垃圾邮件中正确分类的电子邮件所占的百分比,即图 1 中阈值线右侧的绿点所占的百分比:

图 2 显示了提高分类阈值产生的效果。

图 2. 提高分类阈值

假正例数量会减少,但假负例数量会相应地增加。结果,精确率有所提高,而召回率则有所降低:

相反,图 3 显示了降低分类阈值(从图 1 中的初始位置开始)产生的效果。

图 3. 降低分类阈值

假正例数量会增加,而假负例数量会减少。结果这一次,精确率有所降低,而召回率则有所提高:


我们已根据精确率和召回率指标制定了各种指标。有关示例,请参阅 F1 值

关键字词

  1. 精确率 (precision)

一种分类模型指标。精确率指模型正确预测正类别的频率,即:

  1. 召回率 (recall)

一种分类模型指标,用于回答以下问题:在所有可能的正类别标签中,模型正确地识别出了多少个?即:

5.分类 (Classification):检查您的理解情况(准确率、精确率、召回率)

题目1:准确率

在以下哪种情况下,高的准确率值表示机器学习模型表现出色?
A、一只造价昂贵的机器鸡每天要穿过一条交通繁忙的道路一千次。某个机器学习模型评估交通模式,预测这只鸡何时可以安全穿过街道,准确率为 99.99%。

B、一种致命但可治愈的疾病影响着 0.01% 的人群。某个机器学习模型使用其症状作为特征,预测这种疾病的准确率为 99.99%。

C、在 roulette 游戏中,一只球会落在旋转轮上,并且最终落入 38 个槽的其中一个内。某个机器学习模型可以使用视觉特征(球的旋转方式、球落下时旋转轮所在的位置、球在旋转轮上方的高度)预测球会落入哪个槽中,准确率为 4%。

正确答案是C,具体解析如下:

A解析:在一条交通繁忙的道路上,99.99% 的准确率充分表明该机器学习模型的作用比碰运气要好得多。不过,在某些情况下,即使偶尔出现错误,代价也相当高。99.99% 的准确率意味着这只昂贵的鸡平均每 10 天就要更换一次。(这只鸡也可能对它撞到的汽车造成严重损坏。)

B解析:在这种情形中,准确率是个糟糕的指标。毕竟,即使它只是个一律预测“没病”的“愚蠢”模型,也依然能达到 99.99% 的准确率。而将某个患病的人错误地预测为“没病”则可能是致命的。

C解析:这个机器学习模型做出的预测比碰运气要好得多;随机猜测的正确率为 1/38,即准确率为 2.6%。尽管该模型的准确率“只有”4%,但成功预测获得的好处远远大于预测失败的损失。

题目2:精确率

让我们以一种将电子邮件分为“垃圾邮件”或“非垃圾邮件”这两种类别的分类模型为例。如果提高分类阈值,精确率会怎样?
A、一定会提高。
B、一定会降低。
C、可能会降低。
D、可能会提高。

A解析:提高分类阈值通常会使精确率提高;不过,精确率并不一定会随着阈值的提高单调递增。
B解析:一般来说,提高分类阈值会减少假正例,从而提高精确率。
C解析:一般来说,提高分类阈值会减少假正例,从而提高精确率。
D解析:一般来说,提高分类阈值会减少假正例,从而提高精确率。

题目3:召回率

让我们以一种将电子邮件分为“垃圾邮件”或“非垃圾邮件”这两种类别的分类模型为例。如果提高分类阈值,召回率会怎样?
A、一定会提高。
B、始终下降或保持不变。
C、始终保持不变。

A解析:提高分类阈值会导致出现以下两种情况:

  • 真正例数量会减少或保持不变。
  • 假负例数量会增加或保持不变。

因此,召回率一定不会提高。

B解析:提高分类阈值会导致真正例的数量减少或保持不变,而且会导致假负例的数量增加或保持不变。因此,召回率会保持不变或下降。

C解析:提高分类阈值会导致真正例的数量减少或保持不变,而且会导致假负例的数量增加或保持不变。因此,召回率会保持不变或下降。

题目4:精确率和召回率

以两个模型(A 和 B)为例,这两个模型分别对同一数据集进行评估。 以下哪一项陈述属实?
A、如果模型 A 的召回率优于模型 B,则模型 A 更好。
B、如果模型 A 的精确率优于模型 B,则模型 A 更好。
C、如果模型 A 的精确率和召回率均优于模型 B,则模型 A 可能更好。

A解析:虽然更高的召回率是好事,但可能是以精确率大幅度降低为代价。一般来说,我们需要同时查看精确率和召回率,或者需要汇总曲线下面积等指标(我们将在后面部分进行讨论)。

B解析:虽然更高的精确率是好事,但可能是以召回率大幅度降低为代价。一般来说,我们需要同时查看精确率和召回率,或者需要汇总曲线下面积等指标(我们将在后面部分进行讨论)。

C解析:一般来说,如果某个模型在精确率和召回率方面均优于另一模型,则该模型可能更好。很显然,我们需要确保在精确率/召回率点处进行比较,这在实践中非常有用,因为这样做才有实际意义。例如,假设我们的垃圾邮件检测模型需要达到至少 90% 的精确率才算有用,并可以避免不必要的虚假警报。在这种情况下,将 {20% 精确率,99% 召回率} 模型与另一个 {15% 精确率,98% 召回率} 模型进行比较不是特别有意义,因为这两个模型都不符合 90% 的精确率要求。但考虑到这一点,在通过精确率和召回率比较模型时,这是一种很好的方式。

6.分类 (Classification):ROC 和曲线下面积

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. ROC 曲线下面积 (AUC, Area under the ROC Curve)

一种会考虑所有可能分类阈值的评估指标

ROC 曲线下面积是,对于随机选择的正类别样本确实为正类别,以及随机选择的负类别样本为正类别,分类器更确信前者的概率。

  1. 受试者工作特征曲线(receiver operating characteristic, 简称 ROC 曲线)

不同分类阈值下的真正例率假正例率构成的曲线。另请参阅曲线下面积

7.分类 (Classification):检查您的理解情况(ROC 和 AUC)

题目1:ROC 和 AUC

以下哪条 ROC 曲线可产生大于 0.5 的 AUC 值?

A

B
C
D

E

答案是BE

A解析:这是可能出现的最差 ROC 曲线;它将所有负分类排列在正分类之上,其 AUC 为 0.0。如果您要逆转每一项预测结果(将负分类翻转为正分类,将正分类翻转为负分类),还真的需要一个完美分类器!

B解析:这是可能达到的最好 ROC 曲线,因为它将所有正类别排列在所有负类别之上。该曲线的 AUC 为 1.0。

备注:实际上,如果您有一个 AUC 为 1.0 的“完美”分类器,您应该感到可疑,因为这可能表明您的模型中存在错误。例如,您的训练数据可能过拟合,或者带标签数据可能被复制到其中一项特征中。

C解析:该 ROC 曲线的 AUC 介于 0 到 0.5 之间,这意味着它在不到 50% 的情况下将某个随机正分类样本排列在某个随机负分类样本之上。相应的模型实际上比随机猜测的效果更差!如果您看到这样的 ROC 曲线,可能表明您的数据中存在错误。

D解析:该 ROC 曲线的 AUC 为 0.5,这意味着 50% 的情况下它将某个随机正分类样本排列在某个随机负分类样本之上。因此,相应的分类模型基本上毫无价值,因为其预测能力与随机猜测差不多。

E解析:该 ROC 曲线的 AUC 介于 0.5 到 1.0 之间,这意味着它在超过 50% 以上的情况下将某个随机正分类样本排列在某个随机负分类样本之上。实际二元分类的 AUC 值通常在此范围内。

题目2:AUC 和预测结果的尺度

将给定模型的所有预测结果都乘以 2.0(例如,如果模型预测的结果为 0.4,我们将其乘以 2.0 得到 0.8),会使按 AUC 衡量的模型效果产生何种变化?

A、这会使 AUC 变得很糟糕,因为预测值现在相差太大。
B、这会使 AUC 变得更好,因为预测值之间相差都很大。
C、没有变化。AUC 只关注相对预测分数。

A解析:有趣的是,即使预测值不同(可能与事实相差很大),将它们全部乘以 2.0 会使预测值的相对排序保持不变。由于 AUC 只关注相对排名,因此不会受到任何简单的预测大小缩放的影响。

B解析:预测结果之间的差距实际上并不会影响 AUC。即使随机抽取的真正例的预测分数只比随机抽取的负类别样本的预测分数大一点点,也会被当作对总体 AUC 分数有贡献。

C解析:没错,AUC 以相对预测为依据,因此保持相对排名的任何预测变化都不会对 AUC 产生影响。而对其他指标而言显然并非如此,例如平方误差、对数损失函数或预测偏差(稍后讨论)。

8.分类 (Classification):预测偏差

逻辑回归预测应当无偏差。即:

“预测平均值”应当约等于“观察平均值”

预测偏差指的是这两个平均值之间的差值。即:

注意:“预测偏差”与偏差(“wx + b”中的“b”)不是一回事。

如果出现非常高的非零预测偏差,则说明模型某处存在错误,因为这表明模型对正类别标签的出现频率预测有误。

例如,假设我们知道,所有电子邮件中平均有 1% 的邮件是垃圾邮件。如果我们对某一封给定电子邮件一无所知,则预测它是垃圾邮件的可能性为 1%。同样,一个出色的垃圾邮件模型应该预测到电子邮件平均有 1% 的可能性是垃圾邮件。(换言之,如果我们计算单个电子邮件是垃圾邮件的预测可能性的平均值,则结果应该是 1%。)然而,如果该模型预测电子邮件是垃圾邮件的平均可能性为 20%,那么我们可以得出结论,该模型出现了预测偏差。

造成预测偏差的可能原因包括:

  • 特征集不完整
  • 数据集混乱
  • 模型实现流水线中有错误?
  • 训练样本有偏差
  • 正则化过强

您可能会通过对学习模型进行后期处理来纠正预测偏差,即通过添加校准层来调整模型的输出,从而减小预测偏差。例如,如果您的模型存在 3% 以上的偏差,则可以添加一个校准层,将平均预测偏差降低 3%。但是,添加校准层并非良策,具体原因如下:

  • 您修复的是症状,而不是原因。
  • 您建立了一个更脆弱的系统,并且必须持续更新。

如果可能的话,请避免添加校准层。使用校准层的项目往往会对其产生依赖 - 使用校准层来修复模型的所有错误。最终,维护校准层可能会令人苦不堪言。

注意:出色模型的偏差通常接近于零。即便如此,预测偏差低并不能证明您的模型比较出色。特别糟糕的模型的预测偏差也有可能为零。例如,只能预测所有样本平均值的模型是糟糕的模型,尽管其预测偏差为零。

分桶偏差和预测偏差

逻辑回归可预测 0 到 1 之间的值。不过,所有带标签样本都正好是 0(例如,0 表示“非垃圾邮件”)或 1(例如,1 表示“垃圾邮件”)。因此,在检查预测偏差时,您无法仅根据一个样本准确地确定预测偏差;您必须在“一大桶”样本中检查预测偏差。也就是说,只有将足够的样本组合在一起以便能够比较预测值(例如 0.392)与观察值(例如 0.394),逻辑回归的预测偏差才有意义。

您可以通过以下方式构建桶:

  • 以线性方式分解目标预测。
  • 构建分位数。

请查看以下某个特定模型的校准曲线。每个点表示包含 1000 个值的分桶。两个轴具有以下含义:

  • x 轴表示模型针对该桶预测的平均值。
  • y 轴表示该桶的数据集中的实际平均值。

两个轴均采用对数尺度。

图 8. 预测偏差曲线(对数尺度)

为什么只有模型的某些部分所做的预测如此糟糕?以下是几种可能性:

  • 训练集不能充分表示数据空间的某些子集。
  • 数据集的某些子集比其他子集更混乱。
  • 该模型过于正则化。(不妨减小 lambda 的值。)

关键字词

  1. 分桶 (bucketing)

将一个特征(通常是连续特征)转换成多个二元特征(称为桶或箱),通常是根据值区间进行转换。例如,您可以将温度区间分割为离散分箱,而不是将温度表示成单个连续的浮点特征。假设温度数据可精确到小数点后一位,则可以将介于 0.0 到 15.0 度之间的所有温度都归入一个分箱,将介于 15.1 到 30.0 度之间的所有温度归入第二个分箱,并将介于 30.1 到 50.0 度之间的所有温度归入第三个分箱。

  1. 预测偏差 (prediction bias)

一个值,用于表明预测平均值与数据集中标签的平均值相差有多大。

  1. 校准层 (calibration layer)

一种预测后调整,通常是为了降低预测偏差。调整后的预测和概率应与观察到的标签集的分布一致。

机器学习算法