开启辅助访问
 找回密码
 立即注册

线性拟合1-最小二乘

xhpknife 回答数8 浏览数575
从简单的二维线性拟合入手。本文只解决一台问题:在二维平面中找到一条最合适的线,来拟合所有给出的点。因为这个问题的复杂程度还不是很大,所以能够通过数学的方法直接求出解析解的,本文主要介绍最小二乘算法。
最小二乘法介绍

最小二乘法是最常用的线性回归解法,它通过最小化误差的平方和来寻找数据的最佳函数匹配 。最小二乘法的目的是找到因变量y与自变量 x 之间的函数关系 y=f(x) 。对于本文讨论的为题,可以将点的横坐标看做自变量,将纵坐标看做因变量。然后使用一般最小二乘法找到自变量和因变量之间的函数关系,由这个函数关系可以确定一条直线,这就是拟合出来的直线。最小二乘法的目标是使误差的平方和最小。
简单说一下最小二乘法的历史。1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥伯斯根据高斯计算出来的轨道重新发现了谷神星 。
所以最小二乘法的发明是为了预测行星的轨道数据,这也是最小二乘的一台典型的应用。
目标函数

假设给出的若干点的坐标为: (x_1,y_1),(x_2,y_2) \cdots (x_n,y_n)  。定义纵坐标 y 的误差 \epsilon_i 为真值与观测值之差,定义 y 的残差 \hat{\epsilon}_i 为估计值与观测值的差,公式如下:
\epsilon_i=y_i-y_i^{\star}   
\hat{\epsilon}_i=y_i-\hat{y}_i  
一般最小二乘法的目的是使拟合误差(残差和)最小,也就是 \min \sum \hat{\epsilon}_i , 所以目标函数的形式如下:
\begin{aligned} \bm{J}_1&=\dfrac{1}{2}\sum_{i=1}^{n}\hat{\epsilon}i^2 =\dfrac{1}{2}\sum_{i=1}^{n}(\hat{y}_i-y_i)^2 =\dfrac{1}{2}(\hat{\bm{y}}-\bm{y})^T(\hat{\bm{y}}-\bm{y}) \end{aligned}  
其中 \hat{\bm{y}}=[\hat{y_1},\hat{y_2},\cdots,\hat{y_n}]^T , \bm{y}=[y_1,y_2,\cdots,y_n]^T ,这里添加的 \dfrac{1}{2} 只是为了省事计算。
所以最小二乘法就是找到一组直线的参数,使得目标函数最小。
求解推导

直线方程使用斜截式直线方程: y=kx+c ,所以要求解的直线参数为斜率 k 和截距 c 。所以有: \hat{y_i}=\hat{k}x_i+\hat{c} 。写成矩阵形式为:
\hat{\bm{y}}=\bm{X}\bm{\theta}
其中, \bm{X}= \left[ \begin{matrix} x_1 & 1 \\ x_2 & 1 \\ \vdots & \vdots \\ x_n & 1 \end{matrix} \right]  , \bm{\theta}= \left[ \begin{matrix} \hat{k} \\ \hat{c} \end{matrix} \right]  ,将其带入目标函数 \bm{J}_1 得:
\bm{J}_1=\dfrac{1}{2}(\bm{X}\bm{\theta}-\bm{y})^T(\bm{X}\bm{\theta}-\bm{y})  
目标函数对 \theta 求导,并令其等于零,得:
\dfrac{\partial}{\partial\bm{\theta}} \bm{J}_1 = \bm{X}^T (\bm{X}\bm{\theta} -\bm{y})=0
解得:
\bm{\theta}=(\bm{X}^T\bm{X})^{-1}\bm{X}^T\bm{y}
即:
\left[ \begin{matrix} \hat{k} \ \hat{c} \end{matrix} \right]=(\bm{X}^T\bm{X})^{-1}\bm{X}^T\bm{y}
几何意义

从目标函数上看,一般最小二乘法的直观上的理解是:在二维平面上找到一条直线,使得每个点到直线的竖直距离之和最小。也就是说,一般最小二乘优化的是竖直距离,即纵坐标 y 的误差。

最小二乘误差描述

上图中红色线段即为每个点的竖直误差,一般最小二乘法就是找到这样一条直线,使得红色线段的和最小。
缺点

对异常值很敏感

一般最小二乘法对异常值很敏感,只要一台奇怪的异常值就可能会改变最后的结果。
从其代数解法的最后结果来看,一般最小二乘法仅使用了点的均值信息和方差信息,所以仅对存在普通噪声的情况下适用,当存在异常值时,一般最小二乘法就无能为力了,此时需要其他的方法来解决。
没有考虑自变量的误差

一般最小二乘法仅考虑了因变量 y 存在误差的情况,没有考虑自变量 x 的误差,所以其应用条件有一定的限制。只有当自变量不存在偏差,或者自变量的偏差在一定范围内可以忽略不计时,才比较适用。当自变量和因变量的测量都存在偏差时,一般最小二乘法就不太合适了。
对于本文所讨论的问题:用一条直线拟合平面上的若干点。题目并没有提到这些点的来源,当这些点的横坐标的测量比较精确时,可以使用考虑使用一般最小二乘法。但是当这些点的横纵坐标都存在误差,而且都不能忽略时,一般最小二乘法就不太适用了,这时就必须考虑其他的方法了。
存在不可求解的情况

当要拟合的直线是垂直或接近垂直于 x 轴的时候,就无法求解了。垂直于 x 轴的直线,斜率无穷大,无法用斜截式直线方程表示。
从可解性的角度考虑,当直线垂直于 x 轴的时候,矩阵 \bm{X}^T\bm{X} 是不可逆的,所以无法求出其最小二乘解。当直线接近垂直于 x 轴的时候,矩阵 \bm{X}^T\bm{X} 接近奇异,如果直接求逆,也会导致很大的偏差。
所以当拟合的直线垂直或者接近垂直于 x 轴的时候,是不可以用一般最小二乘法进行直线拟合的。
使用道具 举报
| 来自云南
随风飘荡 | 来自浙江
[但是当这些点的横纵坐标都存在误差,而且都不能忽略时,一般最小二乘法就不太适用了,这时就必须考虑其他的方法了]   这时候有什么方法选择?
回复
使用道具 举报
咖啡加糖糖 | 来自河北
缺点部分讲得不错,目前有一种利用仿射坐标拟合的方法,可以避免这几个问题。
回复
使用道具 举报
zhh_2688 | 来自北京
不可逆的时候可以用广义逆,也是最小二乘意义下的最优解
回复
使用道具 举报
netyxu | 未知
看后一篇,正交回归能解决横坐标有误差的问题
回复
使用道具 举报
tcyjy | 未知
"从其代数解法的最后结果来看,一般最小二乘法仅使用了点的均值信息和方差信息,所以仅对存在普通噪声的情况下适用,当存在异常值时,一般最小二乘法就无能为力了,此时需要其他的方法来解决",请问最常用的有哪些方法?加权最小二乘法吗?
回复
使用道具 举报
titty | 来自北京
也可以参考下卡尔曼滤波
回复
使用道具 举报
hfzmjz | 未知
公示中的T是什么意思呀[蹲]?
回复
使用道具 举报
水晴 | 来自北京
讲的很通透
回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影