数学建模(4)拟合算法
和插值比较
插值经过所有样本点,多项式次数过高,可能会有龙格现象,结果可能比较复杂。
拟合与样本点足够接近,得到确定的曲线,结果比较简单。
最小二乘法
例如是个直线,使用
y=kx+b
k
,b
=argmin(i=1∑n(yi−yi
)2)
也可以不使用平方,使用绝对值,但是求导会很头疼。
损失函数
L,在回归中称为残差平方和
L=i=1∑n(yi−kxi−b)2
推导过程略,我也没推
k
=n∑i=1nxi2−∑i=1nxi∑i=1nxin∑i=1nxiyi−∑i=1nyi∑i=1nxi
b
=n∑i=1nxi2−∑i=1nxi∑i=1nxi∑i=1nxi2∑i=1nyi−∑i=1nxi∑i=1nxiyi
拟合优度
R2
总体平方和
SST=i=1∑n(yi−y)2
误差平方和
SSE=i=1∑n(yi−y
)2
回归平方和
SSR=i=1∑n(yi
−y)2
可以证明
SST=SSE+SSR
R2=SSRSSE=SSRSST−SSE=1−SSTSSE
R2只能用于拟合函数是线性函数时结果的评价(下面一部分会说)
R2越接近1,误差平方月接近
0,拟合效果越好。
这里可以看出来SSE越小越好,但是为了找一个小的标准,所以找了SST,这里就很容易理解
R2了。
如果有些不是线性函数,可以直接使用SSE来判断拟合结果。
mean();
理解线性函数
前面说:
R2只能用于拟合函数是线性函数时结果的评价
原因很容易理解,看
R2的公式来源就能明白,但是需要理解一下线性函数的含义,来更好地判断线性函数。
对于参数来说是线性,不是对于变量来说。
y=a+bx2也算是a和b对于
x2的线性函数
y=ea+bx也算是a和b对于x的线性函数(把lny看作一个因变量就可以了)
参数只以一次方出现,且不会与其他参数乘除,不出现参数的符合函数就可以算。
y=a+b2x不算线性函数
y=asin(b+cx)不算
Matlab曲线拟合工具箱
哇,这个工具箱真的我们去年电赛就开始用了,那时候我真菜(虽然现在也是很菜)
在Matlab->APP->curve fitting打开
也可以命令行输入cftool打开
数据区域、拟合区域、结果区域
左上角还可以直接生成代码,还可以保存图像。(不得不服matlab贼牛逼)
这代码改一下直接附录了。
如果一些复杂的函数拟合效果不好,可以更改option里面的初始值,达到一个好一些的结果。