[科学计算]曲线拟合——最小二乘法

🚀宁可十年不将军,不可一日不拱卒!

问题:已知 x 1 , x 2 , ⋯   , x m ; y 1 , y 2 , ⋯   , y m . x_1,x_2,\cdots,x_m;y_1,y_2,\cdots,y_m. x1,x2,,xm;y1,y2,,ym. 求一个简单易算的近似函数 P ( x ) ≈ f ( x ) P(x) \approx f(x) P(x)f(x) 。 但是此时 m m m 很大,而且 y i ≠ f ( x i ) y_i \neq f(x_i) yi=f(xi) ,因此这个时候数值插值就无可奈何了,没有必要再令 P ( x i ) = y i . i = 1 , 2 , ⋯   , m . P(x_i)=y_i.i=1,2,\cdots,m. P(xi)=yi.i=1,2,,m. 了,否则会造成过拟合现象,而偏离真实 f ( x ) f(x) f(x) 。我们的目标仅仅是 P ( x i ) − y i P(x_i)-y_i P(xi)yi 总体上尽可能的小。

常见的作法有:

  • 使 max ⁡ 0 ≤ i ≤ m ∣ P ( x i ) − y i ∣ \displaystyle \max_{0\le i\le m} |P(x_i)-y_i| 0immaxP(xi)yi 最小,这种方法太复杂,究竟为什么太复杂呢?需要进一步考虑。
  • 使 ∑ i = 1 m ∣ P ( x i ) − y i ∣ \displaystyle \sum_{i=1}^m |P(x_i)-y_i| i=1mP(xi)yi 最小,不可导,求解困难。
  • 使 ∑ i = 1 m ∣ P ( x i ) − y i ∣ 2 \displaystyle \sum_{i=1}^m |P(x_i)-y_i|^2 i=1mP(xi)yi2 最小,此时对参数的估计是极大似然估计。详细参照另一篇文章

最小二乘法拟合多项式

确定多项式的格式为 P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n P(x)=a_0+a_1x+a_2x^2+\cdots+a_nx^n P(x)=a0+a1x+a2x2++anxn ,由此多项式产生的一组观测值为 ( x i , y i ) ( i = 1 , 2 , ⋯   , m ) (x_i,y_i)(i=1,2,\cdots,m) (xi,yi)(i=1,2,,m) ,注意观测值是有一定的误差的。我们需要通过一系列的操作,学习到参数 a 0 , a 1 , ⋯   , a n a_0,a_1,\cdots,a_n a0,a1,,an 。经过分析,我们选择了使 ψ ( a 0 , a 1 , ⋯   , a n ) = ∑ i = 1 m ∣ P ( x i ) − y i ∣ 2 \psi(a_0,a_1,\cdots,a_n) = \displaystyle \sum_{i=1}^m |P(x_i)-y_i|^2 ψ(a0,a1,,an)=i=1mP(xi)yi2 达到最小值作为评估标准, ψ \psi ψ 最小时的参数 a 0 , a 1 , ⋯   , a n a_0,a_1,\cdots,a_n a0,a1,,an 就是我们待求的。有一个大的前提是 n < < m n<<m n<<m
ψ ( a 0 , a 1 , ⋯   , a n ) = ∑ i = 1 m ∣ a 0 + a 1 x i + a 2 x i 2 + ⋯ + a n x i n − y i ∣ 2 \begin{aligned} \psi(a_0,a_1,\cdots,a_n) = \displaystyle \sum_{i=1}^m |a_0+a_1x_i+a_2x_i^2+\cdots+a_nx_i^n-y_i|^2 \end{aligned} ψ(a0,a1,,an)=i=1ma0+a1xi+a2xi2++anxinyi2
从上式可知, ψ \psi ψ 是一个关于 a 0 , a 1 , ⋯   , a n a_0,a_1,\cdots,a_n a0,a1,,an 的多元函数。根据费马定理,由于 ψ \psi ψ 可导,因此在极值点处的必要条件是 ∂ ψ ∂ a i = 0 , ( i = 1 , 2 , ⋯   , n ) \frac{\partial \psi}{\partial a_i} = 0,(i=1,2,\cdots,n) aiψ=0,(i=1,2,,n) 。这个时候大家是不是看出来选择评估函数时可导的重要性了!

接下来其实就是一个对公式进行整理简化的过程。下式中 k = 1 , 2 , ⋯   , n k = 1,2,\cdots,n k=1,2,,n
∂ ψ ∂ a k = ∂ ∂ a k ∑ i = 1 m ∣ a 0 + a 1 x i + a 2 x i 2 + ⋯ + a n x i n − y i ∣ 2 = ∑ i = 1 m 2 ( a 0 + a 1 x i + a 2 x i 2 + ⋯ + a n x i n − y i ∣ 2 x i k = 2 ∑ i = 1 m ( ∑ j = 0 n a j x i j − y i ) x i k = 2 [ ∑ i = 1 m ∑ j = 0 n a j x i j + k − ∑ i = 1 m y i x i k ] = 2 [ ∑ j = 0 n a j ∑ i = 1 m x i j + k − ∑ i = 1 m y i x i k ] \begin{aligned} \frac{\partial \psi}{\partial a_k} & = \frac{\partial }{\partial a_k}\displaystyle \sum_{i=1}^m |a_0+a_1x_i+a_2x_i^2+\cdots+a_nx_i^n-y_i|^2 \\ & = \displaystyle \sum_{i=1}^m 2(a_0+a_1x_i+a_2x_i^2+\cdots+a_nx_i^n-y_i|^2 x_i^k \\ & = 2 \displaystyle \sum_{i=1}^m (\displaystyle \sum_{j=0}^n a_jx_i^j-y_i)x_i^k \\ & = 2 [ \displaystyle \sum_{i=1}^m \displaystyle \sum_{j=0}^n a_j x_i^{j+k}-\displaystyle \sum_{i=1}^m y_i x_i^k] \\ & = 2[ \displaystyle \sum_{j=0}^n a_j \displaystyle \sum_{i=1}^m x_i^{j+k} - \displaystyle \sum_{i=1}^m y_i x_i^k] \end{aligned} akψ=aki=1ma0+a1xi+a2xi2++anxinyi2=i=1m2(a0+a1xi+a2xi2++anxinyi2xik=2i=1m(j=0najxijyi)xik=2[i=1mj=0najxij+ki=1myixik]=2[j=0naji=1mxij+ki=1myixik]
很关键的一步替换来了:记 b k = ∑ i = 1 m x i k , c k = ∑ i = 1 m y i x i k b_k = \displaystyle \sum_{i=1}^m x_i^{k} ,c_k = \displaystyle \sum_{i=1}^m y_i x_i^k bk=i=1mxik,ck=i=1myixik , 因此
∂ ψ ∂ a k = 2 [ ∑ j = 0 n a j b j + k − c k ] \begin{aligned} \frac{\partial \psi}{\partial a_k} & = 2[ \displaystyle \sum_{j=0}^n a_j b_{j+k} - c_k] \end{aligned} akψ=2[j=0najbj+kck]
令上式为 0 0 0 ,可得出
∑ j = 0 n a j b j + k = c k \begin{aligned} \displaystyle \sum_{j=0}^n a_j b_{j+k} = c_k \end{aligned} j=0najbj+k=ck
n + 1 n+1 n+1 个如上的等式全列出来构成一个线性方程组(称为法方程组)
{ ∑ j = 0 n a j b j + 0 = c 0 ∑ j = 0 n a j b j + 1 = c 1 ⋮ ∑ j = 0 n a j b j + n = c n ⇒ [ b 0 b 1 ⋯ b n b 1 b 2 ⋯ b n + 1 ⋮ ⋮ ⋱ ⋮ b n b n + 1 ⋯ b 2 n ] [ a 0 a 1 ⋮ a n ] = [ c 0 c 1 ⋮ c n ] \left\{ \begin{aligned} \displaystyle \sum_{j=0}^n a_j b_{j+0} & = c_0 \\ \displaystyle \sum_{j=0}^n a_j b_{j+1} & = c_1 \\ \vdots\\ \displaystyle \sum_{j=0}^n a_j b_{j+n} &= c_n \end{aligned} \right. \Rightarrow \begin{bmatrix} b_0 & b_1 & \cdots & b_n \\ b_1 & b_2 & \cdots & b_{n+1} \\ \vdots & \vdots & \ddots & \vdots \\ b_n & b_{n+1} & \cdots & b_{2n} \end{bmatrix} \begin{bmatrix} a_0\\ a_1\\ \vdots\\ a_n \end{bmatrix} = \begin{bmatrix} c_0\\ c_1\\ \vdots\\ c_n \end{bmatrix} j=0najbj+0j=0najbj+1j=0najbj+n=c0=c1=cnb0b1bnb1b2bn+1bnbn+1b2na0a1an=c0c1cn
那么这个法方程组是否存在唯一解呢?它的解仅是极值点,那么这个极值点是否又是最小值点呢?这两个问题是有严格的定理证明的。

定 理 : 最 小 二 乘 法 拟 合 多 项 式 存 在 唯 一 定理:最小二乘法拟合多项式存在唯一

定 理 : 最 小 二 乘 拟 合 多 项 式 的 法 方 程 组 的 解 确 是 ψ 的 最 小 点 。 定理:最小二乘拟合多项式的法方程组的解确是\psi的最小点。 ψ

最小二乘法的一般形式

现实中,需要被拟合的函数形式各样,有的一些确实可以通过变换转换为多项式的拟合,但大多数情况下这种变换并不容易,因此,为了不失一般性,我们接下来讨论最小二乘法的一般形式。

若已知被拟合函数的形式为 S ( x ) = a 0 ψ 0 ( x ) + a 1 ψ 1 ( x ) + ⋯ + a n ψ n ( x ) ( n < < m ) S(x)=a_0\psi_0(x)+a_1\psi_1(x)+\cdots+a_n\psi_n(x)(n<<m) S(x)=a0ψ0(x)+a1ψ1(x)++anψn(x)(n<<m) 。这里 ψ i ( x ) ( i = 1 , 2 , ⋯   , n ) \psi_i(x)(i=1,2,\cdots,n) ψi(x)(i=1,2,,n) 已知, a i ( i = 1 , 2 , ⋯   , n ) a_i(i=1,2,\cdots,n) ai(i=1,2,,n) 参数未知。

用最小二乘法拟合曲线,就是在众多的 S ( x ) S(x) S(x) 中,求得一函数 S ∗ ( x ) S^*(x) S(x) 使得 ∣ ∣ δ ∣ ∣ 2 2 ||\delta||^2_2 δ22 最小。
∣ ∣ δ ∣ ∣ 2 2 = ∑ i = 0 m w i δ i 2 = ∑ i = 0 m w ( x i ) ( S ( x i ) − y i ) 2 \begin{aligned} ||\delta||^2_2 = \displaystyle \sum_{i=0}^m w_i\delta_i^2 = \displaystyle \sum_{i=0}^m w(x_i)(S(x_i)-y_i)^2 \end{aligned} δ22=i=0mwiδi2=i=0mw(xi)(S(xi)yi)2
其中 w ( x i ) > 0 w(x_i)>0 w(xi)>0 是不同的点 ( x i , y i ) (x_i,y_i) (xi,yi) 的比重, y i = f ( x i ) y_i=f(x_i) yi=f(xi) 是观测值, 其中 f ( x ) = S ( x ) + ε ( x ) f(x) = S(x)+\varepsilon(x) f(x)=S(x)+ε(x)

上述的问题可以转化为一个多元函数 I ( a 0 , a 1 , ⋯   , a n ) I(a_0,a_1,\cdots,a_n) I(a0,a1,,an) 求极小值 ( a 0 ∗ , a 1 ∗ , ⋯   , a n ∗ ) (a_0^*,a_1^*,\cdots,a_n^*) (a0,a1,,an) 的问题。
I ( a 0 , a 1 , ⋯   , a n ) = ∑ i = 0 m w ( x i ) [ ∑ j = 0 n a j ψ j ( x i ) − f ( x i ) ] 2 \begin{aligned} I(a_0,a_1,\cdots,a_n) = \displaystyle \sum_{i=0}^m w(x_i)[\displaystyle \sum_{j=0}^n a_j\psi_j(x_i) -f(x_i)]^2 \end{aligned} I(a0,a1,,an)=i=0mw(xi)[j=0najψj(xi)f(xi)]2
由求多元函数极值的必要条件,有 k = 0 , 1 , ⋯   , n k=0,1,\cdots,n k=0,1,,n
∂ I ∂ a k = 2 ∑ i = 0 m w ( x i ) [ ∑ j = 0 n a j ψ j ( x i ) − f ( x i ) ] ψ k ( x i ) = 2 [ ∑ i = 0 m w ( x i ) ∑ j = 0 n a j ψ j ( x i ) ψ k ( x i ) − ∑ i = 0 m w ( x i ) f ( x i ) ψ k ( x i ) ] = 2 [ ∑ j = 0 n a j ∑ i = 0 m w ( x i ) ψ j ( x i ) ψ k ( x i ) − ∑ i = 0 m w ( x i ) f ( x i ) ψ k ( x i ) ] \begin{aligned} \frac{\partial I}{\partial a_k} &=2 \displaystyle \sum_{i=0}^m w(x_i)[\displaystyle \sum_{j=0}^n a_j\psi_j(x_i) -f(x_i)]\psi_k(x_i)\\ & = 2[\displaystyle \sum_{i=0}^m w(x_i) \displaystyle \sum_{j=0}^n a_j\psi_j(x_i) \psi_k(x_i) - \displaystyle \sum_{i=0}^m w(x_i) f(x_i) \psi_k(x_i)]\\ & = 2[ \displaystyle \sum_{j=0}^n a_j \displaystyle \sum_{i=0}^m w(x_i) \psi_j(x_i) \psi_k(x_i) - \displaystyle \sum_{i=0}^m w(x_i) f(x_i) \psi_k(x_i)] \\ \end{aligned} akI=2i=0mw(xi)[j=0najψj(xi)f(xi)]ψk(xi)=2[i=0mw(xi)j=0najψj(xi)ψk(xi)i=0mw(xi)f(xi)ψk(xi)]=2[j=0naji=0mw(xi)ψj(xi)ψk(xi)i=0mw(xi)f(xi)ψk(xi)]
若记 ( ψ j , ψ k ) = ∑ i = 0 m w ( x i ) ψ j ( x i ) ψ k ( x i ) ; ( f , ψ k ) = ∑ i = 0 m w ( x i ) f ( x i ) ψ k ( x i ) (\psi_j,\psi_k) = \displaystyle \sum_{i=0}^m w(x_i) \psi_j(x_i) \psi_k(x_i);(f,\psi_k) = \displaystyle \sum_{i=0}^m w(x_i) f(x_i) \psi_k(x_i) (ψj,ψk)=i=0mw(xi)ψj(xi)ψk(xi);(f,ψk)=i=0mw(xi)f(xi)ψk(xi) ,由 ∂ I ∂ a k = 0 \frac{\partial I}{\partial a_k} =0 akI=0
∑ j = 0 n a j ( ψ j , ψ k ) = ( f , ψ k ) \begin{aligned} \displaystyle \sum_{j=0}^n a_j (\psi_j,\psi_k) = (f,\psi_k) \end{aligned} j=0naj(ψj,ψk)=(f,ψk)
从而用矩阵的形式可以得到一个法方程组
[ ( ψ 0 , ψ 0 ) ( ψ 1 , ψ 0 ) ⋯ ( ψ n , ψ 0 ) ( ψ 0 , ψ 1 ) ( ψ 1 , ψ 1 ) ⋯ ( ψ n , ψ 1 ) ⋮ ⋮ ⋱ ⋮ ( ψ 0 , ψ n ) ( ψ 1 , ψ n ) ⋯ ( ψ n , ψ n ) ] [ a 0 a 1 ⋮ a n ] = [ ( f , ψ 0 ) ( f , ψ 1 ) ⋮ ( f , ψ n ) ] \begin{aligned} \begin{bmatrix} (\psi_0,\psi_0) & (\psi_1,\psi_0) & \cdots & (\psi_n,\psi_0) \\ (\psi_0,\psi_1) & (\psi_1,\psi_1) & \cdots & (\psi_n,\psi_1) \\ \vdots & \vdots & \ddots & \vdots \\ (\psi_0,\psi_n) & (\psi_1,\psi_n) & \cdots & (\psi_n,\psi_n) \end{bmatrix} \begin{bmatrix} a_0\\ a_1\\ \vdots\\ a_n \end{bmatrix}= \begin{bmatrix} (f,\psi_0) \\ (f,\psi_1)\\ \vdots\\ (f,\psi_n) \end{bmatrix} \end{aligned} (ψ0,ψ0)(ψ0,ψ1)(ψ0,ψn)(ψ1,ψ0)(ψ1,ψ1)(ψ1,ψn)(ψn,ψ0)(ψn,ψ1)(ψn,ψn)a0a1an=(f,ψ0)(f,ψ1)(f,ψn)

思考与疑问

  1. 拟合与插值的区别是什么?
  2. 拟合需要提前知道被拟合函数的形式,也就是说需要有一个模型假设,那么这个作模型假设有什么依据吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值