1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数学建模学习笔记(四)——拟合算法

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

时间:2018-08-03 05:38:59

相关推荐

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

文章目录

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

拟合算法简介

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

一个线性规划的例子

显然,由图中的数据可以得到,可以设置该拟合曲线为 y=kx+by = kx + by=kx+b,要估计 kkk 和 bbb 的值,可以使用高中所学知识——最小二乘法。

最小二乘法

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

第一种定义:yi^=kxi+b\hat{y_i} = kx_i + byi​^​=kxi​+b

其中:ki^,bi^=argk,bmin(∑i=1n∣yi−yi^∣)\hat{k_i}, \hat{b_i} = arg_{k, b} min(\sum_{i=1}^{n}|y_i-\hat{y_i}|)ki​^​,bi​^​=argk,b​min(i=1∑n​∣yi​−yi​^​∣)表示表达式的参数为kkk和bbb,而 k^\hat{k}k^ 和 b^\hat{b}b^ 能够使得表达式取得最小值。第二种定义:yi^=kxi+b\hat{y_i} = kx_i + byi​^​=kxi​+b

其中:k^,b^=argk,bmin(∑i=1n(yi−yi^)2)\hat{k}, \hat{b} = arg_{k, b}min(\sum_{i = 1}^{n}(y_i - \hat{y_i})^2)k^,b^=argk,b​min(i=1∑n​(yi​−yi​^​)2)表达的意义与第一种定义相同,只是表达式不同而已。

在平常的应用中,我们常常使用第二种定义。原因是第一种定义中含有绝对值,函数图像有拐点,不易求导。由此可以引申出以下结论:

∙\bullet∙ 不用奇数次原因

使用奇数次会有负数出现,那么误差就会奇偶相抵

∙\bullet∙ 不用偶数次原因

像4次这样的次数太高,结果易受极端数据(比如当自变量很大时)的影响。

求解最小二乘法

令L=∑i=1n(yi−kxi−b)2L = \sum_{i = 1}^{n}(y_i - kx_i - b)^2L=∑i=1n​(yi​−kxi​−b)2,现在要寻找能够使 LLL 最小的 kkk 和 bbb 的值:{∂L∂k=−2∑i=1nxi(yi−kxi−b)=0∂L∂b=−2∑i=1n(yi−kxi−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.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​∂k∂L​=−2i=1∑n​xi​(yi​−kxi​−b)=0∂b∂L​=−2i=1∑n​(yi​−kxi​−b)=0​ ⇒{∑i=1nxiyi=k∑i=1nxi2+b∑i=1nxi∑i=1nyi=k∑i=1nxi+bn\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=1∑n​xi​yi​=ki=1∑n​xi2​+bi=1∑n​xi​i=1∑n​yi​=ki=1∑n​xi​+bn​ ⇒{n∑i=1nxiyi=kn∑i=1nxi2+bn∑i=1nxI∑i=1nyi∑i=1nxi=k∑i=1nxi∑i=1nxi+bn∑i=1nxi\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=1∑n​xi​yi​=kni=1∑n​xi2​+bni=1∑n​xI​i=1∑n​yi​i=1∑n​xi​=ki=1∑n​xi​i=1∑n​xi​+bni=1∑n​xi​​

因此:n∑i=1nxiyi−∑i=1nyi∑i=1nxi=kn∑i=1nxi2−k∑i=1nxi∑i=1nxin\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_ini=1∑n​xi​yi​−i=1∑n​yi​i=1∑n​xi​=kni=1∑n​xi2​−ki=1∑n​xi​i=1∑n​xi​ ⇒k^=n∑i=1nxiyi−∑i=1nyi∑i=1nxin∑i=1nxi2−∑i=1nxi∑i=1nxi\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^=n∑i=1n​xi2​−∑i=1n​xi​∑i=1n​xi​n∑i=1n​xi​yi​−∑i=1n​yi​∑i=1n​xi​​ ⇒b^=∑i=1nxi2∑i=1nyi−∑i=1nxi∑i=1nxiyin∑i=1xxi2−∑i=1nxi∑i=1nxi\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^=n∑i=1x​xi2​−∑i=1n​xi​∑i=1n​xi​∑i=1n​xi2​∑i=1n​yi​−∑i=1n​xi​∑i=1n​xi​yi​​

拟合检验

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

拟合优度的定义

∙\bullet∙ 总体平方和 SST=∑i=1n(yi−yˉ)2SST = \sum_{i = 1}^{n}(y_i - \bar{y})^2SST=i=1∑n​(yi​−yˉ​)2

∙\bullet∙ 误差平方和 SSE=∑i=1n(yi−yi^)2SSE = \sum_{i = 1}^{n}(y_i - \hat{y_i})^2SSE=i=1∑n​(yi​−yi​^​)2

∙\bullet∙ 回归平方和 SSR=∑i=1n(yi^−yˉ)2SSR = \sum_{i = 1}^{n}(\hat{y_i} - \bar{y})^2SSR=i=1∑n​(yi​^​−yˉ​)2其中,SST=SSE+SSRSST = SSE + SSRSST=SSE+SSR

此时可以定义拟合优度 R2=SSRSST=SST−SSESSR=1−SSESSTR^2 = \frac{SSR}{SST} = \frac{SST - SSE}{SSR} = 1 - \frac{SSE}{SST}R2=SSTSSR​=SSRSST−SSE​=1−SSTSSE​,R2R^2R2 越接近于0,说明误差越小,拟合度越好 。

下面证明 SST=SSE+SSRSST = SSE + SSRSST=SSE+SSR:∑i=1n(yi−yˉ)2=∑i=1n(yi−yi^+yi^−yˉ)2=∑i=1n(yi−yi^)2+∑i=1n(yi^−yˉ)2+2∑i=1n(yi−yi^)(yi^−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=1∑n​(yi​−yˉ​)2=i=1∑n​(yi​−yi​^​+yi​^​−yˉ​)2=i=1∑n​(yi​−yi​^​)2+i=1∑n​(yi​^​−yˉ​)2+2i=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)因此,只需证明:∑i=1n(yi−yi^)(yi^−yˉ)=0\sum_{i = 1}^{n}(y_i - \hat{y_i})(\hat{y_i} - \bar{y}) = 0i=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)=0由一阶导数条件:{∂L∂k=−2∑i=1nxi(yi−kxi−b)=0∂L∂b=−2∑i=1n(yi−kxi−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.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​∂k∂L​=−2i=1∑n​xi​(yi​−kxi​−b)=0∂b∂L​=−2i=1∑n​(yi​−kxi​−b)=0​ ⇒{∑i=1nxi(yi−yi^)=0∑i=1n(yi−yi^)=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=1∑n​xi​(yi​−yi​^​)=0i=1∑n​(yi​−yi​^​)=0​因此,∑i=1n(yi−yi^)(yi^−yˉ)=∑i=1nyi^(yi−yi^)−yˉ∑i=1n(yi−yi^)=∑i=1n(kxi+b)(yi−yi^)=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=1∑n​(yi​−yi​^​)(yi​^​−yˉ​)i=1∑n​yi​^​(yi​−yi​^​)−yˉ​i=1∑n​(yi​−yi​^​)i=1∑n​(kxi​+b)(yi​−yi​^​)=0​(参数)线性函数可以使用 R2R^2R2 来判断拟合的好坏,其他非线性的函数直接看 SSESSESSE 的大小即可。

总结

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。