周志华《机器学习》第二章:模型评估与选择(1)

文章目录

      • 2.1 经验误差与过拟合
      • 2.2 评估方法
        • 2.2.1 留出法(hold-out)
        • 2.2.2 交叉验证(cross-validation)
        • 2.2.3 自助法(bootstrapping)
        • 2.2.4 调参与最终模型
      • 2.3 性能度量
        • 2.3.1 错误率与精度
        • 2.3.2 查准率、查全率与F1
          • 表2.1 分类结果混淆矩阵
        • 2.3.3 ROC与AUC
        • 2.3.4 代价敏感错误率与代价曲线
          • 表2.2 二分类代价矩阵

    上一章主要介绍何为机器学习、机器学习相关基础概念、发展历程以及应用现状,力求使读者能够一窥机器学习全貌。本章主要研究应该如何评价学得模型,并加以选择。本章共分5个小节,2.1节先介绍了机器学习模型中的一些常见术语,并说明了"学得模型"不可避免的两个问题:欠拟合与过拟合,并引出如何做模型评估的问题;2.2节介绍了常用的评估方法;2.3节介绍了常见的性能度量指标;2.4节阐述了在有了评估方法与性能度量指标的情况下,应该怎么进行比较检验;2.5节介绍“偏差-方差”,用于解释模型的泛化能力。

2.1 经验误差与过拟合

  首先定义几个常见的概念:

  1. 错误率=分类错误的样本数/样本总数, E = a m . E=\frac{a}{m}. E=ma.
  2. 精度=1-错误率.
  3. 误差:学习器的实际预测输出与样本的真是输出之间的误差叫做“误差”
        (1)训练误差 :学习器在训练集上的误差,training errer;
        (2)泛化误差 :学习器在测试集上的误差,generalization errer。

    显而易见,泛化误差代表学习器对未知样本的预测能力,我们希望学习到泛化误差小的模型。但是我们并不能事先知道新样本的数据信息(否则不会叫做新样本),能够做的只有不断地优化模型、减小训练误差。但是,训练误差最小的学习器真的是最优解,会在新样本上同样取得最小的泛化误差吗?未必。学习器在训练集上学习到训练误差最小时,通常会把训练集本身的特征当作适用于所有样本的“潜在特征”而加以学习,从而导致学习器的泛化能力反而降低,即“过拟合”。与“过拟合”相对应的是“欠拟合”,即学习器没能充分学习训练集,从而生成能力强的模型
    一般来说,“欠拟合”较容易克服,我们通常可以在神经网络中增加训练轮数、在决策树中增加分支来解决。但是“过拟合”更麻烦一些,它也是机器学习需要克服的关键障碍。再好的模型,都会多少有一点过拟合,这是无法避免的。但是我们可以通过种种手段来“缓解”过拟合。
    书中在这里提到了“ P = N̸ P P=\not NP P=NP”的问题,这是多项式复杂程度的非确定性问题,在这里提及只是为了证明过拟合无法避免而已。

P P P包含所有那些可以由一个确定型图灵机在多项式表达的时间内解决的问题, N P NP NP由所有其肯定解可以在给定正确信息的多项式时间内验证的决定问题组成。

    用人话来说, P P P就是可以在多项式时间内解决的问题, N P NP NP就是可以在多项式时间内能够验证问题正确与否的问题,显然 P = N̸ P P=\not NP P=NP,否则就会出现“验证问题=证明问题”的悖论。因此书中说,只要我们相信“ P = N̸ P P=\not NP P=NP”,就必须相信机器学习学得模型的”过拟合“问题无法避免。
    针对同一个现实任务,往往有多种算法可供我们选择,并且即使选择的算法相同,但是模型中参数配置不同,最后也会产生不同的结果。那么我们应该如何针对问题选出“最好”的学得模型呢?这就涉及“模型评估与选择”。(注意这里的最好是打引号的,因为我们在上一章中证明过,不考虑实际问题的话,所有的算法是无论优劣的,NFL定理)
    那么该怎么选择模型呢?泛化误差我们说过,是得不到的;而训练误差又不可以直接作为评估模型的标准。我们需要研究评估方法,通过实验测试来选择“最好的“模型。

2.2 评估方法

    我们应该怎样用实验的手段来“评估”学习器的泛化误差呢?使用“测试集”(testing set)来测试学习器对新样本的泛化能力,即用测试误差来近似泛化误差。 在第一章中我们做过假设:样本空间中所有样本均服从同一分布 D \mathcal{D} D,在这里我们依然沿用这个假设,假设训练集和测试集的样本都是从样本真实分布中独立采样而来。这就好办了,我们可以将同一个数据集划分成训练集 S S S和测试集 T T T,二者必须互斥。具体划分方法有很多,书中列出以下方法。

2.2.1 留出法(hold-out)

    直接将数据集 D D D分成对立的训练集 S S S和测试集 T T T,注意要尽可能保持数据分布的一致性,划分时要做到“分层采样”,按照比例从 D D D中每类数据中划分。
    留出法有一弊端:即便S/T比例确定,每次划分也都是人为的,算出的测试误差并不可靠,需要多次随机划分,拿到多个测试误差,取其均值。除了这个弊端,留出法引出了一个矛盾:若令训练集包含大多数样本,虽然训练出的模型更接近用数据集 D D D训练的模型,但是由于测试集数据过少,不能用测试误差去近似泛化误差;相反,如果测试集包含相当数量的样本,又会导致用训练集学到的模型与用数据集 D D D训练的模型相差较大。

2.2.2 交叉验证(cross-validation)

    交叉验证法对上述问题做了一些修正:令 D = D 1 ⋃ D 2 ⋃ . . . ⋃ D k D=D_1\bigcup D_2\bigcup ...\bigcup D_k D=D1D2...Dk,每个子集 D i D_i Di按照分层采样划分。用k-1个子集做训练集,剩下的一个子集做测试集,重复k次,确保每个子集都会充当一次测试集。将这k次实验的平均结果作为测试误差。又叫k-fold cross-validation.
    留一法是一种特例,每次充当测试集的只有一个样本,相比于上述方法,这更准确,但是计算量大。另外,留一法的评估效果并不会一定比其他方法更准确,NFL定理同样适用。

2.2.3 自助法(bootstrapping)

    我们希望评估的是用数据集 D D D训练的模型,但是上述方法都会从 D D D中抽出一部分样本作为测试集,这并不理想。自助法不仅可以减小训练规模不同而造成的影响,还可以较为高效的进行实验估计。
    自助法是在非参数估计中的一种重要的估计统计方差,从而进行区间估计的统计方法。给定包含 m m m个样本的数据集 D D D,每次从中随机取出一个样本放入数据集 D ′ D^{'} D,然后仍放回数据集 D D D中,重复 m m m次。显然,我们基于数据集 D D D生成了一个新的同样包含 m m m个样本的数据集 D ′ D^{'} D,且在 D D D中有 lim ⁡ m → + ∞ ( 1 − 1 m ) m ≈ 0.368 \lim_{m\rightarrow+\infty} (1-\frac{1}{m})^m\approx0.368 limm+(1m1)m0.368的样本不会出现在 D + D^+ D+中。用 D ′ D^{'} D做训练集, D / D ′ D/D^{'} D/D做测试集得到的测试误差又叫“包外估计”。
    自助法的优缺点都很明显,一方面,从 D D D中生成若干数据集 D ′ D^{'} D,相当于扩增了原始数据量,比较适合原始数据量较少,难以有效划分S/T的情况;另一方面, D ′ D^{'} D的分布规律势必与 D D D不同,会产生额外的估计误差。所以自助法适用于经验分布与原始分布估计一致的情况。

2.2.4 调参与最终模型

   本章开头我们讨论了如何评估学习器的“泛化误差”,就是将数据集划分为S+T,用测试误差来近似泛化误差。2.2.1~2.2.3节我们讨论了三种划分S/T的方法:hold-out、k-fold cross-validation、bootstrapping。这里思考调参的问题。
   用S训练模型,并没有利用全部的数据,所以应遵循下述步骤:

  1. 给定数据集 D D D,划分S/T;
  2. 利用S训练模型;
  3. 利用T测试模型;
  4. 调参;
  5. 用D再次训练;
  6. 提交模型

2.3 性能度量

    对学习器的泛化性能进行评估,除了有效的评估方法,还要有衡量模型泛化能力的评价标准,即性能度量(performance measure)。在预测任务中,给定样例集 D = { ( x 1 ⃗ , y 1 ) , ( x 2 ⃗ , y 2 ) , . . . , ( x m ⃗ , y m ) } D=\{(\vec{x_1},y_1),(\vec{x_2},y_2),...,(\vec{x_m},y_m)\} D={(x1 ,y1),(x2 ,y2),...,(xm ,ym)},其中 y i y_i yi是示例 x i ⃗ \vec{x_i} xi 的真实标记。
    在回归任务中,常见的性能度量是“均方误差”: E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\displaystyle{\sum^{m}_{i=1}}(f(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2,更一般的:
  E ( f ; D ) = ∫ x ∈ D ( f ( x ) − y ) 2 ⋅ p ( x ) d x \ E(f;D)=\int_{x\in D} (f(x)-y)^2\cdot p(x){\rm d}x  E(f;D)=xD(f(x)y)2p(x)dx
    在分类任务中,常见指标如下:

2.3.1 错误率与精度

  1. 分类错误率 E ( f ; D ) = 1 m ∑ i = 1 m Ⅱ ( f ( x i ) = ̸ y i ) E(f;D)=\frac{1}{m}\displaystyle{\sum^{m}_{i=1}}Ⅱ(f(x_i)=\not y_i) E(f;D)=m1i=1m(f(xi)=yi),更一般的,设概率密度为 p ( ⋅ ) p(\cdot) p()   E ( f ; D ) = ∫ x ∈ D Ⅱ ( f ( x ) ≠ y ) ⋅ p ( x ) d x \begin{aligned} \ E(f;D)=\int_{x\in D} Ⅱ(f(x)\not= y)\cdot p(x){\rm d}x \end{aligned}  E(f;D)=xD(f(x)=y)p(x)dx
  2. 精度 a c c = 1 − E ( f ; D ) acc=1-E(f;D) acc=1E(f;D)

2.3.2 查准率、查全率与F1

对于二分类问题,可根据 f ( x i ) f(x_i) f(xi) y i y_i yi的关系将样例划分为:

表2.1 分类结果混淆矩阵
真实情况 预测结果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)
  1. 查准率 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
  2. 查全率 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

    查准率与查全率互相矛盾,这很好理解。有时我们需要根据学习器的预测结果对样例排序,根据排序结果来判断哪个样例“最有可能是正例”,以此顺序将样例逐个预测为“正例”,就能够计算出当前的查准率与查全率,从而得到“P-R”曲线。不同学习器的“P-R”曲线如下图所示:
周志华《机器学习》第二章:模型评估与选择(1)_第1张图片
    若一个学习器的“P-R”曲线能够将另一个学习器完全包住,则可断言前者性能优于后者,否则不可轻易判断孰优孰劣,需要结合其他信息判断。很容易想到一个指标就是曲线包围面积,可这并不好求;另一个指标就是“平衡点”(Break Even Point,简称BEP),BEP=P=R。第三个指标是P与R的调和平均数:
F 1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N \begin{aligned} \\& F1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{样例总数+TP-TN} \end{aligned} F1=P+R2×P×R=+TPTN2×TP
    相比于几算术平均数和何平均数, F 1 F1 F1更注重小值。此外,在一般应用中,对查准率与查全率的关注程度是不同的,我们用 β \beta β表示查全率对查准率的重要程度,将上式改写成:
  F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R \begin{aligned} \ F_\beta=\frac{(1+\beta^2)\times P\times R}{(\beta^2\times P)+R} \end{aligned}  Fβ=(β2×P)+R(1+β2)×P×R
     β > 1 \beta >1 β>1时,查全率 R R R有更大影响; β < 1 \beta <1 β<1时,查准率 P P P有更大影响。
    考虑我们此时拥有多个二分类混淆矩阵,我们该如何考察查全率与查准率呢?一种做法就是在各个混淆矩阵上分别计算查全率与查准率,再计算平均值,得到“宏查全率”、“宏查准率”以及相应的“宏F1”:
m a c r o _ R = 1 n ∑ i = 1 n R i m a c r o _ P = 1 n ∑ i = 1 n P i m a c r o _ F 1 = 2 × m a c r o _ P × m a c r o _ R m a c r o _ P + m a c r o _ R \begin{aligned} \\& macro\_R=\frac{1}{n}\displaystyle{\sum^{n}_{i=1}}R_i \\& macro\_P=\frac{1}{n}\displaystyle{\sum^{n}_{i=1}}P_i \\& macro\_F1=\frac{2\times macro\_P\times macro\_R}{macro\_P+macro\_R} \end{aligned} macro_R=n1i=1nRimacro_P=n1i=1nPimacro_F1=macro_P+macro_R2×macro_P×macro_R
    另外一种方法是先在每个二分类混淆矩阵上计算 T P ‾ 、 F P ‾ 、 F N ‾ 、 T N ‾ \overline{TP}、\overline{FP}、\overline{FN}、\overline{TN} TPFPFNTN,再计算得到“微查全率”“微查准率”与“ 微 F 1 微F1 F1”:
m i c r o _ R = T P ‾ T P ‾ + F P ‾ m i c r o _ P = T P ‾ T P ‾ + F N ‾ m i c r o _ F 1 = 2 × m i c r o _ P × m i c r o _ R m i c r o _ P + m i c r o _ R \begin{aligned} \\& micro\_R=\frac{\overline{TP}}{\overline{TP}+\overline{FP}} \\& micro\_P=\frac{\overline{TP}}{\overline{TP}+\overline{FN}} \\& micro\_F1=\frac{2\times micro\_P\times micro\_R}{micro\_P+micro\_R} \end{aligned} micro_R=TP+FPTPmicro_P=TP+FNTPmicro_F1=micro_P+micro_R2×micro_P×micro_R

2.3.3 ROC与AUC

    通常学习器预测的结果是一个在 [ 0 , 1 ] [0,1] [0,1]区间的数值,我们可将预测数值排序,越接近1,表示当前样本越接近正例。在不同的任务中,我们往往根据需要设置不同的截断点:若要求较高的查全率,则截断点必须后移;若要求较高的查准率,截断点必须前移。因此,预测结果的排序质量,直接体现着学习器在不同任务下的“期望泛化性能”的好坏。换句话说,这体现着学习器在一般情况下的好坏。ROC曲线正是从这个角度对学习器进行评估。
    ROC,即“Receiver Operating Characteristic”“受试者工作特征”,源于二战中对雷达信号的分析,后引入机器学习领域。我们将学习器做出的预测结果排序,逐个把样例预测为正例,每次计算出两个数值,并以这两个数值为坐标轴绘制ROC曲线。横轴为“假正例率”(FPR),纵轴为“真正例率”(TPR):
F P R = F P F P + T N T P R = T P T P + F N \begin{aligned} \\& FPR=\frac{FP}{FP+TN} \\& TPR=\frac{TP}{TP+FN} \end{aligned} FPR=FP+TNFPTPR=TP+FNTP
考虑这样几个特例:
1.当预测结果全为反例时, T P = F P = 0 TP=FP=0 TP=FP=0,从而 T P R = F P R = 0 TPR=FPR=0 TPR=FPR=0,对应ROC曲线原 点 ( 0 , 0 ) (0,0) (0,0)
2.当预测结果全为正例时, T N = F N = 0 TN=FN=0 TN=FN=0,从而 T P R = F P R = 1 TPR=FPR=1 TPR=FPR=1 ,对应点 ( 1 , 1 ) (1,1) (1,1)
3.当预测结果中所有样例均预测正确,换句话说,所有真实标签为“正例”的示例均排在标签为“反例”的示例之前,则 T P = 1 , F P = 0 TP=1,FP=0 TP=1,FP=0,从而 T P R = 1 , F P R = 0 TPR=1,FPR=0 TPR=1,FPR=0,对应点 ( 0 , 1 ) (0,1) (0,1)
4.当所有样例的真实标签与预测结果恰好全部相反时, T N = T P = 0 TN=TP=0 TN=TP=0,对应点 ( 1 , 0 ) (1,0) (1,0).

周志华《机器学习》第二章:模型评估与选择(1)_第2张图片    现实任务中,样例是有限的,只能像上图右侧这样画成分段的曲线。(类似于计算机控制中的第一象限插补)设给定 m + m^+ m+个正例, m + − m^+- m+个反例,具体做法:

  1. 将分类阈值调整到最大,所有样例设为反例,计算 ( F P R , T P R ) (FPR,TPR) (FPR,TPR)作为曲线原点;
  2. 样例按照预测结果排序,依次以预测结果为分类阈值进行计算;
  3. 若当前为正例,则 ( x , y + 1 m + ) (x,y+\frac{1}{m^+}) (x,y+m+1);若当前为反例,则 ( x + 1 m − , y ) (x+\frac{1}{m^-},y) (x+m1,y)

    类似“P-R”曲线,若一个学习器的ROC曲线能够“包住”另一个学习器的曲线,可断定前者性能优于后者。否则需另行判断:计算ROC曲线包围的面积AUC(Area Under ROC Curve):
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + y i + 1 ) AUC=\frac{1}{2}\displaystyle{\sum_{i=1}^{m-1}(x_{i+1}-x_i)(y_i+y_{i+1})} AUC=21i=1m1(xi+1xi)(yi+yi+1)

    我们在开始的时候说过,ROC曲线体现的是预测结果的排序质量,所以AUC与排序误差密切相关。从这个角度去理解AUC,可得:
A U C = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − Ⅱ ( f ( x + ) > f ( x − ) ) AUC=\frac{1}{m_+m_-}\displaystyle{\sum_{x^+\in D^+}}\displaystyle{\sum_{x^-\in D^-}}Ⅱ(f(x^+)>f(x^-)) AUC=m+m1x+D+xD(f(x+)>f(x))

    从反方向定义排序“损失”:
l r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( Ⅱ ( f ( x + ) < f ( x − ) ) + 1 2 Ⅱ ( f ( x + ) = f ( x − ) ) ) l_{rank}=\frac{1}{m_+m_-}\displaystyle{\sum_{x^+\in D^+}}\displaystyle{\sum_{x^-\in D^-}}(Ⅱ(f(x^+)lrank=m+m1x+D+xD((f(x+)<f(x))+21(f(x+)=f(x)))

    显然 A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1lrank

2.3.4 代价敏感错误率与代价曲线

     R O C − A U C ROC-AUC ROCAUC体现的是学习器在一般情况下的好坏,我们在其计算过程中默认各种分类错误造成的后果是一样的,即所有类型的错误“均等代价”,但这有时不合常理,有些错误一定会比其它错误造成的后果更严重。我们可以用“非均等代价”来衡量这种不平等程度。以二分类为例:

表2.2 二分类代价矩阵
真实类别 预测类别
第0类 第1类
第0类 0 cost_01
第1类 cost_10 0

    代价“敏感”的错误率:
E ( f : D ) = 1 m ( ∑ x + ∈ D + Ⅱ ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x − ∈ D − Ⅱ ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f:D)= \frac{1}{m}(\displaystyle{\sum_{x^+\in D^+}Ⅱ(f(x_i)\not= y_i)\times cost_{01}+\sum_{x^-\in D^-}Ⅱ(f(x_i)\not= y_i)\times cost_{10}}) E(f:D)=m1(x+D+(f(xi)=yi)×cost01+xD(f(xi)=yi)×cost10)
    在“非均等代价”下,ROC曲线不再能够代表学习器的期望总体代价,我们采用“代价曲线”来实现这一任务。代价曲线的横轴是取值在 [ 0 , 1 ] [0,1] [0,1]之间的正例概率代价,式中 p p p是样例为正的概率。
P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 P(+)cost=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{10}} P(+)cost=p×cost01+(1p)×cost10p×cost01
    纵轴是归一化代价:
c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 cost_{norm}=\frac{FNR\times p\times cost_{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}} costnorm=p×cost01+(1p)×cost10FNR×p×cost01+FPR×(1p)×cost10
     p = 0 p=0 p=0对应 ( 0 , F P R ) (0,FPR) (0,FPR) p = 1 p=1 p=1对应 ( 1 , F N R ) (1,FNR) (1,FNR),且这条曲线肯定是直的,那么我们就能把它画出来。ROC曲线上一个点对应代价曲线上一条直线。横纵坐标都是概率,一条代价曲线下方的面积就代表“在一种条件下学习器的期望总体代价”。那么我们将对应于ROC曲线上每一个点的代价曲线都画出来,其下方面积的交集就是“在所有条件下学习器的期望总体代价”。如图所示:
周志华《机器学习》第二章:模型评估与选择(1)_第3张图片

你可能感兴趣的:(个人学习,人工智能)