第二章 模型评估与选择
2.1 经验误差与过拟合
错误率(error rate):分类错误的样本占样本总数的比例,如果在m个样本中有a个样本分类错误,则错误率为 E = a/m;
精度(accuracy):精度 = 1-错误率;
更一般的,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。
我们实际希望的是泛化误差很小的学习器,为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,然而,当学习器把训练样本学习的“太好了”的时候,很有可能把训练样本自身的一些特性当做所有潜在样本的特性,即“过拟合”(overfitting),会导致学习器的泛化性能下降。相对应的,“欠拟合”(underfitting)是指学习器对训练样本的一般性质尚未学习透彻。
模型选择问题:通常,我们对于某一问题有多种学习算法可以选择,产生的模型也会不一样;
理想的解决方案是对不同学习算法产生的不同模型的泛化误差进行评估,选择泛化误差最小的模型作为最终模型。然而泛化误差无法直接获得。而训练误差有存在过拟合现象,而不适合作为标准,这样,就需要模型评估方法。
2.2评估方法
通常,我们可通过实验测试来对学习器的泛化误差进行评估,这就需要一个测试集,然后以测试集的误差作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样获得。但需要注意的是,测试集应该尽可能的与训练集互斥。因此我们需要从训练集 S 中抽取一部分作为测试集 T,一下介绍几种常见的做法。
2.2.1 留出法
“留出法”(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集合S,另一个作为测试集合T,即 D = S ∪ T, S ∩ T = ∅。在S上训练出模型后,用T来评估其测试误差,作为泛化误差的估计。
需要注意的是:S/T的划分要尽可能额度保持分部的一致性,避免因为数据的划分引入额外的偏差。
常见的留出比例为数据集的2/3~4/5 作为训练。
2.2.2 交叉验证法
“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即 D=D1∪D2∪...∪Dk,Di∩Dj = ∅ (i≠j)。每个自己Di都尽可能的保持数据分布的一致性。然后,每次使用 k-1 个子集作为训练集,剩下的那个子集作为测试集;这样,就有k组 S/T,从而可以进行k次训练和测试,然后使用k次结果的平均值作为最终结果。显然,检查验证评估方法的结果很大程度上取决于k的取值,因此,通常把交叉验证法叫做“k折交叉验证”(k-fold cross validation)。k通常的取值是10,因此叫为10折交叉验证;下图是10折交叉验证的示意图。
当k = m时, 其中m为数据集的样本数量,则变成了交叉验证法的一个特例,留一法(Leave-One-Out,即LOO)。留一法不受随机样本划分方式的影响;而且留一法的训练样本与初始数据集几乎一致(只相差一个样本),因此,留一法的评估结果往往被认为比较准确。然而,当数据集的规模很大时,计算开销将是难以承受的。
与留出法相似,将数据集D划分为k个子集同样存在多种划分方法,为减小因划分不同而引入的误差,通常进行p次k折交叉验证。常见的有 “10次10折交叉验证”。
2.2.3 自助法
我们希望训练数据集无线接近初始数据集,但是留出法和交叉验证法中均需要在出事数据集中划分一部分作为测试数据集;留一法又受样本规模的限制,需要找出一种能够减少因训练样规模不同造成的影响的方法。
“自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法为基础。
自助采样法:对于初始数据集D,我们每次随机从D中放回挑选一个样本,将其放入D’,重复进行m次,就得到了包含m个样本的数据集D’,这就是自助采样的结果。
显然,D中有一部分样本会在D’中重复出现,而另一部分样本不出现。可以简单估计一下,样本在m次采样中始终不被选中的概率为(1-1/m)^m,极限得到
反映到宏观上,即初始数据集中大约有36.8%的样本未出现在采样数据集D’中。于是我们可将D’用作训练集,D\D’作为测试集。
2.2.4 调参与最终模型
大多数学习算法都需要配置参数,参数选取的不同反应到学得模型的 性能上往往有显著差别。
最常见的调参的做法是选定一个值域,然后设定一个步长,每隔一个步长测试一次,选取最佳的参数。
2.3 性能度量
对学习器的泛化性能度量,不仅需要有效可行的实验估计,还需要评价学的模型泛化能力的评价标准,这就是性能度量(performance measure)。
在预测任务中,给定样例集 D = {(x1,y1),(x2,y2), ... , (xm,ym)},其中yi是示例xi的真实标记。要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记yi进行比较。
回归任务中常用的性能度量是“均方误差”(mean squared error)
更一般的,对于数据分布D和概率密度函数p(·),均方误差描述为
下面主要介绍分类任务中常用的性能度量。
2.3.1 错误率与精度
对于指示函数 Ⅱ(·),当 · 表达式为真值是,Ⅱ(·)=1,反之Ⅱ(·) = 0;
参考回归任务的均方误差度量得出分类任务的错误率为
精度定义为:
更一般的,对于数据分布D和概率密度函数p(·),错误率和精度可以描述为