正则化防止过拟合

在之前的线性回归就有提到正则化,下面就来更具体地介绍正则化。

1. 正则化的作用

当训练数据比较少时,或模型训练过度时,常常会导致过拟合。正则化主要作用就是通过减小模型的复杂度来防止过拟合,提高泛化能力。

为了更好的了解过拟合以及为后面做铺垫,还是先看一个吴恩达机器学习系列课程中一个线性回归来预测房价的例子吧
正则化防止过拟合_第1张图片
Size表示房子的大小,Price表示预测的房子价格。

  1. 图一用一次函数来拟合数据,很明显效果不太好,事实上随着Size的增大,Price应该趋于平缓,此时模型并没有很好的拟合数据出现了欠拟合。
  2. 图二用更为复杂的二次函数来拟合数据,得到了较好的效果。
  3. 图三更为极端,采用了一个四次多项式拟合数据,得到一条穿过每一个样本的扭曲曲线,但却会大大的降低模型的泛化能力,即过拟合。

很明显,若使用一个较为高阶的函数去拟合数据集可以获得一个几乎能拟合全部样本的假设函数,但可能会出现大量参数变量、模型更加的复杂问题,数据将不能完全的约束它,或者变相的说现在的数据量过少了,这样的模型过拟合,面对新的数据时效果不好(泛化能力比较弱)。

2.过拟合解决办法

1.减少选取的特征变量,人工的确定哪些特征更为重要,保留这些特征。如:线性回归中可以利用热力图来判断。
2.增大样本量(可以这么说特征变量和样本量之间的数量关系类似于成反比的关系)
3.正则化处理。通过减小参数或稀疏化参数来降低模型的复杂度(一般我们认为参数越小、越少就越简单,也就是奥卡姆剃刀法则),从而防止过拟合。

3. L2正则化(权重衰减)

为了把下面右边的曲线变成左边的曲线,我们想到可不可以简化
Θ34,将其变小,函数退化成二次函数。在lose函数后加上1000Θ32,1000Θ42,当最小化函数时,由于Θ3和Θ4系数较大,只能自身变得很小,从而达到我们的目的。
正则化防止过拟合_第2张图片
这又引出了一个问题,有时我们并不知道哪些参数需要变小,所以我们就加上了一个含有所有参数的惩罚项,去缩小所有参数,事实证明,这让模型更加的简单,曲线更加的平滑。

  1. L2正则化就是在原来的代价函数后面加一个正则项:
    正则化防止过拟合_第3张图片
    C0表示原来的代价函数,后面的一项表示每个参数的平方和除以样本数n,λ是一个大于0的超参数(过大容易欠拟合,过小容易过拟合),1/2是为了求导的方便。
    【注意:正则化项一般不包括参数b】

  2. 通过对lose函数的求导可知正则化对参数b没有影响,进行w的更新:
    正则化防止过拟合_第4张图片
    与不用正则化相比,更新时多了1−ηλ/n,那么w减少的更多,权重衰减。当然,由于w进行多次的迭代更新,w最终可能增大,也可能减小。自此,通过L2正则化,我们得到更小的参数w,使得模型更简单,大大的减少了过拟合的情况。

4. L1正则化

还有一种叫做L1正则化:
正则化防止过拟合_第5张图片
此时的正则项是所有参数w的绝对值除于样本数,乘上λ,同样进行求导:
正则化防止过拟合_第6张图片
比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使一些w尽可能为0,也就相当于稀疏化参数。稀疏化能够自动的进行特征选择,去掉一些没太大用处的特征,将这些特征权重设为0。

总结

  1. 首次接触到正则化时,只知道要在lose函数后面加一个正则项,至于为什么要这样一直不是很清楚,我觉得在讨论正则项前应该先引入参数的简化及作用。
  2. 正则化能够较好的处理过拟合问题,相比于减少选取的特征变量,正则化保留了所有的特征,有些特征虽然作用小但仍有一定的用处;当然有时为了提升效果两种方法一起使用。
  3. L1正则化是通过稀疏化参数来降低复杂度,L2正则化通过减小参数的大小来降低复杂度。

你可能感兴趣的:(机器学习,python,机器学习,算法)