线性回归的发展历史

简介

线性回归,可谓是机器学习领域的HelloWorld了。工作中大部分预测、监控之类的需求,都可以用线性回归来解决。

那么用了这么久,你真的了解它吗?是否是日用而不知?
线性回归是怎么来的?损失函数为何是二乘函数(最小二乘法)?如何求解最优解?

本文将对这些问题一一解答。

前世今生

线性回归并非是机器学习领域的发明,而是从其他学科领域借鉴过来。

具体地说,线性回归来自于生物学。早在19世纪,就有生物学家在研究人类的遗传时发现:人类的身高存在「回归均值」的现象。

举个栗子:姚小明的父母身高都很高(高于平均值),那么姚小明的身高不会比父母更高,而是向下趋于平均值;潘小江的父母身高都很矮(低于平均值),那么潘小江的身高不会比父母更矮,而是向上趋于平均值。

用公式表达:

孩子身高 = 人类平均身高 + 父母身高 * w

假设,人类平均身高为1.8,w为0.1,那么计算孩子的身高公式为:

孩子身高 = 1.8 + 0.1 * 父母身高

如果父母身高是2.4,孩子身高会被拽向1.8,计算得2.04;如果父母身高为1.6,孩子身高会被拉向1.8,计算得1.96。

这种现象就是「回归均值」现象,就好像有股力量拉着你,当你走向极端时,被它拉了回来。

我们今天所说的「线性回归」其实就是从「均值回归」发展来的。现在我们都知道,孩子的身高会在人类平均身高附近波动,这种波动符合正态分布,可以用最小二乘法求解w的值。可当时的人们哪知道什么是「正态分布」,又哪里知道「最小二乘法」。

曲折的最小二乘法

最小二乘法是统计学里解决线性回归问题的基础方法,那么,为什么是「最小二乘法」,而不是「最小差值法」、「最小四乘法」?

还得回到19世纪。

当时,人们经常做各种各样的实验。既然是实验,就少不了误差的干扰。就有人来研究,有什么办法来减少误差呢?

有人马上脱口而出:多次测量,取平均值!那么,为什么是平均值呢?为什么不是中位数、众数呢?

当时有个法国的科学家勒让德就想:如果每次测量都是有误差的,那么这个误差一定是在「真值」附近上下波动。那真值就应该是让这些误差波动最小的那个值,那么误差平方也会最小,而这个y就是「真值」。

举个栗子:说要测量一个物体的长度,测量了5次,测定的值分别是
y 1 = 10.3 y_1 = 10.3 y1=10.3 y 2 = 10.2 y_2 = 10.2 y2=10.2 y 3 = 9.9 y_3 = 9.9 y3=9.9 y 4 = 9.8 y_4 = 9.8 y4=9.8 y 5 = 9.8 y_5 = 9.8 y5=9.8
假设真值是y,那么y应该是那个让5此测量误差平方和最小的值。

即求:
( y − y 1 ) 2 + ( y − y 2 ) 2 + ( y − y 3 ) 2 + ( y − y 4 ) 2 + ( y − y 5 ) 2 (y-y_1)^2 + (y-y_2)^2 + (y-y_3)^2 + (y-y_4)^2 + (y-y_5)^2 (yy1)2+(yy2)2+(yy3)2+(yy4)2+(yy5)2
值最小的。

这是个关于的2次函数,很容易证明2次函数是凸函数(二阶导数>=0),所以会有最小值,且最小值在导数为0处。

求导数,另导数为0,得:
2 ( y − y 1 ) + 2 ( y − y 2 ) + 2 ( y − y 3 ) + 2 ( y − y 4 ) + 2 ( y − y 5 ) = 0 2(y-y_1) + 2(y-y_2) + 2(y-y_3) + 2(y-y_4) + 2(y-y_5) = 0 2(yy1)+2(yy2)+2(yy3)+2(yy4)+2(yy5)=0
求得:
y = ( y 1 + y 2 + y 3 + y 4 + y 5 ) / 5 y = (y_1 + y_2 + y_3 + y_4 + y_5) / 5 y=(y1+y2+y3+y4+y5)/5
y y y恰好是5次测量的平均值。这就回答了,为什么多次测量取平均值就能减少误差。

可是,为什么要误差平方和最小?为什么不用误差绝对值和最小?为什么不用误差4次方?这个问题勒让德也没有很好的解释,他只能说:2次方好计算。

当时有另外一个个数学家高斯有着同样的疑问。他就要一探究竟,为什么是最小2次方,而不是其他。

他用了概率的方法来解答此问题。假设真值为y,那么每次测量的误差为: e i = y − y i e_i = y - y_i ei=yyi,误差的概率密度函数为:。
那么,5次测量的联合概率为:
L ( y ) = p ( e 1 ) ∗ p ( e 2 ) ∗ p ( e 3 ) ∗ p ( e 4 ) ∗ p ( e 5 ) L(y) = p(e_1)*p(e_2)*p(e_3)*p(e_4)*p(e_5) L(y)=p(e1)p(e2)p(e3)p(e4)p(e5)
即:
L ( y ) = p ( y − y 1 ) ∗ p ( y − y 2 ) ∗ p ( y − y 3 ) ∗ p ( y − y 4 ) ∗ p ( y − y 5 ) L(y)=p(y-y_1)*p(y-y_2)*p(y-y_3)*p(y-y_4)*p(y-y_5) L(y)=p(yy1)p(yy2)p(yy3)p(yy4)p(yy5)
这是关于y的似然函数。

他认为,之所以观测到误差是这个结果,是因为这个结果发生的概率最大,也就是似然值最大。

最终,高斯证明:如果误差服从正态分布,那么必须要求误差的平方和最小,才能使得似然值最大,这种方法叫「极大似然估计」。

那么,测量误差是服从正态分布的吗?同时期的数据家拉普拉斯后来证明,误差还真就是服从正态分布的!

如今,我们有了结论:如果实验观测误差服从正态分布,那么可以用最小二乘法(最小化二次方之和)求解真值。

以上是根据观测值估计一个真值的情况,那么如果是估计一个函数,是否也能用最小二乘法呢?

答案是可以的。

实际上,估计函数就是估计函数的系数。

例如,有一些 ( x , y ) (x,y) (x,y)对,发现与大致分布在一条直线上,如下图:
在这里插入图片描述

线性回归

我们可以猜测,与存在线性关系:
y ^ = w ∗ x + b \hat{y} = w*x + b y^=wx+b

那么对于每个,都可以用上式计算得到对应的,与的差值记作,可以看做观测值与真值的误差,如果这个误差服从「正态分布」,就可以用「最小二乘法」来估计真值了,即:
m i n L ( w , b ) = m i n ∑ i = 1 m ( w ∗ x i + b − y i ) 2 min L(w,b) = min \sum_{i=1}^{m}(w*x_i + b - y_i)^2 minL(w,b)=mini=1m(wxi+byi)2
这就是我们所说的「线性回归」问题,其中, L ( w , b ) L(w,b) L(w,b)就是所说的「损失函数」。

如何求解

书接上文,「损失函数」为:
L ( w , b ) = ∑ i = 1 m ( w ∗ x i + b − y i ) 2 L(w,b) = \sum_{i=1}^{m}(w*x_i + b - y_i)^2 L(w,b)=i=1m(wxi+byi)2
这是关于 ( w , b ) (w,b) (w,b)的2次函数,分别对和求偏导数,另偏导数为0,得到方程组,解方程组即可。

很明显,方程组有两个未知数:w和b,至少需要两对不同的 ( x i , y i ) (x_i,y_i) (xi,yi),方程组才有解。

如果是「多元线性回归」呢?

同样可以猜测,与存在线性关系:
y ^ = w 1 ∗ x 1 + . . . + w n ∗ x n + b \hat{y} = w_1*x_1 + ... + w_n*x_n + b y^=w1x1+...+wnxn+b

优化目标为:
m i n L ( w 1 , w 2 , . . . , w n , b ) = m i n ∑ i = 1 m ( ∑ j = 1 n w j ∗ x i j + b − y i ) 2 min L(w_1, w_2,..., w_n ,b) = min \sum_{i=1}^{m}(\sum_{j=1}^{n} w_j*x_{ij} + b - y_i)^2 minL(w1,w2,...,wn,b)=mini=1m(j=1nwjxij+byi)2

同样,可以求 L L L w w w各个的偏导数,另为0,解方程组得到 w 1 , w 2 , . . . , w n , b w_1, w_2,..., w_n ,b w1,w2,...,wn,b

但是,这样太复杂了,我们借助矩阵、向量来解方程。

重新整理估计函数:
y ^ = w 0 ∗ x 0 + w 1 ∗ x 1 + . . . + w n ∗ x n \hat{y} = w_0*x_0 + w_1*x_1 + ... + w_n*x_n y^=w0x0+w1x1+...+wnxn
其中, w 0 w_0 w0是原来的 b b b x 0 x_0 x0恒为1。

则m个观察样本为:
y ^ ( 1 ) = w 0 ∗ x 0 ( 1 ) + w 1 ∗ x 1 ( 1 ) + . . . + w n ∗ x n ( 1 ) \hat{y}^{(1)} = w_0*x_0^{(1)} + w_1*x_1^{(1)} + ... + w_n*x_n^{(1)} y^(1)=w0x0(1)+w1x1(1)+...+wnxn(1) y ^ ( 2 ) = w 0 ∗ x 0 ( 2 ) + w 1 ∗ x 1 ( 2 ) + . . . + w n ∗ x n ( 2 ) \hat{y}^{(2)} = w_0*x_0^{(2)} + w_1*x_1^{(2)} + ... + w_n*x_n^{(2)} y^(2)=w0x0(2)+w1x1(2)+...+wnxn(2) . . . ... ... y ^ ( m ) = w 0 ∗ x 0 ( m ) + w 1 ∗ x 1 ( m ) + . . . + w n ∗ x n ( m ) \hat{y}^{(m)} = w_0*x_0^{(m)} + w_1*x_1^{(m)} + ... + w_n*x_n^{(m)} y^(m)=w0x0(m)+w1x1(m)+...+wnxn(m)

上角标m表示第m个样本。

每个样本的误差表示为 e ( m ) e^{(m)} e(m),则有:
e ( 1 ) = w 0 ∗ x 0 ( 1 ) + w 1 ∗ x 1 ( 1 ) + . . . + w n ∗ x n ( 1 ) − y ( 1 ) e^{(1)} = w_0*x_0^{(1)} + w_1*x_1^{(1)} + ... + w_n*x_n^{(1)} - y^{(1)} e(1)=w0x0(1)+w1x1(1)+...+wnxn(1)y(1) e ( 2 ) = w 0 ∗ x 0 ( 2 ) + w 1 ∗ x 1 ( 2 ) + . . . + w n ∗ x n ( 2 ) − y ( 2 ) e^{(2)} = w_0*x_0^{(2)} + w_1*x_1^{(2)} + ... + w_n*x_n^{(2)} - y^{(2)} e(2)=w0x0(2)+w1x1(2)+...+wnxn(2)y(2) . . . ... ... e ( m ) = w 0 ∗ x 0 ( m ) + w 1 ∗ x 1 ( m ) + . . . + w n ∗ x n ( m ) − y ( m ) e^{(m)} = w_0*x_0^{(m)} + w_1*x_1^{(m)} + ... + w_n*x_n^{(m)} - y^{(m)} e(m)=w0x0(m)+w1x1(m)+...+wnxn(m)y(m)

用矩阵和向量表示为:
[ e ( 1 ) e ( 2 ) . . . e ( m ) ] = [ x 0 ( 1 ) x 1 ( 1 ) x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) x n ( 2 ) . . . . . . . . . x 0 ( m ) x 1 ( m ) x n ( m ) ] ⋅ [ w 0 w 1 . . . w n ] − [ y ( 1 ) y ( 2 ) . . . y ( m ) ] \begin{bmatrix} e^{(1)} \\ e^{(2)} \\ ... \\ e^{(m)} \end{bmatrix} = \begin{bmatrix} x_0^{(1)} & x_1^{(1)} & x_n^{(1)} \\ x_0^{(2)} & x_1^{(2)} & x_n^{(2)} \\ ... & ... & ...\\ x_0^{(m)} & x_1^{(m)} & x_n^{(m)} \end{bmatrix} \cdot \begin{bmatrix} w_0 \\ w_1 \\ ... \\ w_n \end{bmatrix} {-} \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ ... \\ y^{(m)} \end{bmatrix} e(1)e(2)...e(m) = x0(1)x0(2)...x0(m)x1(1)x1(2)...x1(m)xn(1)xn(2)...xn(m) w0w1...wn y(1)y(2)...y(m)
即:
e ⃗ = X w ⃗ − y ⃗ \vec{e} = X\vec{w} - \vec{y} e =Xw y
则误差平方和为:
e ⃗ 2 = e ⃗ T e ⃗ = ( X w ⃗ − y ⃗ ) T ( X w ⃗ − y ⃗ ) \vec{e}^{2} = \vec{e}^{T}\vec{e} = (X\vec{w} - \vec{y})^T(X\vec{w} - \vec{y}) e 2=e Te =(Xw y )T(Xw y )
展开得到:
e ⃗ T e ⃗ = w ⃗ T X T X w ⃗ − w ⃗ T X T y ⃗ − y ⃗ T X w ⃗ + y ⃗ T y ⃗ \vec{e}^{T}\vec{e} =\vec{w}^TX^TX\vec{w} - \vec{w}^TX^T\vec{y} - \vec{y}^TX\vec{w} + \vec{y}^T\vec{y} e Te =w TXTXw w TXTy y TXw +y Ty
其中, w ⃗ T X T y ⃗ \vec{w}^TX^T\vec{y} w TXTy y ⃗ T X w ⃗ \vec{y}^TX\vec{w} y TXw 的结果都是标量(实际上式中每项结果都是标量),对于标量有 α T = α \alpha^T = \alpha αT=α,所以 y ⃗ T X w ⃗ = ( y ⃗ T X w ⃗ ) T = w ⃗ T X T y ⃗ \vec{y}^TX\vec{w} = (\vec{y}^TX\vec{w})^T = \vec{w}^TX^T\vec{y} y TXw =(y TXw )T=w TXTy ,于是得到:
e ⃗ T e ⃗ = w ⃗ T X T X w ⃗ − 2 w ⃗ T X T y ⃗ + y ⃗ T y ⃗ \vec{e}^{T}\vec{e} =\vec{w}^TX^TX\vec{w} - 2\vec{w}^TX^T\vec{y} + \vec{y}^T\vec{y} e Te =w TXTXw 2w TXTy +y Ty

以上转换过程中用到了公式:
( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT

要求最小值,另各个偏导数为0,解方程组即可,即:
∂ e ⃗ T e ⃗ ∂ w 0 = 0 ; ∂ e ⃗ T e ⃗ ∂ w 1 = 0 ; . . . ; ∂ e ⃗ T e ⃗ ∂ w n = 0 ; \frac{\partial \vec{e}^{T}\vec{e}}{\partial w_0} = 0;\frac{\partial \vec{e}^{T}\vec{e}}{\partial w_1} = 0;...;\frac{\partial \vec{e}^{T}\vec{e}}{\partial w_n} = 0; w0e Te =0;w1e Te =0;...;wne Te =0;
为了表示方便,我们用「梯度」来代替偏导数。梯度就是各个偏导数组成的向量:
∇ w ⃗ e ⃗ T e ⃗ = ∂ e ⃗ T e ⃗ ∂ w ⃗ = [ ∂ e ⃗ T e ⃗ ∂ w 0 ∂ e ⃗ T e ⃗ ∂ w 1 . . . ∂ e ⃗ T e ⃗ ∂ w n ] \nabla_{\vec{w}}\vec{e}^T\vec{e} = \frac{\partial \vec{e}^{T}\vec{e}}{\partial \vec{w}} = \begin{bmatrix} \frac{\partial \vec{e}^{T}\vec{e}}{\partial w_0} \\ \frac{\partial \vec{e}^{T}\vec{e}}{\partial w_1} \\ ... \\ \frac{\partial \vec{e}^{T}\vec{e}}{\partial w_n} \end{bmatrix} w e Te =w e Te = w0e Te w1e Te ...wne Te

让各个偏导数为0,其实就是让梯度为0。

由于 x ⃗ T A x ⃗ \vec{x}^TA\vec{x} x TAx x ⃗ \vec{x} x 求导为 ( A + A T ) x ⃗ (A+A^T) \vec{x} (A+AT)x ,所以第一项 w ⃗ T X T X w ⃗ \vec{w}^TX^TX\vec{w} w TXTXw w ⃗ \vec{w} w 求导为 ( X T X + ( X T X ) T ) w ⃗ (X^TX + (X^TX)^T)\vec{w} (XTX+(XTX)T)w ,即 2 X T X w ⃗ 2X^TX\vec{w} 2XTXw ;对于第二项 2 w ⃗ T X T y ⃗ 2\vec{w}^TX^T\vec{y} 2w TXTy w ⃗ \vec{w} w 求导为 2 X T y ⃗ 2X^T\vec{y} 2XTy

合并整理得:
∇ w ⃗ e ⃗ T e ⃗ = ∂ e ⃗ T e ⃗ ∂ w ⃗ = 2 X T X w ⃗ − 2 X T y ⃗ \nabla_{\vec{w}}\vec{e}^T\vec{e} = \frac{\partial \vec{e}^{T}\vec{e}}{\partial \vec{w}} = 2X^TX\vec{w} - 2X^T\vec{y} w e Te =w e Te =2XTXw 2XTy

另梯度为0,得到:
2 X T X w ⃗ − 2 X T y ⃗ = 0 2X^TX\vec{w} - 2X^T\vec{y} = 0 2XTXw 2XTy =0

计算 w ⃗ \vec{w} w 为:
w ⃗ = ( X T X ) − 1 X T y ⃗ \vec{w} = (X^TX)^{-1}X^T\vec{y} w =(XTX)1XTy

这样,就可以直接用解方程的方式来计算 w ⃗ \vec{w} w 了。

梯度下降求解

理论上只要 X T X X^TX XTX可逆,就能用解方程的方式求解 w ⃗ \vec{w} w 了,但如果 X T X X^TX XTX是个非常大的矩阵,甚至大到无法把一个矩阵放入内存,求逆矩阵就没有那么容易了,这时就需要使用「梯度下降法」来求近似解了。

大体思想是,任意选择一个 w ⃗ \vec{w} w 的初始值,计算此时的梯度(前边已经提到了梯度,即偏导数组成的向量),使 w ⃗ \vec{w} w 沿着梯度方向前进一小步 α \alpha α ,重复以上步骤,如果梯度小于某个临界值 e e e,则终止。

参考:
[http://www.52nlp.cn/正态分布的前世今生四]
[最小二乘法的历史回顾与现状]

| 文章出处:https://www.jianshu.com/p/74096ef5a5fb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值