内容提要:
* 正则化
* 交叉验证
点击蓝字 |关注我们
这一篇中,我们学习一下正则化与交叉验证。这是监督学习中两种常用的模型选择方法。
正则化
Regularization
上一节讲到,对模型进行评估时,主要是从模型对已知数据和未知数据的预测能力来评价,所以选择模型时要平衡两者。
过拟合:训练误差低,测试误差高
欠拟合:训练误差高,测试误差低
追溯到模型结构上,过拟合往往由于模型结构太过复杂而导致,欠拟合则是由于模型结构太简单。
为了平衡模型的对已知数据和未知数据的预测能力,我们在原来的经验风险上加上了正则化项,以此度量模型复杂度。经验风险与正则化项一起构成结构风险函数。
正则化,就是通过使结构风险最小化来实现的。在正则化的一般形式中,目标函数为结构风险。其中,第一部分是经验风险,用以度量模型在训练集中的平均损失,第二部分被称为正则化项或惩罚项,J(f) 度量模型的复杂度,系数 λ,用以调整经验风险和模型复杂度之间的关系。
一般,模型参数越多,模型越复杂,J(f) 就越大。
λ 越大,模型选择时越重视泛化能力,选出来最优模型参数越少;与之相对地,系数越小,越重视拟合能力,选出来的最优模型可能会出现过拟合。
这是因为,如果 λ 很大,J(f) 的微小变化都能引发结构风险的一个很大的变化,那么,通过正则化就会压缩模型复杂度,则会避免过拟合的现象出现。但是,如果 λ 非常小,J(f) 的巨大变化才能引发结构风险的一个很小的变化,那么,此时通过正则化就无法降低模型复杂度了。因此,系数 λ 的选择是个关键。
我们的目的是选择拟合能力和泛化能力都很强的模型。
正则化项有很多种形式,最常见的是以上两种。
第一个正则化项是L1范数,即参数绝对值之和,更适用于特征筛选,在回归分析中,就是大家熟知的Lasso回归,可以选择出一个稀疏的模型。稀疏模型,指的非零参数个数很少的模型。
第二个正则化项是L2范数,即参数的平方和,主要用以防止过拟合现象的出现,在回归分析中,是大家熟悉的岭回归。L2正则化项的构成,使得在正则化的时候,参数可以无限的接近于0,但是与L1范数不同,这里参数只是接近于0,很难出现直接等于0的情况。所以,这一类正则化项,可以使得模型越来越简单,防止过拟合现象的出现,但无法起到特征筛选的作用。
再说一下,为什么L2范数这里有一个1/2?这主要是出于数学运算的方便。求极值时,如果使用求导的方法,那么1/2恰好可以约去。
正则化,就用来选择经验风险和模型复杂度同时都很小的模型。这种思想非常符合奥卡姆剃刀原理。即在模型选择时,选择假设空间中既能很好地解释已知数据,结构又十分简单的模型。
回顾之前所讲的多项式拟合的例子,图中蓝色的折线代表训练误差,橙色的代表测试误差。对于10个已知的数据点,当多项式最高次数取 3-9 的时候,训练误差几乎为0,拟合效果越来越好。但是,在这些模型里中,只有3次多项式是最简单的。所以根据奥卡姆剃刀原理,我们应该选择3次多项式这个模型。
交叉验证
Cross Validation
在样本的数据量足够充足的情况下,通常可以将数据集随机地分为训练集、验证集,还有测试集三部分。
关于训练集和测试集,我们在上一篇讲义中给大家具体讲解过,但是验证集首次出现在本篇。
训练集(Training Set):用以训练模型
验证集(Validation Set):用以选择模型
测试集(Test Set):用以最终对学习方法的评估
通常,我们假设验证集中有足够多的数据,这样,通过训练集所得到的模型放入验证集里,选择预测误差最小的那个模型,就是最优模型了。
但是,现实情况中,样本数据通常是不充足的。那么,为了选择一个好的模型,可以采用交叉验证的方法。
交叉验证的基本思想就是,重复使用数据,以解决数据不足的这种问题。这里我们介绍三种交叉验证法,简单交叉验证,S折交叉验证,还有留一交叉验证。
1. 简单交叉验证
简单交叉验证法,是将数据集随机的分为两个部分,一个作为训练集,一个作为测试集。
举个例子,假如我们将样本的70%作为训练集,30%作为测试集,那么在不同的情况下,可以通过训练集得到不同的学习模型,将学习训练得到的不同模型放到测试集上,计算测试误差,测试误差最小的模型则是最优模型。
2. S折交叉验证
S折交叉验证,随机将数据分为 S 个互不相交、大小相同的子集,其中以 S-1 个子集作为训练集,余下的子集作为测试集。
下面通过一个例子来说明。假如S=10,我们可以将数据集均匀的分为T1,T2,...... T10 这十个子集。
那么,可以将其中九个子集的并集作为训练集,剩余的那个子集作为测试集。比如,将T1-T9的并集作为训练集,用于训练模型,所得模型记做M1。通过类似的方法,我们还可以得到模型M2,M3,...... M10。分别在每个模型相应的测试集中计算测试误差,并进行比较,测试误差最小的模型,就是最优模型。
3. 留一交叉验证
留一交叉验证,可以认为是S折交叉验证的特殊情况,即 S=N 的情况,这里的 N 指的是数据集的样本容量。留一交叉验证,leave-one-out cross validation,也就是每次用N-1个样本训练模型,余下的那个样本测试模型。这是在数据非常缺乏的情况下才使用的方法。
好啦,咱们这一期的讲义就结束了,以下为本节课程的视频链接:
欢迎大家关注简博士的B站和公众号,在公众号私信“入群”,可以与小伙伴们一起讨论问题哦。
扫码关注我们
微信号|Dr_Janneil
B站|简博士

