机器学习---线性回归(Machine Learning Linear Regression)

Posted huzihu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习---线性回归(Machine Learning Linear Regression)相关的知识,希望对你有一定的参考价值。

线性回归是机器学习中最基础的模型,掌握了线性回归模型,有利于以后更容易地理解其它复杂的模型。

 

线性回归看似简单,但是其中包含了线性代数,微积分,概率等诸多方面的知识。让我们先从最简单的形式开始。

 

一元线性回归(Simple Linear Regression):

假设只有一个自变量x(independent variable,也可称为输入input, 特征feature),其与因变量y(dependent variable,也可称为响应response, 目标target)之间呈线性关系,当然x和y之间不会完全是直线关系,而是会有一些波动(因为在现实中,不一定只有一个自变量x会影响因变量y,可能还会有一些其他影响因素,但是这些因素造成的影响并不大,有些只是偶然出现,这些因素被称之为噪音),因此我们可以将目标方程式写为:

技术分享图片

(a表示斜率,b表示截距,技术分享图片表示由噪音造成的误差项,这个误差是无法减少的)

 

我们根据n个(x-y pair)观测值(observations,或者说是样本samples),想要捕捉x和y之间的关系(不包括噪音)。这样,当出现新的x值时,我们就可以预测出其对应的y值。不仅如此,我们还能得知特征与目标之间的关联关系。如果有多个特征存在,那么可以知道哪些特征与目标之间有关系,关系的强弱分别如何。

 

技术分享图片(读作y-hat)表示对y进行的估计,其方程式是:

技术分享图片

技术分享图片技术分享图片分别表示对a,b参数的估计)

 

那么到底怎样的一条直线可以最好地体现出x和y之间的关系呢?

技术分享图片

 

我们肯定希望预测值与实际值之间的误差越小越好。根据上图,我们定义一个损失函数LL:

技术分享图片

 

只要每个观测点实际的y值与其在某条直线上对应的y估计值的误差值(绝对值)的总和最小,那么这条直线就是对x和y之间的关系的最好估计。

 

但是LL并不是一个处处可导的函数,数学上处理起来比较麻烦。因此,我们重新定义了一个数学上容易处理的损失函数L,就是实际值与预测值之间的欧式距离平方和

技术分享图片

 

只要求出能使L最小的a,b参数估计值,我们就能找到x和y之间最好的对应关系,这被称为最小二乘回归(Least Sqaures Regression)

 

最小二乘其实也是使残差平方和(RSS, Residual Sum of Squares)最小化。此外,如果从另外一种角度(使用极大似然估计)来看,也能达到和最小二乘同样的结论。

 

首先,根据中心极限定理(Central Limit Theorem),如果对总体取样足够多,那么每次取样的样本的平均值服从正态分布。据此,我们可以假设由噪音造成的误差技术分享图片独立同分布,且服从平均值为0,方差为σ2的正态分布。而技术分享图片,因此,y也独立同分布,且服从平均值为ax+b,方差为σ2的正态分布,其概率密度函数是:技术分享图片,将其写成条件概率表达式就是:技术分享图片。用通俗的话来说:如果对y总体进行n次取样,每次取1个样本,只要取样次数足够多,样本就会呈正态分布,有更多的样本聚集在样本均值附近,且样本均值逐渐逼近总体均值。样本越靠近总体均值肯定越好,因此我们需要使这个概率最大化,可以用极大似然估计法(MLE)来求解,即求出技术分享图片。这样就能找到最佳的参数估计值,此参数估计值能使从模型中抽取的n组样本的概率最大。

 

由于技术分享图片有连乘运算,因此我们对似然函数取对数计算,就可以把连乘变成求和:

技术分享图片

 

由于技术分享图片技术分享图片均为定值,因此求技术分享图片也就是求技术分享图片,这和上面说的最小二乘法的形式是一样的。

 

现在,只要对损失函数L分别求偏导,令导数为0,也就是让技术分享图片技术分享图片,解出的极值点就是a,b参数的估计值:

技术分享图片

 

可以看出,由于最小二乘回归假设了自变量和因变量之间存在一定的线性关系,因此把问题简化为寻求线性模型的参数值,而不用去估计整个目标函数(这属于parametric method)。这样可能存在的问题就是,如果选择的模型与自变量和因变量之间的真实关系相差太大,那么模型就不能做出较为准确的预测。而non-parametric method可以不用做任何假设,因此它没有上述的问题。但是因为它需要估计整个目标函数,因此需要比parametric method多得多的训练数据。

 

最小二乘回归只是线性回归模型中的一种,其他的还有k近邻回归(k-nearest neighbors regression),贝叶斯线性回归(Bayesian Linear Regression)等。

 

近邻回归属于non-parametric method,它把在需要预测的点的x值相邻一段距离内所有对应的y观测值取平均数,作为预测的y值。但是这个方法只适用于特征很少的情况,因为特征越多,维度就越大,数据就越稀疏,这样很难找到足够对应的观测点来计算平均值。

 

贝叶斯线性回归不同于最小二乘回归,不是去找到模型参数的最佳估计值,而是确定模型参数的分布。具体来说就是在条件概率的基础上加上惩罚项(正则化),这个模型的优点是可以防止过拟合,缺点是计算量很大。

 

多元线性回归(Multivariate Linear Regression):

上面说的是最简单的一元线性回归,那么如果特征不止一个呢?这时就要用到多元线性回归,此时目标方程式表示如下:

技术分享图片

(x1~xn表示n个特征)

 

学术上通常用θ来表示参数,X表示特征,因此这里将方程式改写成:

技术分享图片

 

参数θ和特征X可以用向量的方式表示出来:

技术分享图片

 

把θ进行转置,它们之间的乘积可以用矩阵乘法表达式表示出来:

技术分享图片

技术分享图片代表对θ的转置)

 

因此,目标方程式最终可以写成:

技术分享图片

 

对y的估计就是:

技术分享图片

 

对参数θ,b的估计就是:

技术分享图片

 

和一元线性回归一样,我们对损失函数求导,导数为0的极值点就是对参数θ,b最好的估计。

 

首先将X表示为 m 行n+1列的矩阵,每行对应一个样本,每列对应一个特征,外加一维全为1的常数项:

技术分享图片

 

把参数θ,b吸收入β向量,表示为:

技术分享图片

 

而y用向量表示为:

技术分享图片

 

因此,对参数的估计可以改写成(矩阵表示法):

技术分享图片

 

在式子技术分享图片上对β求导,并令其为0:

技术分享图片

 

这样计算出的β的最佳估计值为:技术分享图片

 

但是此方法只在矩阵可逆(满秩)的情况下可用。有时候特征(矩阵的列)会远远多于样本数(矩阵的行),那么此时矩阵是不满秩的, 上述方程式可解出多个解。因此,我们需要找到对大多数情况都适用的方法。

 

下面介绍几种常见的求解参数β估计值的算法,分别是批量梯度下降法,随机梯度下降法和小批量梯度下降法。

 

在微积分里面,对多元函数的参数求偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度 。例如之前所说的损失函数L的梯度就记作▽L。从几何意义上讲,梯度指向函数增加最快的方向。如果我们需要求解损失函数的最大值,那么就用梯度上升法来迭代;反之,如果我们需要求解损失函数的最小值,就用梯度下降法。

 

(1)批量梯度下降法(Batch Gradient Descent)

技术分享图片

 (注:此处还是用矩阵表示法;α表示学习速率,也叫步长)

 

具体可参见这篇文章,已经介绍得很清楚了:https://www.jianshu.com/p/c7e642877b0e

 

由于批量梯度下降法每次学习都使用整个训练数据集,因此最后能够保证凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点,但是缺点是学习时间太长。

 

(2)随机梯度下降法(Stochastic Gradient Descent)

技术分享图片

随机梯度下降法是在批量梯度下降法基础上的优化,一次迭代只用一条随机选取的数据,因此每次学习非常快,但是可能会引起震荡。

 

(3)小批量梯度下降法(Mini-Batch Gradient Descent)

 技术分享图片

小批量梯度下降法结合了批量梯度下降法和随机梯度下降法的优点,一次迭代多条数据,如果Batch Size选择合理,不仅收敛速度比SGD更快,而且在最优解附近的跳动也不会很大。

 

总结:梯度下降算法针对凸函数是可以收敛到全局最优点的,但是很多模型是非线性结构,一般属于非凸问题,这意味着存在很多局部最优点(鞍点)。采用梯度下降算法可能会陷入局部最优,这是最令人头疼的问题。因此,人们在梯度下降算法的基础上又开发了很多其它优化算法,如:Momentum,AdaGrad、AdaDelta、RMSProp、Adam等。梯度下降算法中一个非常重要的参数是学习速率α,适当的学习速率很重要:学习速率过小时收敛速度慢,而过大时导致训练震荡,而且可能会发散(diverge)。理想的梯度下降算法要满足两点:收敛速度快,能全局收敛。

 

以上是关于机器学习---线性回归(Machine Learning Linear Regression)的主要内容,如果未能解决你的问题,请参考以下文章

机器学习系列6 使用Scikit-learn构建回归模型:简单线性回归多项式回归与多元线性回归

机器学习(Mechine Learn) - 线性回归

机器学习(Mechine Learn) - 线性回归

机器学习:线性模型学习总结:线性回归

用scikit-learn和pandas学习线性回归

用scikit-learn和pandas学习线性回归