数学建模学习笔记(四)——拟合算法

文章目录

    • 拟合算法简介
    • 一个线性规划的例子
    • 最小二乘法
    • 求解最小二乘法
    • 拟合检验
    • 总结

拟合算法简介

  1. 与插值算法不同,拟合算法的目的是得到一条确定的曲线;而插值是根据已有的数据来获得一系列新的“靠谱”的数据。
  2. 插值要求曲线必须全部经过样本数据点,而拟合所得的结果曲线不一定要经过每一个样本数据点,只要能够通过误差检验即可

一个线性规划的例子

数学建模学习笔记(四)——拟合算法_第1张图片
显然,由图中的数据可以得到,可以设置该拟合曲线为 y = k x + b y = kx + b y=kx+b,要估计 k k k b b b 的值,可以使用高中所学知识——最小二乘法。

最小二乘法

设样本点数据为 ( x i , y i ) (x_i, y_i) (xi,yi) i = 1 , 2 , ⋯   , n i = 1, 2, \cdots, n i=1,2,,n,那么最小二乘法有如下两种定义:

  1. 第一种定义: y i ^ = k x i + b \hat{y_i} = kx_i + b yi^=kxi+b
    其中: k i ^ , b i ^ = a r g k , b m i n ( ∑ i = 1 n ∣ y i − y i ^ ∣ ) \hat{k_i}, \hat{b_i} = arg_{k, b} min(\sum_{i=1}^{n}|y_i-\hat{y_i}|) ki^,bi^=argk,bmin(i=1nyiyi^)表示表达式的参数为 k k k b b b,而 k ^ \hat{k} k^ b ^ \hat{b} b^ 能够使得表达式取得最小值。
  2. 第二种定义: y i ^ = k x i + b \hat{y_i} = kx_i + b yi^=kxi+b
    其中: k ^ , b ^ = a r g k , b m i n ( ∑ i = 1 n ( y i − y i ^ ) 2 ) \hat{k}, \hat{b} = arg_{k, b}min(\sum_{i = 1}^{n}(y_i - \hat{y_i})^2) k^,b^=argk,bmin(i=1n(yiyi^)2)表达的意义与第一种定义相同,只是表达式不同而已。

在平常的应用中,我们常常使用第二种定义。原因是第一种定义中含有绝对值,函数图像有拐点,不易求导。由此可以引申出以下结论:
∙ \bullet 不用奇数次原因
使用奇数次会有负数出现,那么误差就会奇偶相抵
∙ \bullet 不用偶数次原因
像4次这样的次数太高,结果易受极端数据(比如当自变量很大时)的影响。

求解最小二乘法

L = ∑ i = 1 n ( y i − k x i − b ) 2 L = \sum_{i = 1}^{n}(y_i - kx_i - b)^2 L=i=1n(yikxib)2,现在要寻找能够使 L L L 最小的 k k k b b b 的值: { ∂ L ∂ k = − 2 ∑ i = 1 n x i ( y i − k x i − b ) = 0 ∂ L ∂ b = − 2 ∑ i = 1 n ( y i − k x i − b ) = 0 \left\{ \begin{aligned} & \frac{\partial L}{\partial k} = -2\sum_{i = 1}^{n}x_i(y_i - kx_i - b) = 0 \\ & \frac{\partial L}{\partial b} = -2\sum_{i = 1}^{n}(y_i - kx_i - b) = 0 \end{aligned} \right. kL=2i=1nxi(yikxib)=0bL=2i=1n(yikxib)=0 ⇒ { ∑ i = 1 n x i y i = k ∑ i = 1 n x i 2 + b ∑ i = 1 n x i ∑ i = 1 n y i = k ∑ i = 1 n x i + b n \Rightarrow \left\{ \begin{aligned} & \sum_{i = 1}^{n}x_iy_i = k\sum_{i = 1}^{n}x_i^2 + b\sum_{i = 1}^{n}x_i \\ & \sum_{i = 1}^{n}y_i = k\sum_{i = 1}^{n}x_i + bn \end{aligned} \right. i=1nxiyi=ki=1nxi2+bi=1nxii=1nyi=ki=1nxi+bn ⇒ { n ∑ i = 1 n x i y i = k n ∑ i = 1 n x i 2 + b n ∑ i = 1 n x I ∑ i = 1 n y i ∑ i = 1 n x i = k ∑ i = 1 n x i ∑ i = 1 n x i + b n ∑ i = 1 n x i \Rightarrow \left\{ \begin{aligned} & n\sum_{i = 1}^{n}x_iy_i = kn\sum_{i = 1}^{n}x_i^2 + bn\sum_{i = 1}^{n}x_I \\ & \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i = k\sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i + bn\sum_{i = 1}^{n}x_i \end{aligned} \right. ni=1nxiyi=kni=1nxi2+bni=1nxIi=1nyii=1nxi=ki=1nxii=1nxi+bni=1nxi
因此: n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i = k n ∑ i = 1 n x i 2 − k ∑ i = 1 n x i ∑ i = 1 n x i n\sum_{i = 1}^{n}x_iy_i - \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i = kn\sum_{i = 1}^{n}x_i^2 - k\sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i ni=1nxiyii=1nyii=1nxi=kni=1nxi2ki=1nxii=1nxi ⇒ k ^ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \Rightarrow \hat{k} = \frac{n\sum_{i = 1}^{n}x_iy_i - \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i}{n\sum_{i = 1}^{n}x_i^2 - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i} k^=ni=1nxi2i=1nxii=1nxini=1nxiyii=1nyii=1nxi ⇒ b ^ = ∑ i = 1 n x i 2 ∑ i = 1 n y i − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 x x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \Rightarrow \hat{b} = \frac{\sum_{i = 1}^{n}x_i^2\sum_{i = 1}^{n}y_i - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_iy_i}{n\sum_{i = 1}^{x}x_i^2 - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i} b^=ni=1xxi2i=1nxii=1nxii=1nxi2i=1nyii=1nxii=1nxiyi

拟合检验

在函数时线性函数(注意:这里的线性函数是指参数是线性的,而不是自变量是线性的,例如: y = a x 2 + b y=ax^2 + b y=ax2+b同样也是线性函数)时,可以使用拟合优度(可决系数) R 2 R^2 R2 来判断拟合好坏

  1. 拟合优度的定义
    ∙ \bullet 总体平方和 S S T = ∑ i = 1 n ( y i − y ˉ ) 2 SST = \sum_{i = 1}^{n}(y_i - \bar{y})^2 SST=i=1n(yiyˉ)2
    ∙ \bullet 误差平方和 S S E = ∑ i = 1 n ( y i − y i ^ ) 2 SSE = \sum_{i = 1}^{n}(y_i - \hat{y_i})^2 SSE=i=1n(yiyi^)2
    ∙ \bullet 回归平方和 S S R = ∑ i = 1 n ( y i ^ − y ˉ ) 2 SSR = \sum_{i = 1}^{n}(\hat{y_i} - \bar{y})^2 SSR=i=1n(yi^yˉ)2其中, S S T = S S E + S S R SST = SSE + SSR SST=SSE+SSR
    此时可以定义拟合优度 R 2 = S S R S S T = S S T − S S E S S R = 1 − S S E S S T R^2 = \frac{SSR}{SST} = \frac{SST - SSE}{SSR} = 1 - \frac{SSE}{SST} R2=SSTSSR=SSRSSTSSE=1SSTSSE R 2 R^2 R2 越接近于0,说明误差越小,拟合度越好 。
    下面证明 S S T = S S E + S S R SST = SSE + SSR SST=SSE+SSR ∑ i = 1 n ( y i − y ˉ ) 2 = ∑ i = 1 n ( y i − y i ^ + y i ^ − y ˉ ) 2 = ∑ i = 1 n ( y i − y i ^ ) 2 + ∑ i = 1 n ( y i ^ − y ˉ ) 2 + 2 ∑ i = 1 n ( y i − y i ^ ) ( y i ^ − y ˉ ) \sum_{i = 1}^{n}(y_i - \bar{y})^2 = \sum_{i = 1}^{n}(y_i - \hat{y_i} + \hat{y_i} - \bar{y})^2 \\= \sum_{i = 1}^{n}(y_i - \hat{y_i})^2 + \sum_{i = 1}^{n}(\hat{y_i} - \bar{y})^2 + 2\sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) i=1n(yiyˉ)2=i=1n(yiyi^+yi^yˉ)2=i=1n(yiyi^)2+i=1n(yi^yˉ)2+2i=1n(yiyi^)(yi^yˉ)因此,只需证明: ∑ i = 1 n ( y i − y i ^ ) ( y i ^ − y ˉ ) = 0 \sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) = 0 i=1n(yiyi^)(yi^yˉ)=0由一阶导数条件: { ∂ L ∂ k = − 2 ∑ i = 1 n x i ( y i − k x i − b ) = 0 ∂ L ∂ b = − 2 ∑ i = 1 n ( y i − k x i − b ) = 0 \left\{ \begin{aligned} & \frac{\partial L}{\partial k} = -2\sum_{i = 1}^{n}x_i(y_i - kx_i - b) = 0 \\ & \frac{\partial L}{\partial b} = -2\sum_{i = 1}^{n}(y_i - kx_i - b) = 0\end{aligned} \right. kL=2i=1nxi(yikxib)=0bL=2i=1n(yikxib)=0 ⇒ { ∑ i = 1 n x i ( y i − y i ^ ) = 0 ∑ i = 1 n ( y i − y i ^ ) = 0 \Rightarrow \left\{ \begin{aligned} & \sum_{i = 1}^{n}x_i(y_i - \hat{y_i}) = 0 \\ & \sum_{i = 1}^{n}(y_i - \hat{y_i}) = 0 \end{aligned} \right. i=1nxi(yiyi^)=0i=1n(yiyi^)=0因此, ∑ i = 1 n ( y i − y i ^ ) ( y i ^ − y ˉ ) = ∑ i = 1 n y i ^ ( y i − y i ^ ) − y ˉ ∑ i = 1 n ( y i − y i ^ ) = ∑ i = 1 n ( k x i + b ) ( y i − y i ^ ) = 0 \begin{aligned} & \sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) \\ = & \sum_{i = 1}^{n}\hat{y_i}(y_i - \hat{y_i}) - \bar{y}\sum_{i = 1}^{n}(y_i - \hat{y_i}) \\ = & \sum_{i = 1}^{n}(kx_i + b)(y_i - \hat{y_i}) = 0 \end{aligned} ==i=1n(yiyi^)(yi^yˉ)i=1nyi^(yiyi^)yˉi=1n(yiyi^)i=1n(kxi+b)(yiyi^)=0(参数)线性函数可以使用 R 2 R^2 R2 来判断拟合的好坏,其他非线性的函数直接看 S S E SSE SSE 的大小即可。

总结

像拟合这类型的问题,最简便的方法时使用 M a t l a b Matlab Matlab 中的拟合工具箱来拟合。里面有许多内置的拟合函数类型,且能计算 R 2 R^2 R2 或者 S S E SSE SSE,通过输入参数,确定拟合类型即可获得拟合函数。

你可能感兴趣的:(数学建模学习笔记,数学建模,算法)