大家好,又见面了,我是你们的朋友全栈君。
1、多项式曲线拟合之最小二乘法
1.1 问题来源
1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的已有观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。只有时年24岁的高斯所计算的谷神星的轨道,被奥地利天文学家海因里希·奥尔伯斯的观测所证实,使天文界从此可以预测到谷神星的精确位置。同样的方法也产生了哈雷彗星等很多天文学成果。高斯使用的方法就是最小二乘法,该方法发表于1809年他的著作《天体运动论》中。
1.2 数学本质
采用最小二乘法进行曲线拟合的本质是通过样本集构造范德蒙德矩阵,将一元n次多项式非线性回归问题转化为n元一次线性回归问题。
给定一组数据点
,其中
。求近似曲线
,使其与
的偏差最小。
常见的曲线拟合方法:
- 使偏差绝对值之和最小

- 使最大的偏差绝对值最小

- 使偏差平方和最小

其中按照偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
1.3 问题定义

1.4 问题特性
- 已是一种成熟的工业技术
- 已有可靠和高效的算法解决此类问题
- 存在可解析解:

1.5 数学推导
- 设定拟合多项式为:

- 偏差平方和表示如下:
![R^2 = \sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]^2](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
- 对右侧等式求
偏导数,以求的符合条件的
值:
对
求偏导:
![-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)] = 0](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
对
求偏导:
![-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i} = 0](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
对
求偏导:
![-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i}^2 = 0](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)

对
求偏导:
![-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i}^k = 0](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
- 等式化简




- 矩阵表示
![\left[ \begin{array}{cccc} n & \sum_{i=1}^n{x_i} & \cdots & \sum_{i=1}^n{x_i}^k\\ \sum_{i=1}^n{x_i} & \sum_{i=1}^n{x_i}^2 & \cdots & \sum_{i=1}^n{x_i}^{k+1}\\ \vdots & \vdots & \ddots & \vdots\\ \sum_{i=1}^n{x_i}^k & \sum_{i=1}^n{x_i}^{k+1} & \cdots & \sum_{i=1}^n{x_i}^{k+k}\\ \end{array} \right] \left[ \begin{array}{cccc} a_0\\ a_1\\ \vdots\\ a_k\\ \end{array} \right] = \left[ \begin{array}{cccc} \sum_{i=1}^n{y_i}\\ \sum_{i=1}^n{x_i}{y_i}\\ \vdots\\ \sum_{i=1}^n{x_i}^k{y_i}\\ \end{array} \right]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
- 矩阵简化
![X= \left[ \begin{array}{cccc} 1 & x_1 & x_1^2 & \cdots x_1^k \\ 1 & x_2 & x_2^2 & \cdots x_2^k \\ \cdots & \cdots & \cdots & \cdots \\ 1 & x_n & x_n^2 & \cdots x_n^k \\ \end{array} \right] \qquad Y= \left[ \begin{array}{cccc} y_1 \\ y_2 \\ \cdots \\ y_n \\ \end{array} \right]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
上述矩阵可简化为:
。
- 结果

矩阵a中对应的项则是拟合曲线的各项系数。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145554.html原文链接:https://javaforall.net
