线性回归(理论)






一、概论


1、何为线性回归

线性回归(Linear Regression)是确定两种或两种以上变量之间所存在的定量关系的一种统计方法。
来看一种最简单的情况,下面是一组给出的数据:

Alt

现在我问你,如果现在 𝑥 = 6 ,问 𝑦 取值?
分析上表,不难看出该表的数据实际上反映了 𝑥 与 𝑦 之间的关系为 𝑦 = 2𝑥 + 1,因此你可以很快的说出当 𝑥 = 6时,𝑦 取值为13。而这个过程,实际就是线性回归所所执行的工作本质。
在这个例子中,因为数据量少、且数据反应出的关系很简单(并且没有偏差),因此你能很轻易地说出这些数据所满足的函数关系。

来看一个较为实际的例子,下表给出了不同工资和年龄对应的借款额度:

Alt
可以猜想,工资和年龄可能与借款额度有关(也就是说存在某种函数关系),但是具体的关系是怎样的呢?对此,我们可以假设他们满足的关系如下(其中 𝑥1 用以表示工资, 𝑥2 用以表示年龄):

y = θ 1 x 1 + θ 2 x 2 y=\theta_1x_1+\theta_2x_2 y=θ1x1+θ2x2

此时,若将 𝑦 做为输出(即预测值), 𝑥1 和 𝑥2 作为输入(即用于进行预测的特征)。那么我们的问题就变成了根据 𝑥1、𝑥2 和 𝑦 来求解 𝜃1 和 𝜃2 的值。


2、问题的抽象

将这个问题再抽象一下:已知一组 𝑥1、𝑥2 及其对应的 𝑦 值,试在三维空间 R3 - 𝑥1 𝑥2 𝑦 中寻找一个平面 𝛷 ,来尽可能的将这些点都涵盖在该平面中。即:寻找一个平面来尽可能地拟合已知数据。

Alt

如上图所示,对于平面:

Φ : y = θ 1 x 1 + θ 2 x 2 \Phi:y=\theta_1x_1+\theta_2x_2 Φ:y=θ1x1+θ2x2

约束它“倾斜”程度的两个参数为 𝜃1 和 𝜃2,但有时我们还需对该平面进行上下移动。因此,还需要加入一个“偏置项” 𝜃0,来限制它在该空间中的上下位置。此时,平面方程即为:

Φ : y = θ 0 + θ 1 x 1 + θ 2 x 2 \Phi:y=\theta_0+\theta_1x_1+\theta_2x_2 Φ:y=θ0+θ1x1+θ2x2

在数学中,为了处理的便捷性,我们常常也会为偏置项 𝜃0 添加一个对应的“特征”,使得整个平面能够表达为两个向量的乘积。即,此时平面方程为(特别提示:本文中的字母当为斜体时均代表某个值,而对应为黑体时则代表向量,更进一步地,当字母变为大写字母时就会表示对应小写字母共同构成的矩阵。请读者在阅读时特别注意这一点):

Φ : y = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 = θ T x \Phi:y=\theta_0x_0+\theta_1x_1+\theta_2x_2=\theta^T\text{x} Φ:y=θ0x0+θ1x1+θ2x2=θTx

其中,θ = [𝜃0, 𝜃1, 𝜃2]𝑇, x = [𝑥0, 𝑥1, 𝑥2]𝑇, 𝑥0 ≡ 1。
由于我们人为地在平面方程中添加了一个值恒定的属性,因此对于原始的数据表格而言,也需要加上这一属性,如下图所示:

Alt

在该表中,对于每一行 𝑥0, 𝑥1, 𝑥2 数据,都会有一个对应的贷款额度。
即有(其中,上标 (𝑖) 表示对应第 𝑖 行的数据):

y ( i ) = θ 0 x 0 ( i ) + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) = θ T x ( i ) y^{(i)}=\theta_0x_0^{(i)}+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}=\theta^T\text{x}^{(i)} y(i)=θ0x0(i)+θ1x1(i)+θ2x2(i)=θTx(i)

将预测值也进行向量化,即得到:

y = θ T X \text{y}=\theta^T\text{X} y=θTX

其中, y = [ 𝑦(1), 𝑦(2), … , 𝑦(𝑛) ] 𝑇, X = [ x(1), x(2), … , x(𝑛) ] 𝑇, 𝑛 为样本总量。


3、误差的引入

在现实世界中,对于拟合得到的方程 ℎ𝜃(𝑥) 而言,将某次实验数据带入并不会保证拟合值(即预测值)会与真实值完全相等,即有:

y ( i ) ≈ h θ ( x ( i ) ) = θ T x ( i ) \text{y}^{(i)} ≈ h_{\theta}(\text{x}^{(i)})=\theta^T\text{x}^{(i)} y(i)hθ(x(i))=θTx(i)

因此,对于每个样本,实际上都应该存在以下关系( 𝜀 是引入的误差项):

y ( i ) = θ T x ( i ) + ε ( i ) \text{y}^{(i)} = \theta^T\text{x}^{(i)} + \varepsilon^{(i)} y(i)=θTx(i)+ε(i)

𝜀(𝑖) 表示第 𝑖 个样本在得到的拟合方程中所存在的误差。

Alt

在贷款表中,每个贷款人的贷款行为互不影响。比如马斯克和化腾去贷款,他们在决定要贷款时就已经确定了自己要贷款的金额,而不会出现“马斯克说要贷 2 亿,化腾说那我就要贷 3 亿”的情况。因此我们说他俩贷款的行为是独立”的。
表中所有人去同一家银行贷款,尽管他们彼此之间毫无关系,但是他们在贷款时,银行所采取的贷款额度算法是一致的,即他们共用同一套“贷款额度方程”。即:同分布。
因此,对于拟合方程存在的误差 𝜀(𝑖) ,他们彼此之间也是独立同分布的。更进一步的,这个误差依概率服从于均值为 0,方差为 1 的高斯分布。即:

p ( ε ( i ) ) = 1 2 π σ e − ε ( i ) 2 2 σ 2 p(\varepsilon^{(i)})=\frac{1}{\sqrt{2\pi}\sigma}e^{- \frac{\varepsilon^{(i)^2}}{2\sigma^2}} p(ε(i))=2π σ1e2σ2ε(i)2

高斯分布(正态分布)图像如下:

Alt


4、极大似然估计的引入

先整理下我们现有的已知信息。

  1. 拟合函数存在误差:

y ( i ) = h θ ( x ( i ) ) + ε ( i ) (拟合函数: h θ ( x ( i ) ) = θ T x ( i ) ) \text{y}^{(i)}=h_\theta(\text{x}^{(i)})+\varepsilon^{(i)} (拟合函数:h_\theta(\text{x}^{(i)})=\theta^T\text{x}^{(i)}) y(i)=hθ(x(i))+ε(i)(拟合函数:hθ(x(i))=θTx(i)

  1. 误差项服从高斯分布:

p ( ε ( i ) ) = 1 2 π σ e − ε ( i ) 2 2 σ 2 p(\varepsilon^{(i)})=\frac{1}{\sqrt{2\pi}\sigma}e^{- \frac{\varepsilon^{(i)^2}}{2\sigma^2}} p(ε(i))=2π σ1e2σ2ε(i)2

前面说到,线性回归的目的,是根据已知的特征信息 X 和对应的函数值 y ,来寻找一个能尽可能拟合真实情况的回归方程(即求出 θ 向量)。在概率论中,若已知一组观测数据和这组数据服从的分布,我们要如何求出该组数据满足的分布的具体数值呢?一个比较直观的方法是:极大似然估法。
极大似然原理的直观想法是,一个随机试验如有若干个可能的结果 A,B,C,… ,若在一次试验中,结果 A 出现了,那么可以认为实验条件对A的出现有利,也即出现的概率 P(A) 较大。例:设甲箱中有 99 个白球,1个黑球;乙箱中有1个白球。99 个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球,显然这一黑球从乙箱抽取的概率比从甲箱抽取的概率大得多,因此我们自然更多地认为这个黑球是取自乙箱。
一般说来,若事件A发生的概率与某一未知参数 θ 有关,则 θ 取值不同时,事件 A 发生的概率 𝑝(𝐴 | θ) 也不同,当我们在一次试验中事件A发生了,则认为此时 θ 的值应当是观测数据(即 X )中能使 𝑝(𝐴 | θ) 取值达到最大的那一个,极大似然估计法就是要选取这样的 X 值作为参数 X 的估计值,使所选取的样本在被选的总体中出现的可能性为最大。
因此,若要用极大似然估法对 θ 进行估计,则需要构建关于 θ 的似然方程。考虑前面的已知信息,可将 1 中关于 𝜀(𝑖) 的信息进行整理并带入 2 中得到:
Alt

该式子的含义是: 固定 θ 和 x(𝑖) 时,这组数据接近真实值 𝑦(𝑖) 的概率。
现在我们有多组数据,目的是尽可能使这所有数据都接近真实值 y ,这是一个联合概率密度。前面说到,𝜀(𝑖) 之间是相互独立的。由概率论:当事件独立时,联合概率密度等于边缘概率密度之积。则可得到似然函数:

Alt

对于似然函数 𝐿(𝜃) ,其含义是“这组数据接近真实值 y 的概率”,因此希望这值越大越好。
由于我们的目的不是去计算出该似然函数的取值是多少,而是关心 𝜃 在取怎样的值时,能使得似然函数 𝐿(𝜃) 的取值最大。即,这是一个求极值点的问题,而非求极值的问题。因此,为了简化计算,可对似然函数进行对数化处理:

Alt

Z = n l n 1 2 π σ , J ( θ ) = 1 2 σ 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 Z=nln\frac{1}{\sqrt{2\pi}\sigma}, J(\theta)=\frac{1}{2\sigma^2}\sum_{i=1}^n{(\text{y}^{(i)}-\theta^T\text{x}^{(i)})}^2 Z=nln2π σ1,J(θ)=2σ21i=1n(y(i)θTx(i))2 ,则 l n L ( θ ) = Z − J ( θ ) lnL(\theta)=Z-J(\theta) lnL(θ)=ZJ(θ)
观察上式,𝑍 为固定值,𝐽(𝜃) 为可变值。为了能使得对数似然函数 ln 𝐿(𝜃) 最大,就要使 𝐽(𝜃) 最小。
为了便于计算,接下来就仅考虑 𝐽(𝜃) 。同时,消除 𝐽(𝜃) 中的常数项,即再令:

J ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^n{\left(\text{y}^{(i)}-\theta^T\text{x}^{(i)}\right)}^2 J(θ)=21i=1n(y(i)θTx(i))2

注: 实际上, 𝐽(𝜃) 表达的含义正是“真实值”与“预测值”的欧氏距离总和(的一半),我们当然希望这个差异越小越好。


5、目标函数的优化

根据前面的讨论,现在我们的目的是使目标函数 𝐽(𝜃) 最小(有时,我们也称 𝐽(𝜃) 为损失函数,即真实值与预测值的差距),因此对其求偏导。由于该过程涉及对矩阵求导,因此先给出部分对矩阵求导的知识,感兴趣的可以自行下去学习相关知识:

Alt

对目标函数 𝐽(𝜃) 求偏导的过程如下:

Alt

由于函数 𝐽(𝜃) 是二次函数(是严格的凸函数),存在最值。故令偏导为 0 ,即可解得极值点: θ = (𝑋𝑇𝑋)−1𝑋𝑇y 。
根据求出的极值点,我们便找到了一个求解回归方程的通解为:θ = (𝑋𝑇𝑋)−1𝑋𝑇y 。也就是说,当 θ 取该值时,回归方程:

h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0x0+θ1x1+θ2x2

将会是拟合程度最好的方程,它将使得所有的样本数据 x𝑇 都尽可能靠近真实值。

但是,问题来了!

θ = (𝑋𝑇𝑋)−1𝑋𝑇y 一定存在么? 𝑋𝑇𝑋 一定是非奇异矩阵么?
当然不一定!在现实世界中,这样的情况也几乎不可能!
因此,上面的求解实际上仅适用于一些较为特殊的情况。并且从另一个角度来看,这样“一步到位”的求解过程,根本没有体现出机器“学习”的过程。


那么,问题出在哪儿?
求 𝐽(θ) 极值这一步。

J ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^n{(\text{y}^{(i)}-\theta^T\text{x}^{(i)})}^2 J(θ)=21i=1n(y(i)θTx(i))2

在周志华《机器学习》书中对该问题有深刻的剖析,需要具备一定的数学功底才能理解。
在此,可以简单理解为:该式子中含有矩阵求导求逆等步骤,因此它本身存在相当多的约束,因此不能像求函数极值那样来处理以试图求得通解。
那怎么办呢?梯度下降法。




二、梯度下降


1、何为梯度下降

梯度下降法(Gradient Descent GD)是一种寻找目标函数极值点的方法,它利用梯度信息,通过迭代的方式来不断寻找最合适的目标值。此时,为便于计算,可设待优化的目标函数为: J ( θ ) = 1 2 n ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2n}\sum_{i=1}^n{\left(\text{y}^{(i)}-\theta^T\text{x}^{(i)}\right)}^2 J(θ)=2n1i=1n(y(i)θTx(i))2
举个非常经典的例子:若你站在山上某处想要尽快下山,一种很简单的方式是走一步再走一步。即,当你走到某个位置时,考察在此位置上,往哪个方向走是最陡峭的,并沿该方向朝下走。这样一来,不断采用该策略,最终总会走到某个局部的最低处。如下图所示:

Alt

在学一元函数时,我们学过“导数”,它可表示为在函数曲线上的切线斜率。对于多元函数而言,由于曲面上的每一点都有无穷多条切线,此时,描述这种函数的导数相当困难。于是,“导数”就演变为“偏导数”。即:固定其他变量不变,仅关心多元函数中的某单个变量的导数。它的几何意义表示为固定多元曲面在某个竖直切面上对应的切线在固定点上的斜率。比如在二元函数 z = 𝑓(𝑥, 𝑦) 上,固定 𝑦 而仅考虑 𝑥 的变化,从而可将原函数看成是关于 𝑥 的一元函数来研究。

Alt

但是偏导数有一个缺点:只能表示多元函数沿坐标轴方向的变化率。而现实使用中,很多时候需要考虑多元函数沿任意方向的变化率,于是就有了方向导数。
方向导数表示某个方向的导数,其本质是函数在某个点上沿任意方向的切线斜率(是一个标量,且需要在给定方向后才能计算出在该方向上的方向导数)。而梯度则是在这众多任意方向的切线中,斜率最大的那一条切线。这里需要注意两点:

  1. 方向导数是标量、梯度是矢量;
  2. 梯度是某个点变化程度最大的方向。

所以,梯度指明了方向,方向导数可根据该方向算出导数值。在前面谈到的下山策略中,我们需要一个“最陡峭的方向”作为下山方向,于是梯度就派上用处了。


2、利用梯度下降进行函数寻优

根据前面的分析,我们可以进行总结:
梯度下降法就是沿着梯度下降的方向求解极小值。在迭代过程中,如果某位置处的梯度为 0 (或者说上一次迭代的位置与现在所处位置之间的差异在某个足够小的范围内时),就终止算法,并认为当前所处位置即为所要寻找的最小值;同理,可沿着梯度上升的方向求解最大值,这种方法叫梯度上升。
从下图可以看到:受起始点和目标函数特性的影响,梯度下降不一定能找到全局最优解,可能只是局部最优解,那么什么时候能找到全局最优解呢?这个与损失函数有关,当损失函数是凸函数的话,可以找到全局最优。

Alt

故此,可总结梯度下降的具体实现过程如下:
1、确定模型的假设函数和损失函数;
2、相关参数的初始化,包括:参数、算法终止距离和步长(每次迭代时对参数修正的长度);
3、确定当前位置损失函数的梯度;
4、用步长乘以梯度,得到当前位置下降的距离;
5、确定是否所有参数梯度下降的距离都小于算法终止距离,如果小于则算法终止,否则进行下一步;
6、更新所有参数,更新完毕转到步骤 1。


3、梯度下降的一些问题

现在我们知道梯度下降的下山策略为:走一步再走一步,当走到某个位置时,往该位置处的梯度方向走。
据此,来思考一些问题。

Ⅰ 迭代步长

在梯度下降过程中,每次迭代往梯度方向走多长才合适呢?考虑如下一元函数:

Alt

若当前正处于 A 点,假设步长为 0.1 ,则采用梯度下降法将经过 3 步由 A 来到点 C。𝑥 坐标的变化过程为:0.5 + 0.1 + 0.1 + 0.1 = 0.8 ;
若设置步长为 0.05 ,则采用梯度下降法将经过 5 步由 A 来到点 B。𝑥 坐标的变化过程为:0.5 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 = 0.75 。
对于步长为 0.1 的行走方式,其优点是“下山更快”,但错过了极值点 B;对于步长为 0.05 的行走方式,其优点是
不容易错过极值点,但是“下山速度较慢”。因此,对于步长而言,它需要进行权衡。步长越长,迭代越快,但有可能错过最优解;步长越小,迭代速度越慢,且容易陷入局部最优解中,但不易错过极值点。所以算法的步长通常需要经过多次运行才能得到一个较优的值。

Ⅱ 算法的初始位置

考虑如下一元函数:

Alt

若算法的初始点在点 A ,则采用梯度下降的方式进行迭代时,该算法最终将停在上图的 area1 范围内,此范围是涵盖了极值点的,因此是可接受的;而若算法的初始点在点 B ,则采用梯度下降的方式进行迭代时,该算法最终将停在上图的 area2 范围内,此范围没有极值,甚至还可能导致算法难以跳出某个局部最优解。
因此,对于梯度下降而言,选择的初始值不同,最终得到的最小值有可能不同(可能仅得到某个局部最优解)。只有当损失函数是凸函数时,才会取到最优解。为此,该算法需要多次用不同初始值,才能确定好选择损失函数最小化的初值。如:采用随机梯度下降的方式。

Ⅲ 数据的取值范围差异

对于贷款问题,在用梯度下降进行迭代时,如果将步长设置为 0.01 ,显然这个步长对于“年龄”特征而言是合理的,但是对于“工资”特征就不太适用了。为什么?因为他们的量纲不一样(可简单理解为数据单位的不一致带来的数据取值范围差异)。“工资”这个特征的取值范围是远大于“年龄”的,因此在采用相同的步长时会使得算法在“工资”这个特征上的迭代速度远慢于“年龄”。即:统一步长会在某些量纲更小的特征上出现严重的缓迭代情形。

Alt

为此,需要对数据进行“归一化”处理。即,对每个特征 𝑥 ,求出它的期望 𝑥 ‾ \overline{𝑥} x 和标准差 𝜎 ,然后将原始特征中的每个数据都统一转化为:

x i = x i − x ˉ σ x_i=\frac{x_i-\bar{x}}{\sigma} xi=σxixˉ

这样一来,每个特征的新期望均为 0,方差均为 1,可大大提高算法的迭代速度。

Ⅳ 鞍点现象

首先解释一下什么是鞍点。鞍点是最优化问题中常遇到的一个现象,其数学含义是:目标函数在此点的梯度为0,但从该点出发的一个方向存在函数极大值点,而另一个方向是函数的极小值点。

Alt

在高度非凸空间中,存在大量的鞍点,这使得梯度下降法有时会失灵,虽然不是极小值,但是看起来确是收敛的。
解决该问题可通过进行多次随机梯度下降。


4、常见的梯度下降算法

梯度下降的目标函数: J ( θ ) = 1 2 n ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2n}\sum_{i=1}^n{\left(\text{y}^{(i)}-\theta^T\text{x}^{(i)}\right)}^2 J(θ)=2n1i=1n(y(i)θTx(i))2

1、批量梯度下降(Batch Gradient Descent BGD):

首先计算在所有数据上的损失值,然后再进行梯度下降。

梯度: ∂ J ( θ ) ∂ θ j = − 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=-\frac{1}{n}\sum_{i=1}^n{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θjJ(θ)=n1i=1n(y(i)hθ(x(i)))xj(i) (注: x j ( i ) \text{x}_j^{(i)} xj(i) 表示第 𝑖 个 x 向量在第 𝑗 个特征(属性)上的值);
则参数更新公式为: θ j = θ j − ∂ J ( θ ) ∂ θ j = θ j + 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j=\theta_j-\frac{\partial J(\theta)}{\partial \theta_j}=\theta_j+\frac{1}{n}\sum_{i=1}^n{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θj=θjθjJ(θ)=θj+n1i=1n(y(i)hθ(x(i)))xj(i)

前面所介绍的算法其实就是批量梯度下降。具体操作步骤是:遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,并更新梯度。这种方法每更新一次参数,都要把数据集里的所有样本计算一遍,因此得出的梯度往往都是朝着正确的方向;但是其缺陷是计算量过大,导致计算速度慢,因而不支持在线学习。

2、随机梯度下降(Stochastic Gradient Descent SGD):

不使用全部的样本来计算梯度,而是使用单一样本来近似估计梯度。

梯度: ∂ J ( θ ) ∂ θ j = − ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=-{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θjJ(θ)=(y(i)hθ(x(i)))xj(i)
则参数更新公式为: θ j = θ j − ∂ J ( θ ) ∂ θ j = θ j + ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j=\theta_j-\frac{\partial J(\theta)}{\partial \theta_j}=\theta_j+{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θj=θjθjJ(θ)=θj+(y(i)hθ(x(i)))xj(i)

具体的操作步骤是:每次从训练集中随机选择一个样本,计算其对应的损失和梯度,进行参数更新,反复迭代。这种方式在数据规模比较大时可以减少计算复杂度,提高计算效率。从概率意义上来说,单个样本的梯度是对整个数据集合梯度的无偏估计,但是它存在着一定的不确定性,因此收敛速率比批梯度下降得更慢(即,有可能会走很多弯路)。

3、小批量梯度下降(Mini-batch Gradient Descent MGD):

为了克服上面两种方法的缺点,采用的一种折中手段:将数据分为若干批次,按批次更新参数(每一批样本被称为 MiniBatch,规模通常取 2𝑛 )。

梯度: ∂ J ( θ ) ∂ θ j = α M i n i B a t c h ∑ i = k + 1 k + M i n i B a t c h ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=\frac{\alpha}{MiniBatch}\sum_{i=k+1}^{k+MiniBatch}{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θjJ(θ)=MiniBatchαi=k+1k+MiniBatch(y(i)hθ(x(i)))xj(i)
则参数更新公式为: θ j = θ j − ∂ J ( θ ) ∂ θ j = θ j − α M i n i B a t c h ∑ i = k + 1 k + M i n i B a t c h ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j=\theta_j-\frac{\partial J(\theta)}{\partial \theta_j}=\theta_j-\frac{\alpha}{MiniBatch}\sum_{i=k+1}^{k+MiniBatch}{(\text{y}^{(i)}-h_\theta(\text{x}^{(i)}))}\text{x}_j^{(i)} θj=θjθjJ(θ)=θjMiniBatchαi=k+1k+MiniBatch(y(i)hθ(x(i)))xj(i)

每一批次中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性;另一方面,由于一批样本的数量比整个数据集少很多,因此计算量也不是很大。所以,相较其他梯度下降算法,小批量梯度下降是用得比较多的。




三、多项式回归


1、多项式回归的引入

在贷款的案例中,我们假设“工资”与“年龄”属性与最终的贷款额度是一种线性关系,因此建立的拟合方程如下:

h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0x0+θ1x1+θ2x2

但在实际生活中,许多回归任务并不是线性的。比如学生学习的时间和考试分数(100分制)之间的关系:当学生分数处于 75 以下时,其学习时间和考试分数总体看来是成线性关系的。在这种情况下,可能学生只要坚持每天都学 10 个小时,则每次考试分数都会上升 1 分;但当学生分数不低于 75 分时,其学习时间与考试分数之间的关系则开始发生变化,因为此时,剩下那些尚未克服的知识点都是比较难的点,故学生能提升的空间开始变小。在这种情况下,可能学生每天要坚持学 15 个小时,才能在下次考试中上升 1 分;更极端地,当分数不低于 90 时,学生的学习时间和考试分数之间的关系也会更极端。再比如下图中列出的蓝色散点,此时如果还强行以线性方程对其进行进行拟合,则得到的效果肯定是不太理想的。

Alt

这时候,就需要对拟合方程进行拓展,以适应这种非线性改变。一般地,当在拟合方程中引入指数非 0 或 1 的幂函数,即采取非线性方程对数据进行拟合时,我们称这样的回归为多项式回归(Polynomial Regression)。


2、单项式与多项式的定义

在数学中,多项式是指由若干个单项式 (Monomial) 相加而成的代数式。多项式中的每个单项式叫做多项式的项,这些单项式中的最高项次数,就是这个多项式的次数。单项式是由单个或多个变量和系数相乘组成(若单项式中不包含任意变量而仅有系数,则该项也被称为常数项)。如:
多项式:𝑥2 + 2𝑥𝑦 + 𝑦2(二次多项式)、 2𝑥3 − 4𝑥2 + 3𝑥(三次多项式);
单项式:3、𝑥、𝑥2 、𝑥𝑦 、 𝑥𝑦3
一般来说:若绘制出的待拟合数据散点图近似一条直线时,通常采用线性回归进行拟合;若绘制出的待拟合数据散点图存在一个“弧”,就可以考虑用二次多项式进行拟合;若绘制出的待拟合数据散点图存在两个“弧”,就可以考虑用三次多项式进行拟合……


3、多项式回归的实现

来看一种比较简单的情况,即多项式中每项都仅含一个变量(无类似于 𝑥𝑚𝑦𝑛 的项):

a 1 x + a 2 x 2 + … + a n − 1 x n − 1 + a n x n a_1x+a_2x^2+…+a_{n-1}x^{n-1}+a_nx^n a1x+a2x2++an1xn1+anxn

假设已知给出的数据近似三次项函数,则可建立如下拟合方程:

h θ ( x ) = θ 1 x 1 1 + θ 2 x 2 2 + θ 3 x 3 3 h_\theta(x)=\theta_1x_1^1+\theta_2x_2^2+\theta_3x_3^3 hθ(x)=θ1x11+θ2x22+θ3x33

观察上式,其实它与线性回归的拟合方程 ℎ𝜃(𝑥) = 𝜃1𝑥1 + 𝜃2𝑥2 + 𝜃3𝑥3 仅在各项上的次数存在不同。因此,一种很简单的办法是:将样本数据按各自对应项的次数进行变换,再进行拟合。即令:

ξ 1 = x 1 , ξ 2 = x 2 2 , ξ 3 = x 3 3 \xi_1=x_1 , \xi_2=x_2^2 , \xi_3=x_3^3 ξ1=x1,ξ2=x22,ξ3=x33

此时,原拟合方程就变为:

h θ ( x ) = θ 1 x 1 1 + θ 2 x 2 2 + θ 3 x 3 3 = θ 1 ξ 1 + θ 2 ξ 2 + θ 3 ξ 3 h_\theta(x)=\theta_1x_1^1+\theta_2x_2^2+\theta_3x_3^3=\theta_1\xi_1+\theta_2\xi_2+\theta_3\xi_3 hθ(x)=θ1x11+θ2x22+θ3x33=θ1ξ1+θ2ξ2+θ3ξ3

于是,我们就将一个多项式回归问题转变为一个线性回归问题来进行求解。若建立的多项式拟合方程中,存在含有多个变量的项时,也可按照这样的思路对其进行求解。

Alt

如此一来,就将 “基于表 (a) 求拟合方程 h θ ( x ) = θ 1 x 1 1 + θ 2 x 2 2 + θ 3 x 3 3 h_\theta(x)=\theta_1x_1^1+\theta_2x_2^2+\theta_3x_3^3 hθ(x)=θ1x11+θ2x22+θ3x33” 的问题转换为“基于表 (b) 求拟合方 h θ ( x ) = θ 1 ξ 1 + θ 2 ξ 2 + θ 3 ξ 3 h_\theta(x)=\theta_1\xi_1+\theta_2\xi_2+\theta_3\xi_3 hθ(x)=θ1ξ1+θ2ξ2+θ3ξ3”。




四、正则化


1、正则化的引入

考虑如下两组 𝜃 向量:

θ 1 = [ 1 , 0 , 0 , 0 ] T ⟼ 拟合方程: h θ 1 ( x ) = 1 × x 1 + 0 × x 2 + 0 × x 3 + 0 × x 4 \theta_1=[1,0,0,0]^T ⟼ 拟合方程:h_{\theta_1}(x)= 1×x_1+0×x_2+0×x_3+0×x_4 θ1=[1,0,0,0]T拟合方程:hθ1(x)=1×x1+0×x2+0×x3+0×x4 θ 2 = [ 1 4 , 1 4 , 1 4 , 1 4 ] T ⟼ 拟合方程: h θ 2 ( x ) = 1 4 × x 1 + 1 4 × x 2 + 1 4 × x 3 + 1 4 × x 4 \theta_2=[\frac14,\frac14,\frac14,\frac14]^T ⟼ 拟合方程:h_{\theta_2}(x)= \frac14×x_1+\frac14×x_2+\frac14×x_3+\frac14×x_4 θ2=[41,41,41,41]T拟合方程:hθ2(x)=41×x1+41×x2+41×x3+41×x4

要选用哪一个作为最终的拟合方程参数呢?
一个很直观的方法是,看他们在训练样本上的均方误差(Mean Square Error):

M S E ( θ ) = ∑ i = 1 n ( y i − θ T x i ) 2 MSE(\theta)=\sum_{i=1}^n{(\text{y}_i-\theta^Tx_i)}^2 MSE(θ)=i=1n(yiθTxi)2

在训练样本上取得的均方误差值越大,说明该组参数的拟合水平不是很好;反之,则说明拟合水平较高(此时还需考虑是否出现过拟合的问题)。
对于训练数据 𝑥 = [ 1, 1, 1, 1 ] 𝑇, 𝑦 = 1 而言,将其带入两个拟合方程得到的均方误差值均为 0 (在实际使用时可能会有一定的差距,但是可能差距并不大)。因此,均方误差值作为衡量拟合方程参数优劣的标准在一定程度上是有失偏颇的。为此,引入正则化。正则化是指在经验风险上加一个正则化项或惩罚项(正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大)。例如,岭回归用到的正则化项为:

R ( θ ) = α ∑ i = 1 n θ 2 R(\theta)=\alpha\sum_{i=1}^n\theta^2 R(θ)=αi=1nθ2

其中, 𝛼 ≥ 0 是正则化惩罚力度,当该值为 0 时表明不进行正则化处理。用该式和训练数据 𝑥 = [ 1, 1, 1, 1 ] 𝑇, 𝑦 = 1 再对 𝜃 进行评估时,𝑅(𝜃1) = 𝛼 > 𝑅(𝜃2) = α 4 \frac \alpha4 4α,即认为以 𝜃1 构成的拟合方程表现不如 𝜃2

插语:实际上,可以很自然地认为 θ1 不如 θ2 。因为 θ1 = [ 1, 0, 0, 0 ] 𝑇,表明 θ1 仅考虑了原始数据中的第一个特征来作为拟合方程的判据;而 θ2= [ 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41, 1 4 \frac{1}{4} 41 ] 𝑇,表明 θ2 考虑到了原始数据中的所有特征,因此以 θ2 作为拟合方程的参数将取得更好的拟合效果。就像素描,如果你只从一个角度去观察目标然后作画,则无论你画得多好,你的作品始终给人的感觉是一副平面图,缺失了灵魂;而当你从多个角度观察后,再执笔作画,则你最终的成品将是一幅二维平面中的立体画作,是一幅生动形象且写实的好作品。


过拟合
分类器在训练集上表现非常完美,但在测试集上却非常糟糕。想象一下,训练模型时,我们是带着标签(正确答案)进行的,就像平时做练习册,边做边对答案(相当于是在照着答案做),这样当然做得非常好。但到考试时,由于并没有真正掌握问题的一般规律和方法,而只会做原题,因此表现并不好。这就是过拟合。

2、正则化的效果

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。引入正则化后,会对回归方程的权重参数进行惩罚,以让权重参数尽可能平滑。
如下图所示,其中三条曲线都是最高次项达 𝑥15 的拟合方程。蓝色虚线是未引入正则化操作得到的曲线。该曲线虽然能最大程度的降低 MSE 值(即在训练集上取得好的拟合效果),但是这样的模型过于复杂,会使得其在训练样本和验证集上的差异相当大(即会出现严重的过拟合现象)。而与之相对的绿色实线(正则化惩罚力度为 0.00001)则较为简单,其既能保持 MSE 值不至于太高(即在训练集上取得较好的拟合效果),也保持了模型的简单性质。红色虚线是正则化惩罚力度为 1 的拟合曲线,该曲线虽然是 MSE 值最大的一条,但是其模型相当简单,曲线非常平滑,能有效避免出现过拟合的现象。

Alt

在引入正则化后,不同的正则化算法取得的效果往往有所不同。设损失函数为(其中 𝑅(𝜃) 为正则化项):

J ( θ ) = 1 2 n ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 + R ( θ ) J(\theta)=\frac{1}{2n}\sum_{i=1}^n{\left( \text{y}^{(i)} - \theta^T \text{x}^{(i)} \right)}^2+R(\theta) J(θ)=2n1i=1n(y(i)θTx(i))2+R(θ)

R ( θ ) = α ∑ i = 1 n θ 2 R(\theta)=\alpha \sum_{i=1}^n\theta^2 R(θ)=αi=1nθ2 ,称该回归算法为岭回归;
R ( θ ) = α ∑ i = 1 n ∣ θ ∣ R(\theta)=\alpha \sum_{i=1}^n|\theta| R(θ)=αi=1nθ ,称该回归算法为 Lasso 回归;

两者区别在于:
1、岭回归对于任意数据都不会出现斜率为 0 的情况,它只会无限趋近于 0 ;而 Lasso 回归则有可能得到一条斜率为 0 的回归曲线。
2、岭回归的正则项图是一个圆形; Lasso 回归的正则项图是一个矩形。而二次正则项的图具有处处可导,方便计算的优势。
Alt

两者的选用应根据具体场景而甄别。



五、实战部分

本文主要阐述了线性回归在理论层面上的推导,其中涵盖了对极大似然估计、梯度下降的介绍与分析,接着又介绍了多项式回归是如何实现的,最终介绍了有关正则化的一些概念及其用处。但是,最终还是要将这些理论用于实践之中。值得注意的是,基于以上理论,很多第三方库早就将这些功能进行了实现和封装,因此,在写代码时,我们的重心要放在 “加深对理论的认识,强化编码能力” 之上。
实战链接


END


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐