西瓜书学习笔记——(2)模型评估与选择

作者:alistair_chow

经验误差与过拟合

错误率(error rate):分类错误的样本数占样本总数的比例
精度(accuracy):精度 = 1 - 错误率
误差(error):学习器的实际预测输出与样本的真实输出之间的差异
训练误差(training error)/经验误差(empirical error):学习器在训练集上的误差
泛化误差(generalization error):学习器在新样本上的误差
过拟合(overfitting):学习器把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,导致泛化性能下降
欠拟合(underfitting):学习器对训练样本的一般性质尚未学好

欠拟合容易克服,例如在决策树学习中扩散分支、在神经网络学习中增加训练轮数等,而过拟合非常麻烦,过拟合是机器学习面临的关键障碍。

过拟合无法彻底避免,能做的只是“缓解”,或者说减小风险。可以大致理解为:机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若克彻底避免过拟合,则通过经验误差最小化就能获得最优解,这就意味着我们构造性的证明了“P=NP”;因此,只要相信“PNP”,过拟合就不可避免。

评估方法

在现实任务中,有许多学习算法可供选择,甚至对同一个学习算法,使用不同的参数配置,也会产生不同的模型。为了选择最优的模型,可通过实验测试来对学习器的泛化误差进行评估进而做出选择。为此,需要一个测试集来测试学习器对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。测试集应该尽可能的与训练集互斥,即测试样本尽量不在训练样本中出现。

如果我们还有一个包含m个样例的数据集D={(x1,y1),(x2,y2),...,(xm,ym)},既要训练,又要测试,就需要通过对D进行适当的处理,从中产生出训练集S和测试集T

留出法(hold-out)

直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另个作为测试集T,即D=ST,ST=。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

这里写图片描述

数据集D有1000个样本,划分700个作为训练集S,剩下的300个作为测试集T。训练结束后,产生的模型在T上有90个错误。那么错误率为90/300×100%=30%,精度为(10.3)×100%=70%

注意

训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。

即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。因此,单词使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。

常见的做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

交叉验证法(cross validation)

现将数据集D划分为k个大小相似的互斥子集,即D=D1D2...Dk,DiDj=(ij)。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后每次用k1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这个k的测试结果均值。

通常把交叉验证法称为“k折交叉验证法”(k-fold cross validation)。k最常用的取值是10,此时称为10折交叉验证

这里写图片描述

注意

与留出法类似,将数据集D划分为k个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这pk折交叉验证的结果的均值。

假定数据集D中包含m个样本,若令k=m,则得到了交叉验证的一个特例:留一法(Leave-One-Out,简称 LOO)。留一法不受随机样本划分方式的影响,留一法的评估结果往往被认为比较准确。缺陷是,当数据集比较大时,训练m个模型的计算开销可能是难以忍受的。另外,留一法的估计结果也未必永远比其他评估方法准确。(NFL 定理)

自助法(bootstrapping)

给定包含m个样本的数据集D,我们对它进行采样产生数据集D:每次随机从D中挑选一个样本,将其拷入到D中,重复执行m次后,就得到了包含m个样本的数据集D,这就是自助采样的结果。

这里写图片描述

显然,D中的一部分样本会在D中多次出现,而另一部分则不会出现。通过自助采样,初始数据集D中约有36.8%的样本未出现在数据集D中。我们可将D用作训练集,D\ D用作测试集。

自助法在数据集较小、难以有效划分训练/测试集时很有用;此外自助法能从初始数据集中产生多个不同的训练集,对集成学习等方法大有好处。由于自助法产生的数据集改变了初始数据集的分布,会引入偏差值。因此,在数据量足够时,留出法和交叉验证法更常用一些。

调参与最终模型

参数调节(parameter tuning):学习算法都有参数的设定,参数的不同,学得模型的性能会有显著的差别。对算法参数的设定就是调参。

给定包含m个样本的数据集D,我们只用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。这个模型在训练过程中使用了所有的样本,这才是最终模型。

性能度量

性能度量(performance measure):衡量模型泛化能力的评价标准。

错误率与精度

错误率是分类错误的样本数占样本总数的比例,精度是分类正确的样本数在样本总数的比例。

对样例集D,分类错误率定义为:

E(f;D)=1mi=1mII(f(xi)yi)

精度定义为:

acc(f;D)=1mi=1mII(f(xi)=yi)=1E(f;D)

更一般的,对于数据分布D和概率密度函数p(),错误率与精度可分别描述为

E(f;D)=xDII(f(x)y)p(x)dx

acc(f;D)=xDII(f(x)=y)p(x)dx=1E(f;D)


查准率、查全率与F1

查准率(precision):检索出来的条目中准确的占比
查全率(recall):所有准确的条目检索出来的占比

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)和假反例(false negative)四种情形。

令TP、FP、TN、FN分别表示其对应的样例数,那么TP + FP + TN + FN = 样例总数。

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

查准率P与查全率R分别定义为

P=TPTP+FP

R=TPTP+FN

查准率高时,查全率往往偏低;查全率高时,查准率往往偏低。

PR曲线:查准率-查全率曲线

这里写图片描述

平衡点(Break-Even Point,简称BEP):为了在PR图中识别学习器的性能谁更优异,人们设计了一些综合考虑查准率、查全率的性能度量。平衡点就是其中之一,它是查准率=查全率时的取值。平衡点的取值越大,学习器越优。

BEP还是过于简化,更常用的是F1度量:

F1=2×P×RP+R=2×TP+TPTN

在一些应用中,对查准率和查全率的重视程度不同。F1度量的一般形式——Fβ,能让我们表达出对查准率、查全率的不同偏好,它的定义为:
Fβ=(1+β2)×P×R(β2×P)+R

其中 β>0 度量了查全率对查准率的相对重要性。
β=1 时退化为标准的F1;
β>1 时查全率有更大影响
β<1 时查准率有更大影响

很多时候会有多个二分类混淆矩阵,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率。

一种直接做法是先在各混淆矩阵上分别计算出查准率和查全率,再计算平均值,这样就得到了“宏查准率(macro-P)”、“宏查全率(macro-R)”以及对应的“宏F1(macro-F1)”:

macro-P=1ni=1nPi

macro-R=1ni=1nRi

macro-F1=2×marco-P×macro-Rmarco-P+marco-R

另一种做法是将各混淆矩阵的对应元素进行平均,得到TPFPTNFN的平均值,TP¯¯¯¯¯FP¯¯¯¯¯TN¯¯¯¯¯FN¯¯¯¯¯¯,再基于平均值计算出“微查准率(micro-P)”、“微查全率(micro-R)”和“微F1(micro-F1)”:

micro-P=TP¯¯¯¯¯TP¯¯¯¯¯+FP¯¯¯¯¯

micro-R=TP¯¯¯¯¯TP¯¯¯¯¯+FN¯¯¯¯¯¯

micro-F1=2×micro-P×micro-Rmicro-P+micro-R


ROC 与 AUC

ROC全称是“受试者工作特征(Receiver Operating Characteristic)”曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们的横、纵坐标作图,就得到了ROC曲线。ROC曲线的纵轴是“真正例率(True Positive Rate,简称TPR)”,横轴是“假正例率(False Positive Rate,简称FPR)”,两者分别定义为:

TPR=TPTP+FN

FPR=FPTN+FP

显示ROC曲线的图叫ROC图。

这里写图片描述

其中AUC(Area Under ROC Curve)为ROC曲线下所包含的面积,用于判断学习器间的性能谁更优。

AUC可通过对ROC曲线下的各部分的面积求和而得。假定ROC曲线是由坐标{(x1,y1),(x2,y2),...,(xm,ym)}的点按顺序连接而形成(x1=0,xm=1),则AUC可估算为:

AUC=12i=1m1(xi+1xi)(yi+yi+1)

AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密关系。给定m+个正例和m个反例,令D+D分别表示正、反例集合,则排序损失(lose)定义为:

rank=1m+mx+D+xD(II(f(x+)<f(x))+12II(f(x+)=f(x)))

即考虑每一对正、反例,做正例的预测值小于反例,则记一个罚分,若相等则记0。5个罚分。

rank对应的是ROC曲线之上的面积。

AUG=1rank

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

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价(unequal cost)”

代价矩阵(cost matrix)

真实类别 预测类别
第0类 第1类
第0类 0 cost01
第1类 cost10 0

costij表示将第i类样本预测为j类样本的代价。一般,costij=0。若第1类所造成的损失更大,则cost10>cost01

若将第0类作为正类,第1类作为反类,令D+D分别为样例集D的正例子集和反例子集,则代价敏感(cost-sensitive)错误率为

E(f;D;cost)=1m(xiD+II(f(xi)yi)×cost01+xiDII(f(xi)yi)×cost10)

在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线(cost curve)”则可达到目的。代价曲线图的横轴是取值为[0,1]的正利率代价:

P(+)cost=p×cost01p×cost01+(1p)×cost10

其中p是样例为正例的概率;纵轴是取值为[0, 1]的归一化代价

costnorm=FNR×p×cost01+FPR×(1p)×cost10p×cost01+(1p)×cost10

FPR是定义的假正例率, FNR是假返利率。

比较检验

为了比较学习器的泛化性能谁更优异,下面列举了几种常用的机器学习性能比较的方法。为便于讨论,本节默认以错误率为性能度量,用ϵ表示。

假设检验

假设检验中的假设是对学习器泛化错误率分布的某种判断或猜想,如ϵ=ϵ0。现实任务中并不能知道学习器的泛化错误率,只能得到测试错误率ϵˆ。泛化错误率与测试错误率接近的可能性比较大,因此可以根据测试错误率估推出泛化错误率的分布。

交叉验证t检验

对两个学习器A和B,若我们使用k折交叉验证法得到的测试错误率分别为ϵA1,ϵA2,...,ϵAkϵB1,ϵB2,...,ϵBk,其中ϵAiϵBi是在相同的第i折训练/测试集上得到的结果。基本思想为若两个学习器的性能相同,则它们使用相同的训练/测试集得到的测试错误率应相同,即ϵAi=ϵAi

McNemar检验

Friedman检验与Nemenyi后续检验

偏差与方差

偏差-方差分解(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。
偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。
泛化误差可分解为偏差、方差与噪声之和。

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度

发表评论

0个评论

我要留言×

技术领域:

我要留言×

留言成功,我们将在审核后加至投票列表中!

提示x

机器学习知识库已成功保存至我的图谱现在你可以用它来管理自己的知识内容了

删除图谱提示×

你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?

删除节点提示×

无法删除该知识节点,因该节点下仍保存有相关知识内容!

删除节点提示×

你确定要删除该知识节点吗?