【大数据分析与挖掘模型】matlab实现——非线性回归预测模型

embedded/2024/10/30 16:37:01/

在这里插入图片描述

一、实验目的

掌握有关非线性回归的理论知识,通过变量代换把本来应该用非线性回归处理的问题近似转化为线性回归问题,并进行分析预测。

二、实验任务

对非线性回归实例进行编码计算,实例如下:

三、实验过程

1.运行非线性回归中的多项式预测模型,以参数m=5为例进行预测

2.对多项式预测模型进行统计检验

3.进行数据拟合,观察预测模型对原始数据的拟合结果

4.对表中客运量和旅客周转量、公路客运量和公路旅客周转量数据分别进行运算,得到非线性回归曲线方程表

四、实验结果

实现平台:Matlab 2022A

实验代码:

①多项式预测模型

matlab">% 年份和客运量的数据
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_criticalfprintf('多项式拟合模型具有显著性\n');
elsefprintf('多项式拟合模型不具有显著性\n');
end% 打印预测模型
fprintf('预测模型:\n');
fprintf('客运量 = ');
for i = 1:degreefprintf('%.4f * 年份^%d + ', coefficients(i), degree+1-i);
end
fprintf('%.4f\n', coefficients(degree+1));

②幂函数预测模型

matlab">% 输入数据
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; % 结束图形保持

实验结果:

1.运行非线性回归中的多项式预测模型,以参数m=5为例进行预测

2.对多项式预测模型进行统计检验

3.进行数据拟合,观察预测模型对原始数据的拟合结果

4.改用幂函数模型,再次进行预测

五、个人总结

1.对非线性回归预测模型的理解

在实际问题中,非常多的变量之间都是非线性关系,我们可以通过变量代换将本来是非线性关系的问题近似地转化成线性关系,再进行分析预测。在非线性回归模型中,因变量与自变量的关系可以是曲线、指数、对数等非线性形式,而不是线性形式。

2.对编码实现过程的回顾

这个代码的实现用到了许多matlab当中特有的数学函数,在编写代码的过程当中我查阅了很多资料,以下为一部分实现此实验用到的特殊函数:

①polyfit多项式曲线拟合函数

p = polyfit(x,y,n)返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(基于最小二乘指标)。p 中的系数按降幂排列,p 的长度为 n+1

②polyval多项式计算函数

y = polyval(p,x) 计算多项式 p 在 x 的每个点处的值。参数 p 是长度为 n+1 的向量,其元素是 n 次多项式的系数(降幂排序)

③fittype曲线和曲面拟合的拟合类型

这个函数有很多用法,详见matlab帮助中心,这里只列出我使用的一种

aFittype = fittype(linearModelTerms) 使用 linearModelTerms 中的表达式指定的项为自定义线性模型创建拟合类型


http://www.ppmy.cn/embedded/133651.html

相关文章

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树,在每一个节点增加了一个存储位来表示节点的颜色,可以是红色也可以是黑色,通过约束颜色来维持树的平衡,具有以下的性质: 每个节点不是红色就是黑色根节点为黑色如果…

手机照片怎么转换成jpg格式?分享6种图片格式转换方法

照片已成为我们记录生活的重要方式。然而,不同设备和应用生成的图片格式各异,有时我们需要将照片转换成JPG格式以便更广泛地分享和使用。很多小伙伴不清楚该怎样将照片的格式进行转换,尤其是在手机上,不用担心,下面给大…

Excel 单元格小数点精确位数机制

在 Excel 中,单元格的 .Value2 属性是用来表示数字或日期值的,它是 Excel 内部的数值存储方式,不包含货币或日期的格式信息。**对于小数位的支持,Excel 的内部精度可以达到 15 位有效数字**,这包括整数和小数部分。 因…

C++学习:类和对象(一)

一、面向过程与面向对象编程 1. 什么是面向过程编程? 面向过程编程(Procedural Programming)是一种以过程(或函数)为中心的编程范式。程序被视为一系列按顺序执行的步骤,主要通过函数对数据进行操作 特点…

虚拟机 Email 恢复专用工具:Virtual Machine Email Recovery

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 SysTools 系列数据恢复、取证及…

蓝桥杯基本操作和运算

文章目录 1.基本运算2.循环--进制转换/最大公约数2.1进制转换2.2求解最大公约数 3.数组与字符串4.常用的API5.快速读写模版 蓝桥杯基本操作和运算 10-22号正式开始准备蓝桥杯的比赛,准备参加这个大学B组的Java的赛项 1.基本运算 首先就是基本的输入输出&#xff1…

Dockfile打包带tdengine驱动的tomcat镜像基于官方tomcat容器

之前写过一篇:Dockfile打包带tdengine驱动的tomcat自定义镜像_如何创建一个包含tdengine客户端的docker镜像-CSDN博客 上面这篇是基于centos容器镜像制作的,这篇改用tomcat容器制作。 Dockfile内容如下 # 使用官方的 Tomcat 8 镜像作为基础镜像&#…

windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(三)

数据包的发送 NDIS数据包的发送是一件非常麻烦的事情,当然,在应用层,使用socket库感觉不到这一点,但是在内核中,内核主要实现是的七层结构中的下面4层,并且Filter驱动和协议驱动不一样,它完全就…