原理解析-过拟合与正则化


原理解析-过拟合与正则化

  • 什么是过拟合
  • 线性回归中,正则化一般怎么实现?
    • L0正则化解析
    • L1正则化解析
      • L1正则化为什么可以防止过拟合?
    • 为什么L1正则化会使得参数稀疏,一部分参数的系数会变为0?
    • L2正则化解析
      • L2正则化为什么可以防止过拟合?
    • 为什么L2正则化会使得参数接近0,而不会变为0?
  • 总结

什么是过拟合

本来关于过拟合与正则化,我是不打算写一篇文章的,今晚想了想,还是写一篇吧。

一是直接写带正则化的线性回归代码,显得有些突兀;
二是这个东西确实比较重要,我这里会尽量简单的讲清楚。

什么是过拟合?
我们都知道,目前我们在讲的线性回归,是监督学习里面的一种,通过对样本的学习训练,得出合适的参数,使得损失函数在这些样本上最小,即在样本上表现良好,但是我们之所以训练模型,是为了让它在未知样本上,同样表现良好(所以正常的我们做机器学习,会把样本分成训练集、测试集,当模型在训练集、测试集表现稳定,效果也很好时,我们的这次机器学习训练才算成功,这个模型才有泛化能力)。

下面看一张很经典的图:

图二就是正常拟合,符合数据的趋势,
而图三,虽然在训练集上拟合得很好,但是出现未知数据时,比如Size很大时,根据目前拟合来看,可能得到的结果很小,与实际误差会很大。

因此,我们仅仅使得损失函数在样本上最小,是不够的,我们来看 监督机器学习的核心原理公式 :(这个LaTeX 数学公式必须手打了,毕竟核心公式)

m i n 1 M ∑ i = 1 M L ( y i , f ( x i ) ) + λ J ( f ) min\frac{1}{M}\sum_{i=1}^{M} L(y_i,f(x_i)) + \lambda{J(f)} minM1​i=1∑M​L(yi​,f(xi​))+λJ(f)

以上才是监督算法的损失函数的完整形式, 1 M ∑ i = 1 M L ( y i , f ( x i ) ) \frac{1}{M}\sum_{i=1}^{M} L(y_i,f(x_i)) M1​i=1∑M​L(yi​,f(xi​))这个部分代表 经验误差函数 ,即在样本上训练的损失,
而后面部分 λJ(f) 代表 结构误差函数 ,也称为正则项,惩罚项,正则化参数的同时,最小化经验误差函数, 最小化经验误差是为了极大程度的拟合训练数据,正则化参数是为了防止过分的拟合训练数据,因此对系数进行一定的惩罚。

OK,过拟合应该讲得很清楚了,接下来讲线性回归三种形式的正则化。

线性回归中,正则化一般怎么实现?

L0正则化解析

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

L0正则化的最优化问题是一个NP hard问题,L1正则化是L0正则化的最优凸近似,这里我们不展开L0的讨论,大家知道有这么个东西就可以了。

L1正则化解析

带L1正则化的线性回归也叫Lasso回归,其全称是 The Least Absolute Shrinkage and Selectionator operator ,直译过来就是最小绝对值收缩和选择算子,表现形式为:
λ ∑ j = 1 n ∣ ∣ θ j ∣ ∣ \lambda{\sum_{j=1}^{n}}\vert\vert{\theta_j}\vert\vert λj=1∑n​∣∣θj​∣∣
代表向量中各个元素绝对值之和,λ为正则化系数。

L1正则化为什么可以防止过拟合?

L1正则化之所以可以防止过拟合,是因为L1范数就是各个参数的绝对值相加得到的,参数值大小和模型复杂度是成正比的。因此如果拟合出一个复杂的模型(即出现了过拟合),其L1范数就大,这样L1正则化惩罚就高,整体损失函数就没有收敛,
所以最终不会选择这些过拟合的参数。
同时,L1正则化会使得参数稀疏,一部分参数的系数会变为0。

问题:稀疏的参数代表模型越简单吗?
回答:是的,模型简化,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,
那么可以对训练数据可以预测的很好,但是对测试数据就很差了。参数变少也可以使整个模型获得更好的可解释性。

问题:参数值越小代表模型越简单吗?
回答:是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,
甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,
而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

为什么L1正则化会使得参数稀疏,一部分参数的系数会变为0?

1.从数学角度来看,我们手写一下

2、从图像来看,

假设有2个参数,暂且用w1,w2来表示,y = |w1| + |w2| ,函数图像如上图的四边形,圆圈表示w1,w2取不同值时整个正则化项的值的等高线,很明显很容易在顶点处相交,此时w1=0

后面会用实例来展示L1可以防止过拟合,也会使系数稀疏。

链接: 手写算法- python代码实现Lasso回归与实例展示

L2正则化解析

带L2正则化的线性回归也叫岭回归,Ridge回归,也叫它“权值衰减weight decay”,表现形式为:
λ ∑ j = 1 n θ j 2 \lambda{\sum_{j=1}^{n}}{\theta_j}^2 λj=1∑n​θj​2
代表向量中各个元素平方之和,λ为正则化系数。

L2正则化为什么可以防止过拟合?

L2正则化会使得参数接近于0。越小的参数说明模型越简单,越简单的模型越不容易产生过拟合现象。
同样的,如果拟合出一个复杂的模型(即出现了过拟合),其L2范数就大,这样L2正则化惩罚就高,整体损失函数就没有收敛,
所以最终不会选择这些过拟合的参数。

为什么L2正则化会使得参数接近0,而不会变为0?

1、从数学角度来看,

2、从图像来看,

假设有2个参数,暂且用w1,w2来表示,y = w1^2 + w2^2 ,函数图像就是一个圆形,圆圈表示w1,w2取不同值时整个正则化项的值的等高线,很明显不容易在顶点处相交,因此参数不会变为0,只会接近0。

后面会用实例来展示L2可以防止过拟合,也会使系数趋近于0。

链接: 手写算法- python代码实现Ridge(L2正则项)回归

总结

L1、L2应该讲清楚了,其实还有一种正则化,弹性网Elastic Net,就是L1和L2结合在一起,L1、l2理解了,弹性网就能理解。介于两者之间

接下来会写2种正则化回归Python代码,里面会用实例展示效果。


原文链接:https://blog.csdn.net/weixin_44700798/article/details/110675144