学习曲线:以训练数据集样本量(number of training samples)为横坐标,以模型在训练样本和交叉验证样本上的平均得分以及得分区间为纵坐标,绘制出的曲线就是学习曲线。
训练集
用来训练模型内参数的数据集,Classfier直接根据训练集来调整自身获得更好的分类效果
验证集
用来在训练过程中检验模型的状态,收敛情况。验证集通常用来调整超参数,根据几组模型的验证集上的表现决定哪组超参数拥有最好的性能。
同时验证集在训练过程中还可以用来监控模型是否发生过拟合,一般来说验证集表现稳定后,若继续训练,训练集表现还会继续上升,但是验证集会出现不升反降的情况,这样一般发生了过拟合。
测试集
测试集用来评价模型泛化能力,即之前模型使用验证集确定了超参数,使用训练集调整了参数,最后使用一个从没有见过的数据集来判断这个模型是否Work。
三者区别
形象上来说训练集就像是学生的课本,学生根据课本里的内容来掌握知识,验证集就像是作业,通过作业可以知道 不同学生学习情况、进步的速度快慢,而最终的测试集就像是考试,考的题是平常都没有见过,考察学生举一反三的能力。
为什么要测试集
训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力,这样一些 对课本死记硬背的学生(过拟合)将会拥有最好的成绩,显然不对。同理,由于验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型,就像刷题库的学生也不能算是学习好的学生是吧。所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力。
但是仅凭一次考试就对模型的好坏进行评判显然是不合理的,所以接下来就要介绍交叉验证法
所谓交叉验证,即将一定比例的数据挑选出来作为训练样本,另外的样本作为保留样本,现在训练样本上获取回归方程,然后在保留样本上做预测。由于保留样本不涉及模型参数的选择,该样本可获得比新数据更为精确的估计。
有一些算法天生是高方差的算法。如kNN。非参数学习通常都是高方差算法。因为不对数据进行任何假设。有一些算法天生是高偏差算法。如线性回归。参数学习通常都是高偏差算法。因为对数据具有极强的假设。大多数算法具有相应的参数,可以调整偏差和方差,如kNN中的k。偏差和方差通常是矛盾的。降低偏差,会提高方差。降低方差,会提高偏差。机器学习的主要挑战来自于方差!解决高方差的通常手段:
简单来说,正则化是一种为了减少测试误差的行为。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。在线性回归中如果参数 θ \theta θ过大、特征过多就会很容易造成过拟合,如下图所示:
岭回归与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) L1−norm(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) L2−norm(RidgeRegression),或结合 L 1 − n o r m L_{1-norm} L1−norm、 L 2 − n o r m ( E l a s t i c N e t ) L_{2-norm}(Elastic\quad Net) L2−norm(ElasticNet)
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=1∑mθi2
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=1∑mn∣θi∣
首先介绍一下范数的定义,假设 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} ∣∣x∣∣p=(i∑)∣xi∣p)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 λ 是一个超参数,用来控制正则化程度。
L 1 L^1 L1 正则化时,对应惩罚项为 L 1 L1 L1范数:
Ω ( θ ) = ∣ ∣ θ ∣ ∣ 1 = ∑ i ∣ θ i ∣ \Omega(\theta)=||\theta||_1=\sum\limits_i|\theta_i| Ω(θ)=∣∣θ∣∣1=i∑∣θi∣
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
对应惩罚项为 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)+λ(ρj∑m∣θj∣+(1−ρ)j∑mθj2)
从上式可以看出, 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=θ1−2mαλsign(θ1)−∂θ1∂Jsign(x)=⎩⎪⎨⎪⎧1,x>00,x=0−1,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=(1−mαλ)θ1−∂θ1∂J
从上式可以考到每次更新时,会对特征系数进行一个比例的缩放而不是像 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点,本来解空间是全部区域,但通过正则化添加了一些约束,使得解空间变小了,甚至在个别正则化方式下解变得稀疏了。
上图中左边为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有个共同的特点,用它们计算的目标函数值得相等的。那个圆心,就是实际最优参数,但是由于我们队解空间做了限制,所以最优解只能在“缩小的”解空间中产生。
以两个变量为例,解释岭回归的几何意义:
参考:
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