Matlab实现非线性回归预测模型:从理论到代码实践
创作时间:
作者:
@小白创作中心
Matlab实现非线性回归预测模型:从理论到代码实践
引用
CSDN
1.
https://blog.csdn.net/qq_37293468/article/details/143143872
本文将介绍如何使用Matlab实现非线性回归预测模型。通过变量代换,将非线性回归问题近似转化为线性回归问题,并进行分析预测。文章将详细描述实验目的、任务、过程和结果,并提供具体的代码实现。
实验目的
掌握有关非线性回归的理论知识,通过变量代换把本来应该用非线性回归处理的问题近似转化为线性回归问题,并进行分析预测。
实验任务
对非线性回归实例进行编码计算,实例如下:
实验过程
- 运行非线性回归中的多项式预测模型,以参数m=5为例进行预测
- 对多项式预测模型进行统计检验
- 进行数据拟合,观察预测模型对原始数据的拟合结果
- 对表中客运量和旅客周转量、公路客运量和公路旅客周转量数据分别进行运算,得到非线性回归曲线方程表
实验结果
实现平台:Matlab 2022A
①多项式预测模型
% 年份和客运量的数据
years = 1987:2006;
passengers = [10091,10551,10389,10702,11078,10565,11063,25163,21697,23904,25003.7,29863,32962.2,33704,39984.4,38879.6,35156,38902,41079,43844];
% 将年份和客运量数据进行多项式拟合
degree = 5; % 多项式的阶数
coefficients = polyfit(years, passengers, degree);
% 创建一个新的年份序列,用于预测
new_years = 1987:0.1:2007; % 以生成一个新的年份序列,注意:第三个值是你要预测的年份
% 使用 polyval 函数计算预测的客运量
predicted_passengers = polyval(coefficients, new_years);
% 绘制原始数据和预测结果
plot(years, passengers, 'o', new_years, predicted_passengers, '-');
xlabel('年份');
ylabel('客运量');
title('年份与客运量的多项式预测');
legend('原始数据', '预测结果');
% 拟合优度检验
y_mean = mean(passengers);
SS_total = sum((passengers - y_mean).^2);
SS_residual = sum((passengers - polyval(coefficients, years)).^2);
R2 = 1 - SS_residual / SS_total;
% F检验
n = length(passengers);
m = degree + 1; % 多项式阶数加上常数项
F = (SS_total - SS_residual) / (SS_residual / (n - m));
alpha = 0.05; % 显著性水平
F_critical = finv(1 - alpha, m, n - m); % 计算临界值
% 打印结果
fprintf('拟合优度检验结果:\n');
fprintf('拟合优度(R^2)= %.4f\n', R2);
fprintf('\nF检验结果:\n');
fprintf('F统计量 = %.4f\n', F);
if F > F_critical
fprintf('多项式拟合模型具有显著性\n');
else
fprintf('多项式拟合模型不具有显著性\n');
end
% 打印预测模型
fprintf('预测模型:\n');
fprintf('客运量 = ');
for i = 1:degree
fprintf('%.4f * 年份^%d + ', coefficients(i), degree+1-i);
end
fprintf('%.4f\n', coefficients(degree+1));
②幂函数预测模型
% 输入数据
years = 1987:2006;
passengers = [10091,10551,10389,10702,11078,10565,11063,25163,21697,23904,25003.7,29863,32962.2,33704,39984.4,38879.6,35156,38902,41079,43844];
% 拟合幂函数模型
f = fittype('a * x^b'); % 定义幂函数模型
model = fit(years.', passengers.', f); % 拟合模型
% 显示拟合结果
disp(model);
% 绘制拟合曲线
plot(model, years, passengers,'o');
hold on; % 保持图形,添加预测结果
xlabel('年份');
ylabel('客运量');
title('幂函数拟合结果');
% 进行预测
future_years = 2007; % 要预测的未来年份
predicted_passengers = model(future_years); % 预测客运量
% 显示预测结果
disp('未来年份的客运量预测:');
disp([future_years; predicted_passengers].');
% 将预测结果画在图上
plot(future_years, predicted_passengers, 'ro', 'MarkerSize',5); % 使用红色圆点标记预测结果
legend('已知数据', '拟合曲线', '预测结果');
hold off; % 结束图形保持
实验结果:
- 运行非线性回归中的多项式预测模型,以参数m=5为例进行预测
- 对多项式预测模型进行统计检验
- 进行数据拟合,观察预测模型对原始数据的拟合结果
- 改用幂函数模型,再次进行预测
个人总结
对非线性回归预测模型的理解
在实际问题中,非常多的变量之间都是非线性关系,我们可以通过变量代换将本来是非线性关系的问题近似地转化成线性关系,再进行分析预测。在非线性回归模型中,因变量与自变量的关系可以是曲线、指数、对数等非线性形式,而不是线性形式。对编码实现过程的回顾
这个代码的实现用到了许多Matlab当中特有的数学函数,在编写代码的过程当中我查阅了很多资料,以下为一部分实现此实验用到的特殊函数:
polyfit
多项式曲线拟合函数p = polyfit(x,y,n)
返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(基于最小二乘指标)。p 中的系数按降幂排列,p 的长度为 n+1polyval
多项式计算函数y = polyval(p,x)
计算多项式 p 在 x 的每个点处的值。参数 p 是长度为 n+1 的向量,其元素是 n 次多项式的系数(降幂排序)fittype
曲线和曲面拟合的拟合类型- 这个函数有很多用法,详见Matlab帮助中心,这里只列出我使用的一种
aFittype = fittype(linearModelTerms)
使用 linearModelTerms 中的表达式指定的项为自定义线性模型创建拟合类型
热门推荐
必读传统玄幻小说20本,经典与新锐的碰撞
《芙哇芙哇女仆咖啡厅》评测:见得其型
养鱼小白的快乐生活:一周一换水,一天一乐趣
加油策略大比拼:一次加满与加200元,哪种更适合你?
安徽阜阳十大旅游景点详细攻略
水乳怎么使用更有效?掌握护肤基础步骤的关键!
一品诰命夫人:古代女性的最高荣誉与权力象征
电动汽车的碰撞安全性、测试方法及相关试验标准解析
从饮食与习惯改善胃酸逆流
空心菜的水培方法及管理技术要点
清明时节 河海鲜美
江南大学“优质植物蛋白肉制造关键技术与装备” 项目成果通过鉴定
探秘泾川大云寺珍宝:五重舍利套函与唐代文物瑰宝
探索烟台的自然美景与历史文化之旅
各省路边摊美食大集结:从湖北三鲜豆皮到广东白切鸡,一同领略地方特色与饮食文化
王者荣耀公孙离技能连招攻略:如何确保技能衔接流畅?
掌握这些技巧,让你的薪酬谈判更胜一筹
判断好logo的6大原则
李善长的一生都经历了什么?朱元璋为何要杀他?
黄金突破3000美元关口:技术面与基本面深度解析
如何有效掌握期货市场的交割规则?这些交割规则对交易有何作用?
一阶惯性环节的C语言实现方法详解
简笔画女生自画像教程:多种发型与风格的绘画参考
注册海外公司需要哪些文件?详细指南
乌拉草:东北三宝之一的神奇植物
氢氧化铝的工业应用详解:从阻燃剂到水处理的
“AI赋能未来论坛”:人工智能与生命科学碰撞
走进历代帝王庙,探秘古代皇家祭祀文化
本轮黄金价格上涨受哪些因素影响,追高还是变现?专家解析
FaceTime音频无法正常工作?10个实用解决方案帮你轻松应对