第二章 模型评估与选择

2.1经验误差与过拟合

通常我们把分类错误的样本数占样本总数的比例称为“错误率”,即结果m个样本中a个样本分类错误,则错误率E=a/m;相应的,1-a/m称为“精度”。更一般地我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”。

当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化能下降。这种现象在机器学习中称为“过拟合”,与“过拟合”相对的是“欠拟合”,这是指对训练样本的一般性质尚未学好。过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减少其风险。

2.2评估方法

我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此需使用一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。

2.2.1留出法

“留出法”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。

单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随即划分、重复进行试验评估后取平均值作为留出法的评估结果。

2.2.2交叉验证法

“交叉验证法”先将数据集D划分为k个大小相似的互斥子集。每个子集Di都尽可能保持数据分布一致,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

假定数据集D中包含m个样本,若令k=m,则得到了交叉验证法的一个特例:留一法。在数据集比较大时,训练m个模型的计算开销可能是难以忍受的,而这还是在未考虑算法调参的情况下。

2.2.3自助法

给定包含m个样本的数据集D,我们对它进行采样产生数据集D':每次随机从D中挑一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到。通过自主采样,初始数据集D中约有36.8%的样本未出现在采样数据集D'中,于是我们可将D'用作训练集,D\D'用作测试集。

自助法在数据集较小、难以有效划分训练/测试集时很有用。

2.2.4调参与最终模型

在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“调节参数”,简称“调参”。

现实中常用的做法,是步长,对每一个参数选定一个范围和变化步长。

2.3性能度量

性能度量反映了任务需求,在对比不同的模型能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

2.3.1错误率与精度

2.3.2查准率、查全率与F1

类似的需求在信息检索、Web搜索等应用中经常出现,例如在信息检索中,我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”,“用户感兴趣的信息中有多少被检索出来了”。“查准率”与“查全率”是更为适用于此类需求的性能度量。

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;而如果两个学习器的P-R曲线发生了交叉,则可用“平衡点(BEP)”来进行比较,它是“查准率=查全率”时的取值。但BEP还是过于简化了些,更常用的是F1度量。F1度量的一般形式——F能让我们表达出查准率/查全率的不同偏好。

2.3.3ROC和AUC

ROC全称是“受试者工作特征”曲线,我们根据学习器预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分为以他们作为横、纵坐标作图,就得到了“ROC”曲线。

若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判断是比较ROC曲线下的面积,即AUC。

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

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”。在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”。在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而”代价曲线“则可达到该目的。

2.4比较检验

2.4.1假设检验

现实任务中我们并不知道学习器的泛化错误率,只能获知其测试错误率。泛化错误率与测试错误率未必相同,但直观上,二者接近的可能性应比较大,相差很远的可能性比较小。因此,可根据测试错误率估推出泛化错误率的分布。

在很多时候我们并非仅作一次留出法估计,而是通过多次重复留出法或是交叉验证法等进行多次训练\测试,这样会得到多个测试错误率,此时可使用“t检验”。

2.4.2交叉验证t检验

具体来说,对k折交叉验证产生的k对测试错误率:先对每对结果求差;若两个学习器性能相同,则差值均值应为零。因此可根据差值来对“学习器A与B性能相同”这个假设做t检验,计算出差值的均值和方差,在显著度下,若变量Tt小于临界值,则假设不能被拒绝,即认为两个学习器的性能有显著差别,且平均错误率较小的那个学习器性能较优。

5×2交又验证是做5次2折交叉验证,在每次2折交叉验证之前随机将数据打乱,使得5次交叉验证中的数据划分不重复.对两个学习器A和B,第i次2折交叉验证将产生两对测试错误率,我们对它们分别求差,得到第1折上的差值和第2折上的差值。

2.4.3McNemar检验

2.4.4Friedman检验与Nemenyi后续检验

假定我们用D1、D2、D3和D4四个数据集对算法A、B、C进行比较。首先使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值;若算法的测试性能相同,则平分序值。

2.5偏差与方差

”偏差-方差分解”是解释学习算法泛化性能的一种重要工具。偏差-方差分解试图是对学习算法的期望泛化错误率进行拆解。

泛化误差可分解为偏差、方差、和噪声之和。

回顾偏差、方差、噪声的含义:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。偏差一方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同決定的。

一般来说,偏差与方差是有冲突的,这称为偏差方差窘均境。

你可能感兴趣的:(第二章 模型评估与选择)