线性回归的前世今生

简介

线性回归,可谓是机器学习领域的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_2 = 10.2
y_3 = 9.9
y_4 = 9.8
y_5 = 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的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
求得:
y = (y_1 + y_2 + y_3 + y_4 + y_5) / 5
y恰好是5次测量的平均值。这就回答了,为什么多次测量取平均值就能减少误差。

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

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

他用了概率的方法来解答此问题。假设真值为y,那么每次测量的误差为:e_i = y - y_i,误差的概率密度函数为:p(e_i)
那么,5次测量的联合概率为:
L(y) = p(e_1)*p(e_2)*p(e_3)*p(e_4)*p(e_5)
即:
L(y)=p(y-y_1)*p(y-y_2)*p(y-y_3)*p(y-y_4)*p(y-y_5)
这是关于y的似然函数。

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

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

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

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

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

答案是可以的。

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

例如,有一些(x,y)对,发现yx大致分布在一条直线上,如下图:

线性回归

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

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

如何求解

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

很明显,方程组有两个未知数:wb,至少需要两对不同的(x_i,y_i),方程组才有解。

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

同样可以猜测,yx存在线性关系:
\hat{y} = w_1*x_1 + ... + w_n*x_n + b

优化目标为:
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

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

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

重新整理估计函数:
\hat{y} = w_0*x_0 + w_1*x_1 + ... + w_n*x_n
其中,w_0是原来的bx_0恒为1。

则m个观察样本为:

\hat{y}^{(1)} = w_0*x_0^{(1)} + w_1*x_1^{(1)} + ... + w_n*x_n^{(1)}
\hat{y}^{(2)} = w_0*x_0^{(2)} + w_1*x_1^{(2)} + ... + w_n*x_n^{(2)}
...
\hat{y}^{(m)} = w_0*x_0^{(m)} + w_1*x_1^{(m)} + ... + w_n*x_n^{(m)}

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

每个样本的误差表示为e^{(m)},则有:

e^{(1)} = w_0*x_0^{(1)} + w_1*x_1^{(1)} + ... + w_n*x_n^{(1)} - y^{(1)}
e^{(2)} = w_0*x_0^{(2)} + w_1*x_1^{(2)} + ... + w_n*x_n^{(2)} - y^{(2)}
...
e^{(m)} = w_0*x_0^{(m)} + w_1*x_1^{(m)} + ... + w_n*x_n^{(m)} - 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}
即:
\vec{e} = X\vec{w} - \vec{y}

则误差平方和为:
\vec{e}^{2} = \vec{e}^{T}\vec{e} = (X\vec{w} - \vec{y})^T(X\vec{w} - \vec{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}

其中,\vec{w}^TX^T\vec{y}\vec{y}^TX\vec{w}的结果都是标量(实际上式中每项结果都是标量),对于标量有\alpha^T = \alpha,所以 \vec{y}^TX\vec{w} = (\vec{y}^TX\vec{w})^T = \vec{w}^TX^T\vec{y},于是得到:
\vec{e}^{T}\vec{e} =\vec{w}^TX^TX\vec{w} - 2\vec{w}^TX^T\vec{y} + \vec{y}^T\vec{y}

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

要求最小值,另各个偏导数为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;

为了表示方便,我们用「梯度」来代替偏导数。梯度就是各个偏导数组成的向量:
\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}

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

由于 \vec{x}^TA\vec{x}\vec{x} 求导为 (A+A^T) \vec{x},所以第一项\vec{w}^TX^TX\vec{w}\vec{w} 求导为(X^TX + (X^TX)^T)\vec{w},即 2X^TX\vec{w};对于第二项 2\vec{w}^TX^T\vec{y}\vec{w} 求导为 2X^T\vec{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}

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

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

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

梯度下降求解

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

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

参考:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容