这篇是接着我的前面的线性回归写的。之前说到为了抑制模型的复杂度,降低结构风险而在损失函数中引入了正则化项。一般情况下,正则化项有L1正则化项和L2正则化项。而线性回归损失函数通过引入其中的一个或者二者混合而衍生出了三种回归:岭回归、Lasso回归以及ElasticNet回归。
1.岭回归(Ridge回归)
岭回归是在一般线性回归损失函数的基础上加入了L2正则化项,控制了模型的复杂度。损失函数为:
其中,α是超参数,控制了估计参数的稀疏度,需要后期调整。而 ∥∥θ⃗ ∥∥2 是 L2 范数。
岭回归的求解也不难,一般最小二乘法就可以解决。当然,也可以使用梯度下降等迭代算法。通过最小二乘法求解得到的 θ⃗ 的结果是:
而如果是梯度下降的话, θ⃗ 的迭代公式是:
其中, β 是步长。
岭回归具体来讲是在不抛弃任何一个特征的情况下缩小了回归系数,使得模型相对而言比较复杂。
2.Lasso回归
Lasso回归是在普通线性回归损失函数的基础上加入了L1正则化项。损失函数为:
其中,m是样本个数,α是超参数,控制了估计参数的稀疏度,需要后期调整。 ∥∥θ⃗ ∥∥1 是 L1 范数。
关于求解,因为 L1 范数的原因,导致损失函数不再是连续可导的。所以之前的梯度下降法等算法失效,需要另寻它法。我看到的关于Lasso回归的求解一般有两种算法:坐标下降法和最小角回归法。关于这两种算法的更具体的解释可以看大神的博客: http://www.cnblogs.com/pinard/p/6018889.html
3.ElasticNet回归
ElasticNet回归是对Lasso回归和岭回归的一个综合,它的惩罚项是 L1 范数和 L2 范数的一个权衡。损失函数为:
其中,阿 α 和 ρ 均为超参数, α≥0 , 1≥ρ≥0 。而 ρ 影响的是性能下降的速度,因为这个参数控制着两个正则化项之间的比例。
4.不同正则化之间的比较
Lasso回归可以使得一些特征系数变小,甚至一些绝对值较小的系数直接变为零,从而增强模型的泛化能力。因此很适合与参数数目缩减与参数的选择,作为用来估计稀疏参数的线性模型。当进行模型选择的时候,如果特征特别多,需要进行压缩时,就可以选择Lasso回归。
Ridge回归是在不抛弃任何一个特征的情况下,限制了回归系数,使得模型相对而言比较复杂。和Lasso回归相比,这会使得模型保留的特别多,导致解释性差。
ElasticNet回归则是对上面两个进行了权衡。实际上,
L1
正则项可以得到稀疏的
θ⃗
,
L2
正则项则可以得到比较小的
θ⃗
,ElasticNet回归就是将这两个结合着用。
5.为什么正则化项可以避免过拟合
这个问题在网上找过,而在著名的PRML中也有讲。理论上的说法就是,对于凸优化的损失函数,正常情况下我们是可以达到最优解的。但是,我们训练模型是在训练集上面,而目标是让模型在测试集上也能有好的预测效果。那么如果在测试集上达到了最优一般就会在测试集上表现不佳。所以,这个时候引入了正则化项就好比将 θ⃗ 限制在了一个和全局最优解有一段距离的空间之中。因此,我们的目标就变成了只是在这个被限定的空间找到最优解,从而避免对训练集的过度拟合。
参看资料:
1.http://www.cnblogs.com/pinard/p/6004041.html
2.《Python大战机器学习》
3.《统计学习实战》
4.《机器学习》