机器学习算法(三)——Ridge算法和Lasso算法

1、算法简介

1-一、岭回归(Ridge Regression)

上节咱们讲到了线性回归,那么思考这么一个问题:算法

若是数据特征比样本点还多怎么办?
是否还可使用线性回归和以前的方法来作预测?

答案是:否认的。由于此时输入数据的矩阵不是满秩矩阵,非满秩矩阵在求逆时会出现问题。编程

为了解决这个问题,引入了岭回归(Ridge Regression)的概念。网络

缩减方法能够去掉不重要的参数,所以能更好地理解数据。此外,与简单的线性回归相比,缩减法能取得更好的预测效果。函数

1-二、套索回归(Lasso Regression)

除了Ridge,还有一种正则化的线性回归是Lasso。与岭回归相同,使用Lasso也是约束系数使其接近于0。优化

2、算法原理

2-一、岭回归原理

Ridge回归经过对系数的大小进行惩罚来解决普通最小二乘的一些问题 。公式以下:3d

岭回归是加了二阶正则项的最小二乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候,岭回归是有bias的,这里的bias是为了让variance更小。code

因此岭回归的关键是找到一个合理的α值来平衡模型的方差和误差。

α的选择:

  • 模型的方差:回归系数的方差
  • 模型的误差:预测值和真实值的差别

2-二、套索回归原理

岭回归没法剔除变量,而LASSO回归模型,将惩罚项由L2范数变为L1范数,能够将一些不重要的回归系数缩减为0,达到剔除变量的目的。blog

Lasso回归做用:所以它的效果就是让w往0靠,使网络中的权重尽量为0,也就至关于减少了网络复杂度,防止过拟合ci

3、算法要点

过拟合(over-fitting): 在训练数据不够时,或者over-training时,经常会致使over-fitting(过拟合)。会使得对于训练数据准确率高,对于新数据准确率低。it

避免过拟合的方法有不少:early stopping、数据集扩增(Data augmentation)、正则化(Regularization)包括L一、L2(L2 regularization也叫weight decay),dropout。

3-一、L1正则化

为何叫L1正则化?

由于后面加上了||w||的一次幂。
正则(Re) -------> Regularization(规则化)限制,不能让系数无限大。系数波动大,方程不稳定。

比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大。

另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,因此咱们只能按照原始的未经正则化的方法去更新w,这就至关于去掉ηλsgn(w)/n这一项,因此咱们能够规定sgn(0)=0,这样就把w=0的状况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

3-二、L2正则化

为何叫L2正则化?

由于后面加上了||w||的平方

  C0表明原始的代价函数,后面那一项就是L2正则化项,它是这样来的:全部参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2常常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘恰好凑整。

对比上面w的更新公式,能够发现后面那一项变了,变成全部导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。

过拟合的时候,拟合函数的系数每每很是大,为何?

以下图所示,过拟合,就是拟合函数须要顾忌每个点,最终造成的拟合函数波动很大。

在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)很是大,因为自变量值可大可小,因此只有系数足够大,才能保证导数值很大。

为何要进行正则化?

正则化是经过约束参数的范数使其不要太大,因此能够在必定程度上减小过拟合状况。正则化:防止过拟合,提升泛化能力。

4、线性回归、岭回归、套索回归异同点

相同点

  • 都是基于最小二乘法

不一样点

-岭回归:L2正则化

  • 缩减系数,防止过拟合。若是线性回归出现过拟合,使用岭回归进行优化。

  • 即便没有出现过拟合,也会尝试使用岭回归。

  • 加入误差,获得更好地结果

  • 岭回归是数据处理的一种方式

-套索回归:L1正则化

  • 适用于方程的解是稀疏矩阵,当属性特别多时,能够采用Lasso去尝试。

  • 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,而且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;

在实践中,岭回归与套索回归首先岭回归。可是,若是特征特别多,而某些特征更重要,具备选择性,那就选择Lasso可能更好。
scikit-learn还提供了ElasticNet类,结合了Lasso和Ridge的惩罚项。在实践中,这种结合的效果最好,不过代价是要调节两个参数:一个用于L1正则化,一个用于L2正则化。
相关文章
相关标签/搜索