数学建模(4)拟合算法

数学建模(4)拟合算法

和插值比较

插值经过所有样本点,多项式次数过高,可能会有龙格现象,结果可能比较复杂。

拟合与样本点足够接近,得到确定的曲线,结果比较简单。

最小二乘法

例如是个直线,使用 y = k x + b y=kx+b

k ^ , b ^ = a r g m i n ( i = 1 n ( y i y i ^ ) 2 ) \widehat{k},\widehat{b}=argmin(\sum_{i=1}^n(y_i-\widehat{y_i})^2)

也可以不使用平方,使用绝对值,但是求导会很头疼。

损失函数 L L ,在回归中称为残差平方和

L = i = 1 n ( y i k x i b ) 2 L=\sum^n_{i=1}(y_i-kx_i-b)^2

推导过程略,我也没推

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 \widehat{k}=\frac{n\sum_{i=1}^nx_iy_i-\sum_{i=1}^ny_i\sum_{i=1}^nx_i}{n\sum_{i=1}^nx_i^2-\sum_{i=1}^nx_i\sum_{i=1}^nx_i}

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 n x i 2 i = 1 n x i i = 1 n x i \widehat{b}=\frac{\sum_{i=1}^nx_i^2\sum_{i=1}^ny_i-\sum_{i=1}^nx_i\sum_{i=1}^nx_iy_i}{n\sum_{i=1}^nx_i^2-\sum_{i=1}^nx_i\sum_{i=1}^nx_i}

拟合优度 R 2 R^2

总体平方和
S S T = i = 1 n ( y i y ) 2 SST=\sum_{i=1}^n(y_i-\overline{y})^2

误差平方和
S S E = i = 1 n ( y i y ^ ) 2 SSE=\sum_{i=1}^n(y_i-\widehat{y})^2

回归平方和
S S R = i = 1 n ( y i ^ y ) 2 SSR=\sum_{i=1}^n(\widehat{y_i}-\overline{y})^2

可以证明
S S T = S S E + S S R SST=SSE+SSR

R 2 = S S E S S R = S S T S S E S S R = 1 S S E S S T R^2=\frac{SSE}{SSR}=\frac{SST-SSE}{SSR}=1-\frac{SSE}{SST}

R 2 R^2 只能用于拟合函数是线性函数时结果的评价(下面一部分会说)

R 2 R^2 越接近1,误差平方月接近 0 0 ,拟合效果越好。

这里可以看出来SSE越小越好,但是为了找一个小的标准,所以找了SST,这里就很容易理解 R 2 R^2 了。

如果有些不是线性函数,可以直接使用SSE来判断拟合结果。

#这个函数是求平均值的函数
mean();

理解线性函数

前面说: R 2 R^2 只能用于拟合函数是线性函数时结果的评价

原因很容易理解,看 R 2 R^2 的公式来源就能明白,但是需要理解一下线性函数的含义,来更好地判断线性函数。

对于参数来说是线性,不是对于变量来说。

y = a + b x 2 y=a+bx^2 也算是a和b对于 x 2 x^2 的线性函数

y = e a + b x y=e^{a+bx} 也算是a和b对于x的线性函数(把lny看作一个因变量就可以了)

参数只以一次方出现,且不会与其他参数乘除,不出现参数的符合函数就可以算。

y = a + b 2 x y=a+b^2x 不算线性函数

y = a s i n ( b + c x ) y=asin(b+cx) 不算

Matlab曲线拟合工具箱

哇,这个工具箱真的我们去年电赛就开始用了,那时候我真菜(虽然现在也是很菜)

在Matlab->APP->curve fitting打开

也可以命令行输入cftool打开

数据区域、拟合区域、结果区域

左上角还可以直接生成代码,还可以保存图像。(不得不服matlab贼牛逼)

这代码改一下直接附录了。

如果一些复杂的函数拟合效果不好,可以更改option里面的初始值,达到一个好一些的结果。

猜你喜欢

转载自blog.csdn.net/qq_45507796/article/details/107738595