正则化

  01 Jan 2015


概念

基本思想:通过某些含有解的先验知识的非负的辅助泛函来使解稳定,先验知识的一般形式涉及假设输入输出映射函数(即重建问题的解)是光滑的。


产生过拟合的原因

  1. 建模样本抽取错误,包括(但不限于)样本数量太少,抽样方法错误,抽样时没有足够正确考虑业务场景或业务特点,等等导致抽出的样本数据不能有效足够代表业务逻辑或业务场景;

  2. 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;

  3. 在决策树模型搭建中,如果我们对于决策树的生长没有合理的限制和修剪的话,决策树的自由生长有可能每片叶子里只包含单纯的事件数据(event)或非事件数据(no event),可以想象,这种决策树当然可以完美匹配(拟合)训练数据,但是一旦应用到新的业务真实数据时,效果是一塌糊涂。

  4. 建模时的“逻辑假设”到了模型应用时已经不能成立了。任何预测模型都是在假设的基础上才可以搭建和应用的,常用的假设包括:假设历史数据可以推测未来,假设业务环节没有发生显著变化,假设建模数据与后来的应用数据是相似的,等等。如果上述假设违反了业务场景的话,根据这些假设搭建的模型当然是无法有效应用的。

  5. 建模时使用了太多的输入变量,这跟上面第二点(噪音数据)有些类似,数据挖掘新人常常犯这个错误,自己不做分析判断,把所有的变量交给软件或者机器去“撞大运”。须知,一个稳定优良的模型一定要遵循建模输入变量“少而精”的原则的。


避免过拟合的方法

  1. 权值衰减.(weight decay):权值衰减惩罚项使得权值收敛到较小的绝对值,而惩罚大的权值;

  2. 适当的stopping criterion;

  3. 验证数据:一个最成功的方法是在训练数据外再为算法提供一套验证数据,应该使用在验证集合上产生最小误差的迭代次数,不是总能明显地确定验证集合何时达到最小误差.Typically 30% of training patterns;Validation set error is checked each epoch;Stop training if validation error goes up;

  4. 交叉验证(Cross-validation with some patterns):交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重。

    k-fold交叉方法:把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。

  5. 减少特征:人工选择,预留一些特征;利用算法选取一些比较好的特征;

  6. 正则化:在机器学习中,正则化是非常常用的方法。它用来约束模型的参数,使得求解出来的参数不会太大(模型不能过于复杂),以防止过拟合。

  7. 剪枝:CART中有用到。


L0范数

L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0,即稀疏。


L1范数

L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。这说是说,W的L1范数是绝对值, w 在w=0处是不可微。

问题:既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解:一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。

总结:L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。(为什么L1能实现稀疏而L2不能,因为求偏导后的形式不同,L2会使权值很小,但不为0)


L2范数(岭回归)

在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。用于改善过拟合。

L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项   W   2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,而越小的参数说明模型越简单(或说越平滑),越简单的模型则越不容易产生过拟合现象。

问题:为什么越小的参数说明模型越简单?理解是:限制了参数很小,实际上就限制了多项式某些分量的影响很小,这样就相当于减少参数个数。

L2范数的好处:

  1. 从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。

  2. 从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。

    总结:L1(Lasso)会趋向于产生少量的特征,而其他的特征都是0,而L2(Ridge)会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。


核范数Nuclear Norm

核范数是指矩阵奇异值的和,作用是约束Low-Rank(低秩).

参考http://blog.csdn.net/zouxy09/article/details/24972869


参数稀疏的好处

  1. 特征选择(Feature Selection):稀疏规则化能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

  2. 可解释性(Interpretability):使模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。