Press "Enter" to skip to content
写在前面
- 今天我们继续读第二个章节, 模型评估与选择. 在这篇文章中, 我们重点探讨经验误差与过拟合, 评估方法这两个小节中的内容.
经验误差与过拟合
- 错误率(Error Rate): 分类错误的样本数占样本总数的比例. 如果在m个样本中, 有a个样本分类错误, 则错误率 .
- 精度(Accuracy): 精度 = 1 - 错误率 , .
- 误差(Error): 学习器的实际预测输出与样本的真实输出之间的差异被称为误差. 学习器在训练集上的误差称为'训练误差'(Training Error)或'经验误差'(Empirical Error), 在新样本上的误差称为'泛化误差'(Generalization Error).
- 经验误差(Empirical Error): 我们希望得到泛化误差小的学习器. 然而我们事先并不知道新样本是什么样, 实际能做的就是努力使经验误差最小化.
- 过拟合(Overfitting): 学习器把训练样本学的太好, 很可能已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质, 所导致的泛化性能下降. 有很多种因素可能导致过拟合, 其中最常见的情况是由于学习能力过于强大, 以至于把训练样本所包含的不太一般的特征都学到了. 过拟合是无法避免的, 我们所能做的只是'缓解', 或者说减小风险.
- 欠拟合(Underfitting): 指学习器对训练样本的一般性质尚未学好. 学习力低下.
- 模型选择(Model Selection): 在解决现实问题时, 对不同算法模型的选择. 对候选模型的泛化误差进行评估, 然后选择泛化误差最小的那个模型.
评估方法
- 测试集(Testing Set): 用于测试学习器对新样本的判别能力, 然后以测试集上的'测试误差'(Testing Error)作为泛化误差的近似. 通常假设测试样本也是从样本真实分布中独立分布采样而得. 单需注意的是, 测试集应该尽可能与训练集互斥, 即测试样本尽量不在训练集中出现, 未在训练过程中使用过.
留出法
- 留出法(Hold-Out): 直接将数据集D划分为两个互斥的集合, 其中一个集合作为训练集S, 另一个作为测试集T, 即 , , 在S上训练出模型后, 用T来评估其测试误差, 作为对泛化误差的估计. 需要注意的是, 训练/测试集的划分要尽可能保持数据分布的一致性, 避免因数据划分过程引入额外的偏差而对最终结果产生影响, 例如在分类任务中至少要保持样本的类别比例相似.
- 分层采样(Stratified Sampling): 如果从采样(Sampling)的角度来看待数据集的划分过程, 则保留类别比例的采样方式通常称为'分层采样'(Stratified Sampling).
- 在使用留出法时, 一般要采用若干次随机划分, 重复进行实验评估后取均值做为留出法的评估结果.
- 我们希望评估的是用D训练出的模型的性能, 但留出法需划分训练/测试集, 这样就会导致一个窘境: 若令训练集S包含绝大多数样本, 则训练出的模型可能更接近于用D训练出的模型, 但由于T比较小, 评估结果可能不够稳定准确; 若令测试集T多包含一些样本, 则训练集S与D差别更大了, 被评估的模型与用D训练出的模型相比可能有比较大的差别, 从而降低了评估结果的保真性(Fidelity). 这个问题没有完美的解决方案, 常见做法是将大约 的样本用于训练, 剩余样本用于测试.
交叉验证法
- 交叉验证法(Cross Validation): 先将数据集D划分为k个大小相似的互斥子集, 即 , . 每个子集 都尽可能保持数据分布的一致性, 即从D中通过分层采样得到. 然后, 每次用 个子集的并集作为训练集, 余下的那个子集作为测试集; 这样就可获得k组训练/测试集, 从而可进行k此训练和测试, 最终返回的是这k个测试结果的均值. 显然, 交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值, 为强调这一点, 通常把交叉验证法称为'k折交叉验证'(K-fold Cross Validation). k最常用的取值是10, 此时恒伟10折交叉验证; 其他常用的k值有5, 20等.
- 如上图, 与留出法相似, 将数据集D划分为k个自己同样存在多种划分方式. 为奸笑因样本划分不同而引入的差别, k折交叉验证通常要随机使用不同的划分重复p次, 最终的评估结果是这p次k折交叉验证结果的均值. 假定数据集D中包含m个样本, 若令 , 则得到了交叉验证法的一个特例: 留一法(Leave-One-Out, 简称LOO).
- 留一法(Leave-One-Out): 留一法不受随机样本划分方式的影响, 因为m个样本只有唯一的方式划分为m个子集, 每个子集包含一个样本; 留一法使用的训练集与初始数据集相比只少了一个样本, 这就是的在绝大多数情况下, 留一法中被实际评估的模型与七万该评估的用D训练出的模型很相似. 因此, 留一法的评估结果往往被认为比较准确. 然后留一法也有缺陷: 在数据集比较大时, 训练m个模型的计算开销可能是难以忍受的, 二这还是在未考虑算法调参的情况下. 另外, 留一法的估计结果也未必永远比其他评估方法准确; '没有免费的午餐'定理,对实验评估方法同样适用.
自助法
- 自助法(BootStrapping): 直接以自助采样法(BootStrap Sampling)为基础, 给定包含m个样本的数据集D, 我们对他进行采样产生数据集 : 每次随机从D中挑选一个样本, 将其拷贝放入 , 然后再讲改样本放回初始数据集D中, 使得该样本在下次采样时仍有可能被采到; 这个过程重复执行m次后, 我们就得到了包含m个样本的数据集 , 这就是自助采样的结果. 显然, D中会有一部分样本会在 中多次出现, 而另一部分样本不出现. 可以做一个简单的估计, 样本在m次采样中始终不背采到的概率是 , 取极限得到:
- 自助法在数据集较小, 难以有效划分训练/测试集时很有用; 此外自助法能从初始数据集中产生多个不同的训练集, 这对集成学习等方法有很大的好处. 然而自助法产生的数据集改变了初始数据集的分布, 这会引入估计偏差. 一次在初始数据量足够是, 留出法和交叉验证法更常用一些.
调参与最终模型
- 调参(Parameter Tunning): 大多数学习算法都有些参数(Parameter)需要设定, 参数配置不用, 学的模型的性能往往有显著差别. 因此, 在进行模型评估与选择时, 除了要对适用学习算法进行选择, 还需要对算法参数进行设定, 这就是通常所说的'参数调节'或简称'调参'(Parameter Tunning).
- 给定包含m个样本的数据集D, 在模型评估与选择过程中由于需要在留出一部分数据激进型评估测试, 事实上我们只使用了一部分数据训练模型. 因此, 在模型选择完成后, 学习算法和参数配置已选定, 此时应该用数据集D重新训练模型. 这个模型在训练过程中使用了所有m个样本, 这才是我们最终提交给用户的模型.
- 我们通常把学的模型在实际使用中遇到的数据称为测试数据, 为了加以区分, 模型评估与选择中用于评估测试的数据集常称为'验证集'(Validation Set). 例如, 在研究对比不同算法的泛化性能时, 我们用测试集上的判别效果来估计模型在实际使用时的繁华能力, 二把训练数据另外划分为训练集和验证集, 基于验证集上的性能来进行模型选择和调参.
写在后面
- 相信大家在读完这篇文章之后, 对于评估模型的一些常用方法会有所了解, 在下一个章节中, 我们将会继续学习性能度量与比较检验.
Related
训练集和验证集的分片还有这么多方法,我之前还像就用过留出法和交叉验证法,受教了。