拟合算法

拟合算法 什么时候用?

拟合算法 的结果是得到一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数),且曲线不需要一定经过给定的点

拟合算法 非常适合样本数据较多的情况(即大于30)

演示拟合法在实践中的用途

选定你认为最合适的拟合函数,并作出 2019-2020 年的预测图
拟合算法_第1张图片
一、预处理
将题目数据导入 Matlab 中,并根据样本点做出如下散点图
拟合算法_第2张图片
由图可知,人口增长曲线有很明显的直线特征,故我们令其函数表达式为 y = k x + b y=kx+b y=kx+b

二、求解最小二乘法
先令拟合值 y ^ i = k x i + b \hat{y}_{i}=k x_{i}+b y^i=kxi+b

那么 k ^ , b ^ = arg ⁡ min ⁡ k , b ( ∑ i = 1 n ( y i − y ^ i ) 2 ) = arg ⁡ min ⁡ k , b ( ∑ i = 1 n ( y i − k x i − b ) 2 ) \hat{k}, \hat{b}=\underset{k, b}{\arg \min }\left(\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}\right)=\underset{k, b}{\arg \min }\left(\sum_{i=1}^{n}\left(y_{i}-k x_{i}-b\right)^{2}\right) k^,b^=k,bargmin(i=1n(yiy^i)2)=k,bargmin(i=1n(yikxib)2)

我们不妨令 L = ∑ i = 1 n ( y i − k x i − b ) 2 L=\sum_{i=1}^{n}\left(y_{i}-k x_{i}-b\right)^{2} L=i=1n(yikxib)2,现要找 k , b k,b k,b 使得 L L L 最小

经过一系列数学运算,最终我们得到
拟合算法_第3张图片
三、模型求解
利用 Matlab 软件,我们求解得 k ^ = 702.4 , b ^ = − 1.278 e + 06 \hat{k}=702.4, \hat{b}=-1.278e+06 k^=702.4,b^=1.278e+06,作出预测图
拟合算法_第4张图片
四、多次拟合
为了保证拟合结果的准确性,我们利用 Matlab 自带的 cftool 工具箱,它是一款强大的曲线拟合工具,并从中选取了一些常见的拟合函数,并进行对比分析,结果如下表所示:

 函数类型  D e g r e e S S E R 2  polynomial  1 9.166 × 1 0 4 0.9978  polynomial  2 9662 0.9998  polynomial  3 1493 1.0000  exponential  − 6.951 × 1 0 4 0.9983  Gaussian  − 6.961 × 1 0 4 0.9983  power  − 7.15 × 1 0 4 0.9982 \begin{array}{|c|c|c|c|} \hline \text { 函数类型 } & \mathrm { Degree } & \mathrm{ SSE } & \mathrm{ R^2 } \\ \hline \text { polynomial } & 1 & 9.166 \times 10^{4} & 0.9978 \\ \hline \text { polynomial } & 2 & 9662 & 0.9998 \\ \hline \text { polynomial } & 3 & 1493 & 1.0000 \\ \hline \text { exponential } & - & 6.951 \times 10^{4} & 0.9983 \\ \hline \text { Gaussian } & - & 6.961 \times 10^{4} & 0.9983 \\ \hline \text { power } & - & 7.15 \times 10^{4} & 0.9982 \\ \hline \end{array}  函数类型  polynomial  polynomial  polynomial  exponential  Gaussian  power Degree123SSE9.166×104966214936.951×1046.961×1047.15×104R20.99780.99981.00000.99830.99830.9982

结论: 多项式逼近中, R 2 \mathrm{R^2} R2 越接近 1 1 1,说明误差平方和( S S E \mathrm{SSE} SSE)接近于 0 0 0,拟合效果越好;对于其它非线性函数, S S E \mathrm{SSE} SSE 值越低拟合效果越好。综上所述,多项式中 D e g r e e \mathrm {Degree} Degree 3 3 3 与插值逼近拟合效果最好,但同时我们要考虑到函数的形式越简单越好,综合以上的拟合结果,我们最终认为 D e g r e e \mathrm {Degree} Degree 1 1 1 p o l y n o m i a l \mathrm{polynomial} polynomial 函数的拟合最为合适

步骤及代码
拟合算法_第5张图片

%% 预处理
load data2.mat;
year = data2(:,1);
population = data2(:,2);
% plot(year,population,'o')  				     % 散点图
cftool
[fitresult, gof] = createFit(year, population);  % cftool 的 Genarate Code 导入
t = 2009:2020;
k = 702.4;   
b = -1.278e+06;

%% 最小二乘法 求法一:匿名函数
f=@(x) k*x+b;
fplot(f,[2009,2020]);
hold on
plot(year,population,'o')					     % 预测图

%% 最小二乘法 求法二:结合函数
predictions = k.*t+b;
plot(year,population,'o',t,predictions,'-')		 % 预测图

%% 求解其他拟合函数
...

关于使用拟合法的补充

① 不要把 拟合法 写进关键词中
国奖论文几乎没有把拟合法放进关键词中的,因为拟合法是作为一种方法,用于辅助,而不是一种模型,所以尽量不要放进关键词中

② 尽量用较为复杂的 拟合法
凡是国奖的论文,拟合法都没那么简单,有的用 SAS 软件拟合(软件),有的用高斯拟合(拟合函数),有的用三维空间拟合(创新方法),且原理都比较高深 (装B ) ,所以我们要根据建立的模型找出突破点来复杂化拟合法,但具体使用的拟合曲线还得视题目而定

拟合法的评估

拟合法 的优点:
它能清晰的表明自变量和因变量之间的显著关系、多个自变量对一个因变量的影响强度
拟合法 的缺点:
它只是一种推测,这影响了因子的多样性和某些因子的不可测性,使得其在某些情况下受到限制

你可能感兴趣的:(数学建模,数学建模)