正则化与交叉验证

来源:互联网 发布:淘宝雷锋侠怎么看 编辑:程序博客网 时间:2024/06/05 04:32

  上一篇博文学习了一下模型的的学习策略,实际上就是目标函数、评价函数。有两种准则:经验风险最小化,结构风险最小化。两者的区别就是结构风险最小化是在经验风险最小化的基础上加了一个正则化项。首先就了解一下正则化项。

(1)正则化

  模型选择的典型方法是正则化。正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或者罚项,

                    

  正则化项符合奥卡姆剃刀原理。奥卡姆剃刀原理应用于模型选择时变为一下想法:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是好模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率,可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。正则化的本质就是,给优化参数一定约束。

  可能还是对为什么正则化搞不清楚?举个不是很恰当的例子:商家制作雨伞,我喜欢的是雨伞上有斑点狗团,材料要丝绸的,带蕾丝边的,还希望雨伞上能播放点小电影。。。。但是!!!我这个需求太特殊化了,除非我有钱请一个私人厂家为我量身定制。因为如果厂家把这样的雨伞制作出来,别人估计不会买(对测试集未知数据没有很好地误差),这就叫过拟合。并且我的这些个性需求越多,那么雨伞造价就越高。厂家要制作的是满足大众需求的,具有普遍共性的雨伞。这就是奥考姆剃刀原理,保证了大众需求的同时他又很简单。正则化就是就好比加入了成本控制项目,它是个性需求复杂度的函数。


L0,L1,L2正则化(重点)

  L0范数:向量中非0元素的个数。如果用L0范数来规则化一个参数矩阵W的话,那么我们希望W的元素大部分都是0。让参数是稀疏的。L0范数的最小化问题在实际应用中是NP问题,所以在实际中不会应用。


  L1范数是向量中各个元素绝对值之和,有个美称“稀疏规则算子”,为什么L1会使权值稀疏?L1范数是L0范数的最优凸近似。既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。

  参数稀疏的好处是什么?

  (1)对稀疏趋之若鹜的一个关键原因就是它能实现特征的自动选择。一般来说,样本X的大部分内容(大部分特征)都是和最终的输出y无关的或者不提供任何信息。在经验风险最小化的时候,考虑这些特征,虽然可以提高训练误差,但是在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了正确的预测。稀疏规则算子就是为了完场特征自动选择的光荣使命。它会将没用的特征去掉,将这些特征对应的权重设置为0.

  (2)模型可解释性强


  L2范数是指向量各元素的平方和然后求平方根。在回归里面,把有L2 范数的回归称为岭回归,有人也称它为权值衰减。我们让L2范数的规则项最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。实际上L2范数就是限制了权重参数的增长。

  在经验风险最小化的基础上,加入了正则化项,相当于是加了约束条件,变成了有约束条件的最优化问题。

 

上面这幅图很好的解释了L1范数与L2范数

         L1范数:。L1的输出图像如上左图所示,发现L1图像在和每个坐标轴相交的地方都有角出现,而目标函数的等值线除非摆的非常好,否则大部分的时候都会在有角的地方相交。而在有角的地方相交会产生稀疏性。

         相比之下,L2没有L1范数这样的性质,因为没有角,所以第一次相交的地方出现在具有稀疏性的地方可能性比较小。

         即采用L1范数正则化项等值线与经验风险等值线的交点常常出现自坐标轴上,即W1或者W2等于0,这样就相当于减少了参数的数量。采用L2范数的时候,交点一般出现在某个象限内,即W1,W2均不为0,。换言之L1范数更易于得到稀疏解。

         W取得稀疏解意味着初始的d歌特征中仅仅对应的权重w不为0的特征才会出现在最终模型中,于是求解L1范数正则化的结果是得到了仅采用一部分初始特征的模型。L1范数的求解可以采用近端梯度下降PGD。

 



 (2)交叉验证

  在数据量不是很足够的情况下,为了选择好的模型,采用交叉验证的方法。交叉验证的基本思想就是重复的使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集。

  1,简单交叉验证。随机的将数据集按照一定的比例划分成两部分,一部分做训练集,一部分做测试集。

  2,S折交叉验证。

  应用最多的就是S折交叉验证:首先随机的将已给数据划分成S个互不相交的大小相同的子集,然后利用S-1个子集的数据训练模型,利用余下的子集做测试模型。将这一过程可能的S种选择重复进行,最后选出S次评测中平均测试误差最小的模型。

  3,留一交叉验证。S折交叉验证的特殊情况。S=N。往往在数据缺乏的情况下进行。


1 0
原创粉丝点击