线性回归是统计学中最基础的数学模型,几乎各个学科的研究中都能看到线性回归的影子,比如量化金融、计量经济学等;当前炙手可热的深度学习也一定程度构建在线性回归基础上。因此,每个人都有必要了解线性回归的原理。
线性回归对已有数据进行建模,可以对未来数据进行预测。有些人觉得线性回归太过简单,甚至不屑于称之为机器学习;另外一些人觉得很多编程库已经对线性回归做了封装,使用时调用一下函数就好,不必了解太多数学推导过程。实际上,线性回归是所有机器学习技术的一个最好起点,很多复杂的机器学习技术以及当前大火的深度神经网络都或多或少基于线性回归。

机器学习建模过程
机器学习最常见的场景是监督学习:给定一些数据,使用计算机学习到一种模式,然后用它来预测新的数据。一个简单的监督学习任务可以表示为,给定N个两两数据对(xi,yi)i=1N,使用某种机器学习模型对其进行建模,得到一个模型(model),其中某个给定的数据对为样本(sample),x 为特征(feature),y 为真实值(label)。

例如,上图展示了收入数据集展示了受教育程度与年度收入之间的数据。根据我们的社会经验和图中的数据分布,我们觉得能使用一个直线来描述“收入会随着受教育时间的增多而增多”的现象。所以针对这个数据集,可以使用一个最简单的机器学习模型——一元线性回归。
一元线性回归
y=mx+b(0)
中学时,我们经常使用上面的方程来解一些数学问题,方程描述了变量 y 随着变量 x 而变化。方程从图形上来看,是一条直线。如果建立好这样的数学模型,已知 x 我们就可以得到预测的 y^ 了。统计学家给变量带上了一个小帽子,表示这是预测值,以区别于真实观测到的数据。方程只有一个自变量 x,且不含平方立方等非一次项,因此被称为一元线性方程。

在对收入数据集进行建模时,我们可以对参数m
和b
取不同值来构建不同的直线,这样就形成了一个参数家族。参数家族中有一个最佳组合,可以在统计上以最优的方式描述数据集。那么监督学习的过程就可以被定义为:给定N个数据对$ (x, y)$,寻找最佳参数 m∗ 和 b∗,使模型可以更好地拟合这些数据。
上图给除了不同的参数,到底哪条直线是最佳的呢?如何衡量模型是否以最优的方式拟合数据呢?机器学习用损失函数(loss function)的来衡量这个问题。损失函数又称为代价函数(cost function),它计算了模型预测值ŷ
和真实值y
之间的差异程度。从名字也可以看出,这个函数计算的是模型犯错的损失或代价,损失函数越大,模型越差,越不能拟合数据。统计学家通常使用L(y^,y)来表示损失函数。

对于线性回归,一个简单实用的损失函数为预测值与真实值误差的平方。上图展示了收入数据集上预测值与真实值之间的误差。
L(yi^,yi)=(yi^−yi)2(1)
公式1来表示单个样本点上预测值与真实值的误差。
L(y^,y)=N1i=1∑N(yi^−yi)2(2)
L(y^,y)=N1i=1∑N[(mxi+b)−yi]2(3)
公式2表示将数据集的所有误差求和取平均,再在其基础上代入公式y^=mx+b,得到公式3。
m∗,b∗=argminm,bL(m,b)=argminm,bN1i=1∑N[(mxi+b)−yi]2(4)
公式4中arg min
是一种常见的数学符号,表示寻找能让L
函数最小的参数m*
和b*
。

误差从图形上看是一条线段,平方后就形成了一个正方形,将正方形的面积求和再取平均,就是公式3的损失函数。所有的正方形的平均面积越小,损失越小。对于给定数据集,x
和y
的值是已知的,参数m
和b
是需要求解的,模型求解的过程就是解公式4的过程。以上就是最小二乘法的数学表示,“二乘”表示取平方,“最小”表示损失函数最小。至此我们发现,有了损失函数,机器学习的过程被化解成对损失函数求最优解过程,即求一个最优化问题。

那为什么只能用取平方,不能用别的办法,比如取绝对值呢?中学的时候学过,平方函数有最小值,能保证后面求解参数的时候,用求导的方式快速找到最小值,而绝对值函数则不具有这个属性。
最小二乘法参数求解
对于公式4中的函数,可以对m
和b
分别求导,导数为0时,损失函数最小。
∂m∂L(m,b)=N2i=1∑Nxi(mxi+b−yi)=2m(N1i=1∑Nxi2)+2b(N1i=1∑Nxi)−2(N1i=1∑Nxiyi)(5)
∂b∂L(m,b)=N2i=1∑Nmxi+b−yi=2m(N1i=1∑Nxi)+2b−2(N1i=1∑Nyi)(6)
公式5和6是损失函数对m
和b
进行求偏导。
xˉ=N1i=1∑Nxiyˉ=N1i=1∑Nyi(7)
s2=N1i=1∑Nxi2ρ=N1i=1∑Nxiyi(8)
结果中重复出现了一些关于x
和y
的求和项,给定数据集,这些求和项可以通过计算求出来,是常数,可以用公式7和8表示。
∂m∂L(m,b)=0⇒ms2+bxˉ−ρ=0 (9)
∂b∂L(m,b)=0⇒mxˉ+b−yˉ=0(10)
当导数为0时,可以求得最小值,即由公式9和10可以得到最优解m
和b
。
m∗=s2−xˉ2ρ−xˉyˉb∗=yˉ−xˉm∗(11)
以上就是一元线性回归的最小二乘法求解过程。
很多机器学习模型中都需要经历上述过程:确定损失函数,求使损失函数最小的参数。求解过程会用到一些简单的微积分,因此复习一下微积分中偏导数部分,有助于理解机器学习的数学原理。
多元线性回归
现在我们把x
扩展为多元的情况,即多种因素共同影响变量y
。现实问题也往往是这种情况,比如,要预测房价,需要考虑包括是否学区
、房间数量
、周边是否繁华
、交通方便性
等。共有D种维度的影响因素,机器学习领域将这D种影响因素称为特征(feature)。每个样本有一个需要预测的y和一组D维向量X。原来的参数m变成了D维的向量w。这样,某个 yi 可以表示成b+∑d=1Dwdxi,d,其中 xi,d 表示第 i 个样本向量 xi 中第 d 维特征值。
yi=b+d=1∑Dwdxi,db=wD+1(12)
yi=d=1∑D+1wdxi,d(13)
为了表示起来更方便,独立出来的偏置项可以使用下面的方法归纳到向量 w 中:使用b=wD+1来表示参数中的 b ,将 b 添加到特征向量的最后一位,将D维特征扩展成D+1维,也就是在每个 x 最后添加一个值为1的项,这样就可以由公式12可以得到公式13。
w=⎣⎢⎢⎢⎢⎢⎡w1w2⋮wDwD+1⎦⎥⎥⎥⎥⎥⎤X=⎣⎢⎢⎢⎡x1x2⋮xN⎦⎥⎥⎥⎤=⎝⎜⎜⎜⎛x1,1x2,1⋮xN,1x1,2x2,2⋮xN,2⋯⋯⋱⋯x1,Dx2,D⋮xN,D11⋮1⎠⎟⎟⎟⎞y=⎣⎢⎢⎢⎡y1y2⋮yN⎦⎥⎥⎥⎤(14)
各个向量形状如公式14所示。其中,向量 w 表示模型中各个特征的权重;矩阵 X 的每一行是一条样本,每条样本中有D+1个特征值,分别为该样本在不同维度上的取值;向量 y 为真实值。可以用内积的形式来表示求和项:∑d=1D+1wdxi,d=w⊤xi。N条样本组成的数据可以表示为:y=Xw
yi=d=1∑D+1wdxi,d=w⊤xi⇒y=Xw(15)
尽管公式13可以描述变量之间的关系,但是一般机器学习领域更喜欢使用公式15这样的向量乘法的形式。这不仅因为这样表示起来更简单,也是因为现代计算机对向量计算做了大量优化,无论是CPU还是GPU都喜欢向量计算,并行地处理数据,可以得到成百上千倍的加速比。
需要注意的是,公式中不加粗的表示标量,加粗的表示向量或矩阵。

比一元线性回归更为复杂的是,多元线性回归组成的不是直线,是一个多维空间中的超平面,数据点散落在超平面的两侧。
L(w)=(Xw−y)⊤(Xw−y)=∣∣Xw−y∣∣22(16)
多元线性回归的损失函数仍然使用预测值-真实值
的平方来计算,公式16为整个模型损失函数的向量表示。这里出现了一个竖线组成的部分,它被称作L2范数的平方。范数通常针对向量,也是一个机器学习领域经常用到的数学符号,公式17展示了一个向量 x 的L2范数的平方以及其导数。
∣∣x∣∣22=((i=1∑Nxi2)1/2)2∇∣∣x∣∣22=2x(17)
∂w∂L(w)=2X⊤(Xw−y)=0(18)
对公式16中的向量 w 求导,得到公式18。
X⊤Xw=X⊤y⇒(X⊤X)−1X⊤Xw=(X⊤X)−1X⊤y(19)
w∗=(X⊤X)−1X⊤y(20)
公式19组成向量 w 的矩阵方程,根据线性代数的知识,最优解其实是在解这个矩阵方程,英文中称这个公式为Normal Equation
。
线性规划可以得到一个确定的最优解,这些最优解组成了一个最优超平面。
读到这里,一些对机器学习略有了解的朋友可能会提问,为什么求解时没有提到梯度下降
。其实是可以使用梯度下降代替解矩阵方程。公式20中矩阵求逆的计算量比较大,复杂度在O(n3)级别。当特征维度达到百万级以上或样本数量极大时,计算时间非常长,单台计算机内存甚至存储不下这些参数,求解矩阵方程的办法就不现实了,必须使用梯度下降法。梯度下降法以一定的精度逼近最优解,求解速度在数据量大时非常有优势,但不一定能得到绝对的最优解。本专栏未来将详细介绍梯度下降法。
前面花了点时间描述线性规划的求解过程,出现了不少公式,跟很多朋友一样,笔者以前非常讨厌看公式,看到一些公式就头大,因此觉得机器学习非常难。不过,静下心来仔细读一遍,会发现其实这些公式用到的都是微积分、线性代数中比较基础的部分,并不需要高大上的知识,理工科背景的朋友应该都能看得懂。
线性回归的使用场景

那到底什么时候可以使用线性回归呢?统计学家安斯库姆给出了四个数据集,被称为安斯库姆四重奏,从这四个数据集的分布可以看出,并不是所有的数据集都可以用一元线性回归来建模。现实世界中的问题往往更复杂,变量几乎不可能非常理想化地符合线性模型的要求。因此使用线性回归,需要遵守下面几个假设:
- 线性回归是一个回归问题(regression)。
- 要预测的变量
y
与自变量x
的关系是线性的。
- 各项误差服从正太分布,均值为0,与
x
同方差。
- 变量
x
的分布要有变异性。
- 多元线性回归中不同特征之间应该相互独立,避免线性相关。
回归问题与分类问题
与回归相对的是分类问题(classification),分类问题要预测的变量y
输出集合是有限的,预测值只能是有限集合内的一个。当要预测的变量y
输出集合是无限且连续,我们称之为回归。比如,天气预报预测明天是否下雨,是一个二分类问题;预测明天的降雨量多少,就是一个回归问题。
变量之间是线性关系
线性通常是指变量之间保持等比例的关系,从图形上来看,变量之间的形状为直线,斜率是常数。这是一个非常强的假设,数据点的分布呈现复杂的曲线,则不能使用线性回归来建模。可以看出,四重奏右上角的数据就不太适合用线性回归的方式进行建模。
误差服从均值为零的正太分布
前面最小二乘法求解过程已经提到了误差的概念,误差可以表示为误差 = 实际值 - 预测值
。
可以这样理解这个假设:线性回归允许预测值与真实值之间存在误差,随着数据量的增多,这些数据的误差平均值为0;从图形上来看,各个真实值可能在直线上方,也可能在直线下方,当数据足够多时,各个数据上上下下相互抵消。如果误差不服从均值为零的正太分布,那么很有可能是出现了一些异常值,数据的分布很可能是安斯库姆四重奏右下角的情况。
这也是一个非常强的假设,如果要使用线性回归模型,那么必须假设数据的误差均值为零的正太分布。
变量 x
的分布要有变异性
线性回归对变量 x
也有要求,要有一定变化,不能像安斯库姆四重奏右下角的数据那样,绝大多数数据都分布在一条竖线上。
多元线性回归不同特征之间相互独立
如果不同特征不是相互独立,那么可能导致特征间产生共线性,进而导致模型不准确。举一个比较极端的例子,预测房价时使用多个特征:房间数量
,房间数量*2
,-房间数量
等,特征之间是线性相关的,如果模型只有这些特征,缺少其他有效特征,虽然可以训练出一个模型,但是模型不准确,预测性差。
线性回归还有很多其他数学假设,但与当前所要解释的问题关系不大,这里暂不赘述。
总结
线性回归是统计学中最基础的数学模型,几乎各个学科的研究中都能看到线性回归的影子,比如量化金融、计量经济学等;当前炙手可热的深度学习也一定程度构建在线性回归基础上。因此,每个人都有必要了解线性回归的原理。
线性回归的一种最直观解法是最小二乘法,其损失函数是误差的平方,具有最小值点,可以通过解矩阵方程求得这个最小值。尽管推导过程有大量数学符号,线性回归从数学上来讲并不复杂,有微积分和线性代数基础的朋友都可以弄清其原理。