easy-algorithm-interview-an.../math/最小二乘法来龙去脉.md

8.4 KiB
Raw Permalink Blame History

最小二乘是每个上过大学的同学都接触过的概念与知识点(当然可能纯文科的同学没接触过,但是一般纯文科的同学也不会看这篇文章好像)。最小二乘理论其实很简单用途也很广泛。但是每次说到最小二乘总感觉差了点什么似的好像对于最小二乘的前世今生没有一个特别详细与系统的了解。so本博主趁着周末的时间赶紧给详细整理整理力争把最小二乘是个什么鬼做一个特别详细的说明争取让学英语学中文学历史学画画唱歌的同学都能看明白。

1.最小二乘的背景

这种东东的来源比较容易找到而且比较靠谱的途径自然是wiki百科了以下部分的内容来自wiki百科
1801年意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后由于谷神星运行至太阳背后使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥伯斯根据高斯计算出来的轨道重新发现了谷神星。
高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中而法国科学家勒让德于1806年独立发现“最小二乘法”但因不为世人所知而默默无闻。两人曾为谁最早创立最小二乘法原理发生争执。1829年高斯提供了最小二乘法的优化效果强于其他方法的证明见高斯-马尔可夫定理。

2.举个最简单的例子理解最小二乘

现在大家都越来越重视自己的身体健康。现代人最常见的亚健康问题就是肥胖,本博主身体棒棒哒,唯一困扰本博主的健康问题就是超重。(好吧,承认自己是个死胖子就完了)
假设身高是变量X体重是变量Y我们都知道身高与体重有比较直接的关系。生活经验告诉我们一般身高比较高的人体重也会比较大。但是这只是我们直观的感受只是很粗略的定性的分析。在数学世界里我们大部分时候需要进行严格的定量计算能不能根据一个人的身高通过一个式子就能计算出他或者她的标准体重
接下来,我们肯定会找一堆人进行采用(请允许我把各位当成一个样本)。采样的数据,自然就是各位的身高与体重。(为了方便计算与说明,请允许我只对男生采样)经过采样以后,我们肯定会得到一堆数据(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)其中x是身高y是体重。
得到这堆数据以后,接下来肯定是要处理这堆数据了。生活常识告诉我们:身高与体重是一个近似的线性关系,用最简单的数学语言来描述就是y = \beta_0+\beta_1x。于是,接下来的任务就变成了:怎么根据我们现在得到的采样数据,求出这个\beta_0\beta_1呢?这个时候,就轮到最小二乘法发飙显示威力了。

3.最小二乘的cost function

在讲最小二乘的详情之前首先明确两点1.我们假设在测量系统中不存在有系统误差只存在有纯偶然误差。比如体重计或者身高计本身有问题测量出来的数据都偏大或者都偏小这种误差是绝对不存在的。或者说这不能叫误差这叫错误2.误差是符合正态分布的因此最后误差的均值为0这一点很重要)
明确了上面两点以后,重点来了:为了计算\beta_0,\beta_1的值,我们采取如下规则:\beta_0,\beta_1应该使计算出来的函数曲线与观察值的差的平方和最小。用数学公式描述就是:
Q =min \sum_i ^n (y_{ie} - y_i)^2
其中,y_{ie}表示根据y=\beta_0 + \beta_1x估算出来的值,y_i是观察得到的真实值。

可能有很多同学就会不服了,凭什么要用差的平方和最小勒?用差的绝对值不行么?不要骗我们好不好?
本博主不敢骗大家,为了让大家相信,特意找了一种本博主认为比较靠谱的解释:
我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测,所有纵坐标偏离 f(Xi) 的那些数据点都含有噪音,是噪音使得它们偏离了完美的一条直线,一个合理的假设就是偏离路线越远的概率越小,具体小多少,可以用一个正态分布曲线来模拟,这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心,实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP[-(ΔYi)^2]。EXP(..) 代表以常数 e 为底的多少次方)。
所以我们在前面的两点里提到,假设误差的分布要为一个正态分布,原因就在这里了。
另外说一点我自己的理解从数学处理的角度来说绝对值的数学处理过程比平方和的处理要复杂很多。搞过机器学习的同学都知道L1正则就是绝对值的方式而L2正则是平方和的形式。L1能产生稀疏的特征这对大规模的机器学习灰常灰常重要。但是L1的求解过程实在是太过蛋疼。所以即使L1能产生稀疏特征不到万不得已我们也还是宁可用L2正则因为L2正则计算起来方便得多。。。

4.最小二乘法的求解

明确了前面的cost function以后后面的优化求解过程反倒变得so easy了。
样本的回归模型很容易得出:
Q = \sum_i^n(y_i-\beta_0-\beta_1x)^2
现在需要确定\beta_0\beta_1使cost function最小。学过高数的同志们都清楚求导就OK。对于这种形式的函数求导so easyso happy…

\frac{\partial Q}{\partial \beta_0} = 2\sum_i^n(y_i-\beta_0-\beta_1x_i)(-1) = 0 \\\\ \frac{\partial Q}{\partial \beta_1} = 2\sum_i^n(y_i-\beta_0-\beta_1x_i)(-x_i) = 0

将这两个方程稍微整理一下,使用克莱姆法则,很容易求解得出:
\beta_0 = \frac{\sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i }{n \sum x_i^2 - (\sum x_i)^2} \\\\ \beta_1 = \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2}

因为求和符号比较多,省略了上标与下标。
根据这个公式,就可以求解出相应的参数。
对应上面的身高体重关系的例子,我们只需要将采样得到的数据,一一代入即可求解。

5.矩阵表达形式

如果我们推广到更一般的情况,假如有更多的模型变量x^1,x^2,\cdots,x^m(注意:x_1是指 一个样本,x^1是指样本里的一个模型相关的变量),可以用线性函数表示如下:
y(x^1,\cdots,x^m;\beta_0,\cdots,\beta_m) = \beta_0+\beta_1x^1 + \cdots + \beta_m x^m
对于n个样本来说可以用如下线性方程组表示
\beta_0 + \beta_1 x_1 ^1 + \cdots + \beta_j x_1 ^j + \cdots + \beta_m x_1^m = y_1 \\\\ \beta_0 + \beta_1 x_2 ^1 + \cdots + \beta_j x_2 ^j + \cdots + \beta_m x_2^m = y_2 \\\\ \cdots \\\\ \beta_0 + \beta_1 x_i ^1 + \cdots + \beta_j x_i ^j + \cdots + \beta_m x_i^m = y_i \\\\ \cdots \\\\ \beta_0 + \beta_1 x_n ^1 + \cdots + \beta_j x_n ^j + \cdots + \beta_m x_n^m = y_n

如果将样本矩阵x_i^h记为矩阵A,将参数矩阵记为向量\beta真实值记为向量Y上述线性方程组可以表示为

\left [ \begin{matrix} 1 & x_1^{(1)} & \cdots & x_1^{(m)} \\\\ 1 & x_2^{(1)} & \cdots & x_2^{(m)} \\\\ \cdots & \cdots & \cdots & \cdots \\\\ 1 & x_n^{(1)} & \cdots & x_n^{(m)} \end{matrix} \right ] \cdot \left [ \begin{matrix} \beta_0 \\\\ \beta_1 \\\\ \cdots \\\\ \beta_m \end{matrix} \right ] = \left [ \begin{matrix} y_1 \\\\ y_2 \\\\ \cdots \\\\ y_n \end{matrix} \right ]
A \beta = Y
对于最小二乘来说,最终的矩阵表达形式可以表示为:
min||A\beta - Y||_2
最后的最优解为:
\beta = (A^TA)^{-1}A^TY

6.注意事项

经典的最小二乘法使用起来够简单粗暴计算过程也不复杂。但是一个致命的问题就是其对噪声的容忍度很低。试想一下如果前面我们得到的总采样数据为100个但是里面有几个大胖子这几个大胖子就相当于不是普通人的身高-体重系数,他们就是噪声了。如果不采取一些手段对这几个噪声样本进行处理,最后计算出来的身高-体重系数肯定会比正常值要偏大。
对于噪声的处理,比如有加权最小二乘等方法,后续有时间跟大家再讲讲。