线性回归算法

线性回归

线性回归是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。一般表达式如下:

y^为预测值,目标为求解线性模型中w和b两个参数。

损失函数

求解最佳参数,需要一个标准来对结果进行衡量,为此我们需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。

在这里,我们定义的损失函数为:预测值y^ 与真实值y之间的平均平方距离差值,统计中一般称其为MAE(mean square error)均方误差

为什么不用绝对值?绝对值的数学处理过程,比平方和的处理要复杂得多

把之前的函数式代入损失函数,并且将需要求解的参数w和b看做是函数L的自变量,可得:

现在的任务是求解最小化L时w和b的值,即核心目标优化式为:

求解方式

1.最小二乘法(Ordinary Least Squares)

求解 w 和 b 是使损失函数最小化的过程。简单来说,多元函数求极值就是最小二乘法的思想,求偏导并使偏导为0是最小二乘法的核心方法。

最小二乘是使所有观测值到回归直线距离的平方和最小,在这里我们引申为观测值距离实际值最小,观测值距离实际值的距离可认为是三角形的斜边。

在统计中,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。我们可以将 L(w,b) 分别对 w 和 b 求导,得到:

两式为0时即为最优解。求解过程如下:

由于目标函数为凸函数,凸函数的任何极小值也是最小值。

a. 对b求偏导

b. 对w(a)求偏导

将求得的b代入得:

移动可得w(a):

对w(a)进行整理:

最终得到w(a)和b的表达式:

2.梯度下降法(Gradient Descent)

梯度下降迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。梯度下降法的计算过程就是沿着梯度下降的方向求解极小值。

由于在实操中代码无法自动求解方程,且最小二乘法若表示成矩阵形式,涉及逆矩阵计算的计算量很大。而梯度下降法可以很好地解决大数据量下的计算问题,并且由于凸函数的性质,一定存在最小值,因此更加值得被使用

我们重新来整理一下要求解的问题:

注:1/2m系数是刻意修改的,原本为m。这样处理是考虑到后面求导的时候会乘2,使1/2m*2变为1。

为了更直观和通俗易懂,下面将花相当一部分篇幅讲解一维情况下梯度下降法的原理,先从最简单的凸函数 开始讲起。

梯度向量

假设起点在[公式] 处,也就是将球放在[公式]

它的梯度为 1 维向量:

这是在[公式] 轴上的向量,它指向函数值增长最快的方向,而[公式] 就指向减少最快的方向:

[公式] 也看作 1 维向量[公式] ,通过和[公式] 相加,可以将之向[公式] 移动一段距离得到新的向量[公式]

其中[公式] 称为步长,通过它可以控制移的动距离,本节设[公式] ,那么:

此时小球(也就是起点)下降到了[公式] 这个位置:

迭代

[公式] 的梯度为:

继续沿着梯度的反方向走:

小球就滚到了更低的位置:

重复上述过程到第 10 次,小球基本上就到了最低点,即有[公式]

步长

上面谈到了可以通过步长[公式] 来控制每次移动的距离,下面来看看不同步长对最终结果的影响。

过小 合适 过大
如果设[公式] 就过于小了,迭代 20 次后离谷底还很远,实际上 100 次后都无法到达谷底
上面例子中用的[公式] 是较为合适的步长,10 次就差不多找到了最小值
如果令[公式] ,反而会越过谷底,不断上升

总结

总结下,不同的步长[公式] ,随着迭代次数的增加,会导致被优化函数[公式] 的值有不同的变化

寻找合适的步长[公式] 是个手艺活,在工程中可以将上图画出来,根据图像来手动调整:

[公式] 往上走(红线),自然是[公式] 过大,需要调低

[公式] 一开始下降特别急,然后就几乎没有变化(棕线),可能是[公式] 较大,需要调低

[公式] 几乎是线性变化(蓝线),可能是[公式] 过小,需要调高

3.最小二乘法与梯度下降法对比

实现方法和结果不同:最小二乘法是直接对\Delta求导找出全局最小,是非迭代法。而梯度下降法是一种迭代法,先给定一个img,然后向\Delta下降最快的方向调整img,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫。