如果一直钻研一类问题的话,思想就会固化,所以这次带来的是预测类模型中的插值与拟合,而这个也是笔者学习过程中经典的入门模型。

目录

模型

历史背景

图像概述

模型步骤

典型例题

优劣分析

优化改进

代码


模型

历史背景

拟合法最早出现我们儿时对实际问题的数据化处理中,每个方程,每个函数都是对问题本身的一种反映。而这一点在现在的数学问题中同样适用——还有什么比一个函数关系式更能直观地表现出变量之间的相关性呢?而拟合法不仅可以用来刻画相关性,还可以通过对自变量的修改来合理外推,得到先前不存在的结果从而进行预测,不过本文只考虑其作为分析类模型的解题步骤,不涉及预测类问题。

图像概述

模型步骤

1、数据预处理,预处理的方式有很多,清洗、集成、归约、变换……这些方式会在笔者的其他博客中谈及,这里继续宁数据预处理是为了保证拟合精度,去除噪点。

2、选择变量,在例题中通常只有一个自变量和一个因变量,如某小区房屋使用面积和售价的关系,这个关系经过拟合操作后会转变为一个一元函数。但是在比赛中,大部分问题都是多元化的,多个因素共同决定某几个结果,所以选择合适的变量也很关键。

3、拟合函数,函数的种类不胜枚举,指数,对数,三角,幂级数等等,切忌想当然地认为哪种函数最合适,应该使用matlab拟合工具箱切换不同的函数并对参数进行相应的调整,工具箱中也提供了一些检验手段来比较拟合精度。

典型例题

2015年B题《“互联网+”时代的出租车资源配置》

2018年美赛A题《Multi-hop HF Radio Propogation》

优劣分析

这里要提及一下拟合和回归的区别,网上对此事众说纷纭,笔者认为拟合是你有一堆数据点,想要找一个函数把这些点都串在图像上,而回归是你划了一条曲线,希望已知的数据点都尽可能靠近曲线。当然这只是笔者的个人观点,其实还有一个更明确的方法,就是看使用的是rstool(回归工具箱)还是cftool(拟合工具箱)。优点的话是建模迅速,对于小样本、关系简单的数据很有效,并且得到的函数关系式易于理解,便于作决策分析;缺点是对于大型的繁复的特征难以找到恰当的函数表达式,而且代码多依靠工具箱,灵活性不高,自己编程会很麻烦。

优化改进

在数据处理上可以进行优化,以便于曲线更加贴合数据,可以参照这篇文章[1]郭斯羽,吴延冬.去除离群点的改进椭圆拟合算法[J].计算机科学,2022,049(004):188-194.运用截断最小二乘法对离群点进行修饰。

代码

这里的代码仅是笔者运用cftool工具箱导出的拟合代码,matlab自带的拟合函数是polyfit,但是功能较为受限,还是推荐使用cftool。

%CREATEFIT(X1,Z)
% 创建一个拟合。
%
% 要进行 '无标题拟合 1' 拟合的数据:
% X 输入: X1
% Y 输出: Z
% 输出:
% fitresult: 表示拟合的拟合对象。
% gof: 带有拟合优度信息的结构体。
%
% 另请参阅 FIT, CFIT, SFIT.
% 由 MATLAB 于 06-Jul-2022 13:57:48 自动生成
%% 拟合: '无标题拟合 1'。
[xData, yData] = prepareCurveData( X1, Z );
% 设置 fittype 和选项。
ft = fittype( {'(sin(0.91*x-1.03*pi))', '((x-9.32)^2)', '1.53'},
'independent', 'x', 'dependent', 'y', 'coefficients', {'a', 'b',
'c'} );
% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft );
% 绘制数据拟合图。
figure( 'Name', '线性拟合' );
h = plot( fitresult, xData, yData );
legend( h, 'Z vs. X1', '线性拟合', 'Location', 'NorthEast',
'Interpreter', 'none' );
% 为坐标区加标签
xlabel( 'X1', 'Interpreter', 'none' );
ylabel( 'Z', 'Interpreter', 'none' );
grid on
x= input('x=');
% 通过曲线拟合器(cftool)得到拟合函数
a = 0.5814;
b = 0.03042 ;
c = -0.3561 ;
u = a*(sin(0.91*x-1.03*pi)) + b*((x-9.32)^2) + c*1.53;
disp(u);
以上就是笔者归纳总结的拟合法的主要内容了,欲知后事如何,请听下回分解。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐