7.机器学习之线性回归算法
什么是线性回归(Linear Regression)
我们在初中可能就接触过,y=ax,x为自变量,y为因变量,a为系数也是斜率。如果我们知道了a系数,那么给我一个x,我就能得到一个y,由此可以很好地为未知的x值预测相应的y值。在只有一个变量的情况下,线性回归可以用方程:y = ax+b 表示;多元线性回归方程可以表示为:y = a0 + a1*x1 + a2*x2 + a3*x3 + ...... +an*xn。
机器学习的实质说白了就是通过数据之间的关系找出某种映射f:X→y。而针对线性回归来说就是假定X与y之间有线性相关关系。回归模型就是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合:选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据。
线性回归的表示是一个方程,它描述了一条线,通过寻找输入变量系数(B)的特定权重,拟合输入变量(x)和输出变量(y)之间的关系。
![](https://upload-images.jianshu.io/upload_images/1845730-21e6f9c6a51b5ab8.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/690/format/webp)
线性回归的模型函数
回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。多元线性回归模型如下(n=1,表示的是一元一次方程):
默认x0总是等于1,表达式也可以写成:
进一步用矩阵形式表达更加简洁如下:
再简化得:
其中,
,
。
线性回归的损失函数
得到了模型,我们要根据已知数据集,在假设空间中,选出最合适的线性回归模型。这时,就要引出损失函数。即找出使损失函数最小的向量θ。线性回归的目的就是求解出合适的θ。损失函数(有时也被成为代价函数):是用来估量你模型的预测值 f(x)与真实值 Y的不一致程度,损失函数越小,模型的效果就越好。线性回归中,损失函数用均方误差表示,因此损失函数就是我们寻找最佳模型的一种依据。在线性回归这里,对应的就是找出最符合数据的权重参数 θ→,即[θ0,θ1,...,θn]T。一般线性回归我们用均方误差(MSN)作为损失函数。损失函数的代数法表示如下:
我们并不关系损失函数的最小值是多少,而仅仅关心损失函数最小时的模型参数的值即可,也可写成如下所示(公式里的1/2对损失函数没有影响,只是为了能抵消求导后的乘数2):
进一步用矩阵形式表达损失函数:
由于矩阵法表达比较的简洁,后面我们将统一采用矩阵方式表达模型函数和损失函数。
线性回归中,损失函数用均方误差表示的证明过程,可以看博客 https://zhuanlan.zhihu.com/p/48205156 的 "线性回归的损失函数" 部分介绍。
线性回归的算法
现在,我们的目标就成了求解向量θ使得J(θ)最小。我们常用的有两种方法来求损失函数最小化时候的θ参数:一种是梯度下降法,一种是最小二乘法。梯度下降法,是搜索算法,先给 θ 赋个初值,然后再根据使 J(θ) 更小的原则对 θ 进行修改,直到最小 θ 收敛,J(θ) 达到最小,也就是不断尝试;另外一种是正规方程法,要使 J(θ) 最小,就对 θ 求导,使导数等于 0,求得 θ。
如果采用梯度下降法,则θ的迭代公式是这样的:
通过若干次迭代后,我们可以得到最终的θθ的结果
如果采用最小二乘法,则θ的结果公式如下:
梯度下降法的算法可以有代数法和矩阵法(也称向量法)两种表示,同样最小二乘法也有矩阵法和代数法两种表示。详细证明过程可以参考下面两篇博客内容:https://www.cnblogs.com/pinard/p/5976811.html
https://www.cnblogs.com/pinard/p/5970503.html
最小二乘法 vs 梯度下降法:
通过上面推导,我们不难看出,二者都对损失函数的回归系数进行了求偏导,并且所得到的推导结果是相同的,那么究竟哪里不同呢?如果仔细观察,可以观察到:最小二乘法通过使推导结果等于0,从而直接求得极值,而梯度下降则是将推导结果带入迭代公式中,一步一步地得到最终结果。简单地说,最小二乘法是一步到位的,而梯度下降是一步步进行的。因而通过以上的异同点,总结如下:
最小二乘法:
- 得到的是全局最优解,因为一步到位,直接求极值,因而步骤简单
- 线性回归的模型假设,这是最小二乘方法的优越性前提,否则不能推出最小二乘是最佳(即方差最小)的无偏估计
- 相比梯度下降,当n不是很大时,最小得到结果更快一些,一般线性回归问题更偏向运用最小二乘法,但是梯度下降法在机器学习中适用范围更大
梯度下降法:
- 得到的是局部最优解,因为是一步步迭代的,而非直接求得极值
- 既可以用于线性模型,也可以用于非线性模型,没有特殊的限制和假设条件
- 梯度下降算法有时需要我们对特征值进行适当的缩放,提高求解效率,需要进行数据归一化处理
- 梯度下降算法需要我们自己选择适当的学习率α ,且需要多次的迭代运算
- 当n很大时,这时矩阵运算的代价就变的很大,最小二乘求解也会变的很慢,所以梯度下降更适合特征变量很多的情况,一般n小于10000时,选择正规方程是没问题的
线性回归的正则化
为了解决过拟合问题,在损失函数中引入了正则化。我们常用的正则化一般是L1正则化和L2正则化。而线性回归因为引入的正则化项不同,从而出现了Ridge回归、Lasso回归以及ElasticNet回归。
L1正则化Lasso回归:
线性回归的L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数α来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:
其中n为样本个数,α为常数系数,需要进行调优。|θ|1为L1范数。Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。关于求解,因为L1范数的原因,导致损失函数不再是连续可导的。所以之前的梯度下降法等算法失效,需要另寻它法。Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression)。
L2正则化Ridge回归:
L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:
![](https://img2020.cnblogs.com/blog/1800008/202003/1800008-20200320192758042-261532378.png)
其中α为常数系数,需要进行调优。|θ|2为L2范数。Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。
正则化之后的损失函数求解过程推荐参考博客:https://www.cnblogs.com/pinard/p/6018889.html
正则化求解之后的理解:
岭回归就是给模型参数加一个惩罚项,限制参数的大小。 通过引入该惩罚项,可以减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage)。(岭回归解决数据的输入变量数目比样本点还多的问题)。岭回归的本质是给参数增加了一个限制条件,即惩罚项,岭回归相当于增加了如下的约束:
上式限定了所有回归系数的平方和不能大于 。所以在岭回归中,有时称为“L2回归”,惩罚因子是变量系数的平方值之和。惩罚因子缩小了自变量的系数,但从来没有完全消除它们。这意味着通过岭回归,您的模型中的噪声将始终被您的模型考虑在内。与岭回归类似,另一个缩减方法lasso也对回归系数做了限定,对应的约束条件如下:
当 足够小时,一些系数会因此缩减到0,这个特性帮助我们更好的理解数据,但是这个变化却导致计算复杂度大大提升,因为求解这个约束条件下的回归系数,需要使用二次规划算法。Lasso模型可以用来估计“稀疏参数”。在某些情况下Lasso非常有用,由于它的惩罚条件比较严格,所以倾向于选择参数值较少的解,从而有效地减少了给定解所依赖的参数的数量。简单说,如果你想要的最优解包含的参数数量越少越好,那么使用Lasso是个很好的选择。例如当你想从噪声和信号的叠加中得到信号时。
在LASSO正则化中,只需惩罚高系数特征,而不是惩罚数据中的每个特征。此外,LASSO能够将系数一直缩小到零。这基本上会从数据集中删除这些特征,因为它们的“权重”现在为零(即它们实际上是乘以零)。通过LASSO回归,模型有可能消除大部分噪声在数据集中。这在某些情况下非常有用!
ElasticNet回归:
ElasticNet回归是对Lasso回归和岭回归的一个综合,它的惩罚项是L1范数和L2范数的一个权衡。损失函数为:
其中,α和ρ均为超参数,α≥0,1≥ρ≥0。而ρ影响的是性能下降的速度,因为这个参数控制着两个正则化项之间的比例。
不同正则化之间的比较:
Lasso回归(缩减系数):可以使得一些特征系数变小,甚至一些绝对值较小的系数直接变为零,从而增强模型的泛化能力。因此很适合与参数数目缩减与参数的选择,作为用来估计稀疏参数的线性模型。当进行模型选择的时候,如果特征特别多,需要进行压缩时,就可以选择Lasso回归。
Ridge回归(平滑系数):是在不抛弃任何一个特征的情况下,限制(缩小)了回归系数,使得模型相对而言比较复杂。和Lasso回归相比,这会使得模型保留的特别多,导致解释性差。
ElasticNet回归:则是对上面两个进行了权衡。实际上,L1L1正则项可以得到稀疏的θ⃗ θ→,L2L2正则项则可以得到比较小的θ⃗ θ→,ElasticNet回归就是将这两个结合着用。
线性回归的推广:多项式线性回归
我们遇到的数据不一定都是线性的形式,如果是 的模型,那线性回归很难拟合这个函数,这时候就需要用到多项式回归了。回到我们开始的线性模型,
, 如果这里不仅仅是x的一次方,而是二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的2次多项式回归的模型:
我们令
,,这样我们就得到了下式:
。可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征
我们得到一个五元样本特征
,通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归,但是达到了非线性拟合的效果。
线性回归的推广:广义线性回归
在上一节的线性回归的多项式中,我们对样本特征进行了变换,用线性回归完成了非线性回归的效果。这里我们对于特征y做推广。比如我们的输出Y不满足和X的线性关系,但是logY和X满足线性关系,模型函数如下:,这样对与每个样本的输入y,我们用logy去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 logy一般化,假设这个函数是单调可微函数g(.),则一般化的广义线性回归形式是:
。这个函数g(.)我们通常称为联系函数。后面会讲到的逻辑回归这是在联系函数的基础上进行分类的。
总结:
最简单的单变量线性回归:
多变量线性回归模型:
多项式回归模型:
线性回归的优点:
1. 建模速度快,不需要很复杂的计算,在数据量大的情况下依然运行速度很快;
2. 可以根据系数给出每个变量的理解和解释;
3. 对异常值很敏感。
线性回归的缺点:
1. 不能很好的拟合非线性数据,所以需要先判断变量之间是否线性相关。
多项式回归的特点:
1. 能够拟合非线性可分的数据,更加灵活的处理复杂的关系
2. 因为需要设置变量的指数,所以它是完全控制要素变量的建模
多项式回归的特点:
1. 需要一些数据的先验知识才能选择最佳指数
2. 如果指数选择不当容易出现过拟合
参考文章:
https://www.cnblogs.com/pinard/p/6004041.html
https://zhuanlan.zhihu.com/p/48205156
https://zhuanlan.zhihu.com/p/45023349
https://zhuanlan.zhihu.com/p/45690499
https://blog.csdn.net/fengxinlinux/article/details/86556584