机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化

目录

  • 1、过拟合与欠拟合
  • 2、学习曲线
  • 3、数据划分
  • 4、交叉验证
  • 5、偏差方差权衡 Bias Variance Trade off
  • 6、模型正则化 Regularization
    • 6.1、正则化
    • 6.2、岭回归 Ridge Regression
    • 6.3、LASSO Regression
    • 6.4、L1正则化,L2正则化和弹性网 Elastic Net

1、过拟合与欠拟合

  • 欠拟合 underfitting
    算法所训练的模型不能完整表述数据关系
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第1张图片

  • 过拟合 overfitting
    算法所训练的模型过多的表达了数据间的噪音关系
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第2张图片

2、学习曲线

学习曲线:以训练数据集样本量(number of training samples)为横坐标,以模型在训练样本和交叉验证样本上的平均得分以及得分区间为纵坐标,绘制出的曲线就是学习曲线。
机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第3张图片

  • 欠拟合学习曲线
    train和test 最后稳定在一个较大的位置
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第4张图片
  • 最佳学习曲线
    train和test 最后稳定在一个较小的位置
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第5张图片
  • 过拟合学习曲线
    train和test 最后稳定的位置偏差较大
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第6张图片

3、数据划分

  • 训练集
    用来训练模型内参数的数据集,Classfier直接根据训练集来调整自身获得更好的分类效果

  • 验证集
    用来在训练过程中检验模型的状态,收敛情况。验证集通常用来调整超参数,根据几组模型的验证集上的表现决定哪组超参数拥有最好的性能。
    同时验证集在训练过程中还可以用来监控模型是否发生过拟合,一般来说验证集表现稳定后,若继续训练,训练集表现还会继续上升,但是验证集会出现不升反降的情况,这样一般发生了过拟合。

  • 测试集
    测试集用来评价模型泛化能力,即之前模型使用验证集确定了超参数,使用训练集调整了参数,最后使用一个从没有见过的数据集来判断这个模型是否Work。

  • 三者区别
    形象上来说训练集就像是学生的课本,学生根据课本里的内容来掌握知识,验证集就像是作业,通过作业可以知道 不同学生学习情况、进步的速度快慢,而最终的测试集就像是考试,考的题是平常都没有见过,考察学生举一反三的能力。

  • 为什么要测试集
    训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力,这样一些 对课本死记硬背的学生(过拟合)将会拥有最好的成绩,显然不对。同理,由于验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型,就像刷题库的学生也不能算是学习好的学生是吧。所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力。

但是仅凭一次考试就对模型的好坏进行评判显然是不合理的,所以接下来就要介绍交叉验证法

机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第7张图片

4、交叉验证

所谓交叉验证,即将一定比例的数据挑选出来作为训练样本,另外的样本作为保留样本,现在训练样本上获取回归方程,然后在保留样本上做预测。由于保留样本不涉及模型参数的选择,该样本可获得比新数据更为精确的估计。
机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第8张图片

  1. k-folds 交叉验证
    把训练数据集分成k份,称为k-folds cross validation,缺点是每训练k个模型,相当于整体性能慢了k倍。
  2. 留一法 LOO-CV
    把训练数据集分成m分,称为留一法 Leave-One-Out Cross Validation
    优点:完全不受随机的影响,最接近模型真正的性能指标
    缺点:计算量最大

5、偏差方差权衡 Bias Variance Trade off

  • 偏差 Bias
    描述的是预测值的期望与真实值之间的差距。偏差越大,越偏离真实数据,如下图第二行所示。
    导致偏差的主要原因:对问题本身的假设不正确!举个栗子:非线性数据使用线性回归,一般表现为欠拟合。
  • 方差 Variance
    描述的是预测值的变化范围,离散程度,也就是离期望值的距离。方差越大,数据分布越分散,按如下图右列所示。数据的一点点扰动都会较大地影响模型。通常原因,使用的模型太复杂。如高阶多项式回归,一般表现为过拟合。
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第9张图片

有一些算法天生是高方差的算法。如kNN。非参数学习通常都是高方差算法。因为不对数据进行任何假设。有一些算法天生是高偏差算法。如线性回归。参数学习通常都是高偏差算法。因为对数据具有极强的假设。大多数算法具有相应的参数,可以调整偏差和方差,如kNN中的k。偏差和方差通常是矛盾的。降低偏差,会提高方差。降低方差,会提高偏差。机器学习的主要挑战来自于方差!解决高方差的通常手段:

  1. 降低模型复杂度
  2. 减少数据维度;降噪
  3. 增加样本数
  4. 使用验证集
  5. 模型正则化

6、模型正则化 Regularization

简单来说,正则化是一种为了减少测试误差的行为。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。在线性回归中如果参数 θ \theta θ过大、特征过多就会很容易造成过拟合,如下图所示:
机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第10张图片

6.1、正则化

岭回归与Lasso 回归的出现是为了解决出现过拟合,通过在损失函数中引入正则化项来达到目的。在日常机器学习任务中,岭回归最先用来处理特征数多与样本的情况,现在也用来在估计中加入偏差,从而得到更好的估计。这里通过引入 λ \lambda λ限制了所有 θ 2 \theta^2 θ2之和,通过引入该惩罚项,呢能够减少不重要参数,这个技术在统计学上叫作缩减(shrinkage)。和岭回归类似,另一个缩减LASSO也加入了正则项对系数做了限定。
为了防止过拟合( θ \theta θ过大),在目标函数 J ( θ ) J(\theta) J(θ)后面添加复杂度惩罚因子,即正则项来防止过拟合。正则项可以使用 L 1 − n o r m ( L A S S O R e g r e s s i o n ) L_{1-norm}(LASSO Regression) L1norm(LASSORegression) L 2 − n o r m ( R i d g e R e g r e s s i o n ) L_{2-norm}(Ridge Regression) L2norm(RidgeRegression),或结合 L 1 − n o r m L_{1-norm} L1norm L 2 − n o r m ( E l a s t i c N e t ) L_{2-norm}(Elastic\quad Net) L2norm(ElasticNet)

6.2、岭回归 Ridge Regression

J ( θ , b ) = J ( θ , b ) + λ 1 2 ∑ i = 1 m θ i 2 J(\theta,b)=J(\theta,b)+\lambda\frac{1}{2}\sum\limits_{i=1}\limits^m\theta_i^2 J(θ,b)=J(θ,b)+λ21i=1mθi2

6.3、LASSO Regression

J ( θ , b ) = J ( θ , b ) + λ ∑ i = 1 m n ∣ θ i ∣ J(\theta,b)=J(\theta,b)+\lambda\sum\limits_{i=1}\limits^mn|\theta_i| J(θ,b)=J(θ,b)+λi=1mnθi

6.4、L1正则化,L2正则化和弹性网 Elastic Net

  • L1 & L2范数

首先介绍一下范数的定义,假设 x x x 是一个向量,它的 L p L^p Lp范数定义:
∣ ∣ x ∣ ∣ p = ( ∑ i ) ∣ x i ∣ p ) 1 p ||x||_p=(\sum\limits_i)|x_i|^p)^\frac{1}{p} xp=(i)xip)p1
在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加入正则化项之后的目标函数为:
J ( θ , b ) = J ( θ , b ) + λ 2 m Ω ( θ ) J(\theta,b)=J(\theta,b)+\frac{\lambda}{2m} \Omega(\theta) J(θ,b)=J(θ,b)+2mλΩ(θ)
式中, λ 2 m \frac{\lambda}{2m} 2mλ是一个常数, m m m 为样本个数, λ \lambda λ 是一个超参数,用来控制正则化程度。

  • L1正则化(LASSO)

L 1 L^1 L1 正则化时,对应惩罚项为 L 1 L1 L1范数:
Ω ( θ ) = ∣ ∣ θ ∣ ∣ 1 = ∑ i ∣ θ i ∣ \Omega(\theta)=||\theta||_1=\sum\limits_i|\theta_i| Ω(θ)=θ1=iθi

  • L2正则化(Ridge)

L 2 L^2 L2 正则化时,对应惩罚项为 L 2 L2 L2范数:
Ω ( θ ) = ∣ ∣ θ ∣ ∣ 2 2 = ∑ i θ i 2 \Omega(\theta)=||\theta||_2^2=\sum\limits_i\theta_i^2 Ω(θ)=θ22=iθi2

  • 弹性网 Elastic Net

对应惩罚项为 L 1 L1 L1范数和 L 2 L2 L2范数两项权重的和:
J ( θ , b ) = J ( θ , b ) + λ ( ρ ∑ j m ∣ θ j ∣ + ( 1 − ρ ) ∑ j m θ j 2 ) J(\theta,b)=J(\theta,b)+\lambda(\rho\sum\limits_j\limits^m|\theta_j|+(1-\rho)\sum\limits_j\limits^m\theta_j^2) J(θ,b)=J(θ,b)+λ(ρjmθj+(1ρ)jmθj2)

  • L1 正则化 与 L2 正则化区别

从上式可以看出, L 1 L^1 L1 正则化通过让原目标函数加上所有特征系数绝对值的和来实现正则化,而 L 2 L^2 L2 正则化通过让原来目标函数加上所有特征系数的平方和来实现正则化。
两者都是通过加上一个和项来限制参数大小,却有不同的效果: L 1 L^1 L1 正则化更适合用于特征选择,而 L 2 L^2 L2 正则化更适用于防止模型过拟合
让我们从梯度下降的角度入手,探究两者的区别。
为了方便描述,假设数据只有两个特征即 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 ,考虑 L 1 L^1 L1 正则化的目标函数为:
J = J + λ 2 m ( ∣ θ 1 ∣ + ∣ θ 2 ∣ ) J=J+\frac{\lambda}{2m}(|\theta_1|+|\theta_2|) J=J+2mλ(θ1+θ2)
在每次更新 θ 1 \theta_1 θ1时:
θ 1 : = θ 1 − α d θ 1 = θ 1 − α λ 2 m s i g n ( θ 1 ) − ∂ J ∂ θ 1 s i g n ( x ) = { 1 , x > 0 0 , x = 0 − 1 , x < 0 \theta_1 :=\theta_1-\alpha d\theta_1=\theta_1-\frac{\alpha\lambda}{2m}sign(\theta_1)-\frac{\partial J}{\partial\theta_1}\qquad sign(x)=\left\{ \begin{aligned} &&1,x>0\\ &&0,x=0\\ &&-1,x<0 \end{aligned} \right. θ1:=θ1αdθ1=θ12mαλsign(θ1)θ1Jsign(x)=1,x>00,x=01,x<0
θ 1 \theta_1 θ1为正数,则每次更新会减去一个常数;若 θ 1 \theta_1 θ1为负数,则每次更新会加上一个常数,所有很容易产生特征的系数为0的情况,特殊系数为0表示该特殊不会对结果有任何影响,因此 L 1 L^1 L1正则化会让特征变得稀疏,起到特征选择的作用。
现考虑 L 2 L^2 L2正则化的目标函数:
J = J + λ 2 m ( θ 1 2 + θ 2 2 ) J=J+\frac{\lambda}{2m}(\theta_1^2+\theta_2^2) J=J+2mλ(θ12+θ22)
在每次更新 θ 1 \theta_1 θ1时:
θ 1 : = θ 1 − α d θ 1 = ( 1 − α λ m ) θ 1 − ∂ J ∂ θ 1 \theta_1 :=\theta_1-\alpha d\theta_1=(1-\frac{\alpha\lambda}{m})\theta_1-\frac{\partial J}{\partial\theta_1} θ1:=θ1αdθ1=(1mαλ)θ1θ1J
从上式可以考到每次更新时,会对特征系数进行一个比例的缩放而不是像 L 1 L^1 L1正则化减去一个固定值,这会让一个系数趋向变小而不会变为0,因此 L 2 L^2 L2正则化会让模型变得更简单,防止过拟合,而不会起到特征选择的作用。以上就是 L 1 L^1 L1, L 2 L^2 L2 正则化的作用以及区别。

简单的理解正则化
1. 正则化的目的:防止过拟合
2. 正则化的本质:约束(限制)要优化的参数

关于第1点,过拟合值得是给定一堆数据,这堆数据带有噪声,利用模型去拟合这堆数据,可能会把噪声数据也给拟合了,这一点很致命,一方面会造成模式比较复杂,另一方面,模型泛化性能太差了,遇到了新的数据让你测试,你所得到的过拟合的模型,正确率是很差的。
关于第2点,本来解空间是全部区域,但通过正则化添加了一些约束,使得解空间变小了,甚至在个别正则化方式下解变得稀疏了。
机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第11张图片
上图中左边为Lasso回归,右边为岭回归。红色的椭圆和蓝色区域的切点就是目标函数的最优解,如果是圆,则很容易切到圆周的任意一点,但是很难切到坐标轴上,因此没有稀疏;但是如果是菱形或者多边形,则很容易切到坐标轴上,因此很容易参数稀疏的结果。这也说面了为什么 L 1 L_1 L1范式会稀疏的。这样就解释了为什么lasso可以进行特征选择。岭回归虽然不能进行特征选择,当是对 θ \theta θ的模做约束,使得它的数值会比较小,很大程度上减轻了overfitting的问题。
这里的 β 1 , β 2 \beta_1,\beta_2 β1β2都是模型的参数,要优化的目标参数,蓝色部分区域,其实就是解空间,正如上面说,这个时候,解空间“缩小了”,你只能拿在这个缩小了的空间中,寻找使得目标函数最小的 β 1 , β 2 \beta_1,\beta_2 β1β2。再看看那红色的圆圈,这个坐标轴和特征(数据)没关系,它完全是参数的坐标系,每个圆圈上,可以取无数个 β 1 , β 2 \beta_1,\beta_2 β1β2,这些 β 1 , β 2 \beta_1,\beta_2 β1β2有个共同的特点,用它们计算的目标函数值得相等的。那个圆心,就是实际最优参数,但是由于我们队解空间做了限制,所以最优解只能在“缩小的”解空间中产生。
以两个变量为例,解释岭回归的几何意义:

  1. 没有约束项时。模型参数 β 1 , β 2 \beta_1,\beta_2 β1β2,已经经过标准化。残差平方和RSS可以表示为 β 1 , β 2 \beta_1,\beta_2 β1β2,的一个二次函数,数学上可以用一个抛物面表示。
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第12张图片
  2. 岭回归时。约束项为 β 1 2 + β 2 2 ≤ t \beta_1^2+\beta_2^2\leq t β12+β22t,对应着投影为β1,β2平面上的一个圆,即下图中的圆柱。
    机器学习笔记(四)模型泛化 、过拟合与欠拟合、L1正则化、L2正则化_第13张图片
    可见岭回归解与原先的最小二乘解是有一定距离的。

参考:
https://zhuanlan.zhihu.com/p/35394638
https://www.zhihu.com/question/20448464
https://www.jianshu.com/p/569efedf6985
https://www.jianshu.com/p/569efedf6985
https://www.biaodianfu.com/ridge-lasso-elasticnet.html

你可能感兴趣的:(深度学习笔记,机器学习)