经验误差与过拟合
在学习过程中,我们希望得到一个在新样本上能表现得很好的学习器,为了达到这个目的,应该从训练样本中尽可能的学出适用于所有潜在样本的普遍规律,然而,当学习器把训练样本学的太好的时候,很可能已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为过拟合(overfitting)。与过拟合相对的是欠拟合(underfitting),这是指对训练样本的一般性质尚未学好。
欠拟合比较容易克服,过拟合才是机器学习面临的关键障碍,必须认识到过拟合是无法彻底避免的,我们能做的只是缓解。
评估方法
通常,我们可以通过实验测试来对学习器的泛化误差进行评估并进而做出选择,为此,需使用一个测试集来测试学习器对新样本的判别能力,然后以测试机上的测试误差作为泛化误差的近似。需注意的是,测试集应尽可能与训练集互斥。
可是,我们只有一个包含m个样例的数据集,既要训练又要测试,怎么样才能做到?答案是通过对数据集进行适当的处理,从中产生出训练集S和测试集T,下面介绍几种常见做法。
留出法(hold-out)
直接将数据集划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,例如在分类任务中至少要保持样本的类别比例相似。如果从采样的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为分层采样。
使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
留出法的常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试,一般而言,测试集至少应含30个样例。
交叉验证法(cross validation)
先将数据集划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从数据集中通过分层采样得到,然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就可获得k组训练/测试集,从而可尽行k次训练和测试,最终返回的是这k个测试结果的均值。又称为k折交叉验证,k的最常用取值是10。
假定数据集中包含m个样本,若令k=m,则得到了交叉验证法的一个特例,留一法(leave-one-out,简称LOO)。显然,留一法不受随机样本划分方式的影响,其评估结果往往被认为比较准确,但在数据集比较大时,计算开销则可能是难以忍受的。
自助法(bootstrapping)
给定包含m个样本的数据集,我们对他进行采样产生数据集:每次随机从中挑选一个样本,将其拷贝放入,然后再将该样本放回初始数据集中,是的该样本在下次采样时仍有可能被采到,这个过程重复执行m次后,就得到了包含m个样本的额数据集,二者差集作为测试集。
自助法在数据集较小,难以有效划分训练/测试集时很有用,然而自助法产生的数据集改变了初始数据集的分布,引入了估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
调参与最终模型
学习算法的很多参数是在实数范围内取值,因此对每种参数配置都训练出模型来是不可行的,现实中常用的做法是对每一个参数选定一个范围和变化步长。
学习算法和参数配置若已选定,此时应用数据集重新训练模型,这个模型在训练过程中使用了所有m个样本,这才是我们最终提交给用户的模型。
网友评论