数学建模(三):预测

简介: 在数学建模比赛中,预测也是我们最常见的问题之一,特别是每年的国赛C题,C题不出意外都为统计题。博主在去年的国赛C题和今年的长三角数学建模中都有遇到预测类的题目,在预测类问题中时间预测和多指标预测最为常见,接下来就详细讲一下如何利用BP神经网络去解决该类问题

 

目录

✨前言

👉🏻历史回顾👈🏻

🔍1、什么是预测?

📑2、BP神经网络预测算法

✏️2.1 BP神经网络算法基本原理

🗝️2.2 基于多指标影响的预测算法

🗝️2.3 基于时间序列影响的预测算法

📖三、BP神经网络预测的分析与总结

📝1、大量数据集

📝2、数据预处理

📝3、n的取值


✨前言

     在数学建模比赛中,预测也是我们最常见的问题之一,特别是每年的国赛C题,C题不出意外都为统计题。博主在去年的国赛C题和今年的长三角数学建模中都有遇到预测类的题目,在预测类问题中时间预测多指标预测最为常见,接下来就详细讲一下如何利用BP神经网络去解决该类问题

数学建模专栏:数学建模从0到1

👉🏻历史回顾👈🏻

🔍1、什么是预测?

       预测在百度百科上的定义:“预测是指人们利用已经掌握的知识和手段,预先推知和判断事物未来发展状况的一种活动,具体说来,就是人们根据事物过去发展变化的客观过程某些规律性,根据事物运动变化的状态,运用各种定性定量分析方法,对事物未来可能出现的趋势和可能达到的水平所进行的科学推测”。

简而言之,就是根据已知的数据然后通过一定的数学手段预测得到未知数据!

📑2、BP神经网络预测算法

✏️2.1 BP神经网络算法基本原理

关于BP神经网络算法的基本原理,博主有一篇专门的文章讲到,这里不再做赘述,请看下文👇🏻

【数模智能算法】BP神经网络基本算法原理_小羊不会飞的博客

关于BP神经网络的预测类问题,博主将主要其分为:

1、受相关指标影响的数据预测

2、基于历史值影响的数据预测

🗝️2.2 基于多指标影响的预测算法

例题1:辛烷值的预测

【改编】辛烷值是汽油最重要的品质指标,传统的实验室检测方法存在样品用量大,测试周期长和费用高等问题,不适用于生产控制,特别是在线测试。近年发展起来的近红外光谱分析方法(NIR),作为一种快速分析方法,已广泛应用于农业、制药、生物化工、石油产品等领域。其优越性是无损检测、低成本、无污染,能在线分析,更适合于生产和控制的需要。实验采集得到50组汽油样品(辛烷值已通过其他方法测量),并利用傅里叶近红外变换光谱仪对其进行扫描,扫描范围900~1700nm,扫描间隔为2nm,即每个样品的光谱曲线共含401个波长点,每个波长点对应一个吸光度。

(1)请利用这50组样品的数据,建立这401个吸光度和辛烷值之间的模型。

(2)现给你10组新的样本,这10组样本均已经过近红外变换光谱仪扫描,请预测这10组新样本的辛烷值。

image.gif编辑

样本编号 x1 x2 x3 xn Target(即y)
1
2
n

该题目中“辛烷值”的数值受吸光度Xi..Xn的影响,这个吸光度就是属于多指标,这种情况我们需要把数据导入,input就是各个吸光度的数据,output就是“辛烷值”这一列的数据,我们只需要把inputoutput导入进matlab就可;

代码参数的调节和数据的获取可以私信博主!

% 清空环境变量
%clear
%close all
%clc
%input=randi([1 20],200,2);  
%output=input(:,1)+input(:,2); 
%input_train = input(1:190,:)';
%output_train =output(1:190,:)';
%input_test = input(191:200,:)';    
%output_test =output(191:200,:)';
input_train = input(1:51,:)';
output_train =output(1:51,:)';
input_test = input(51:60,:)';
output_test =output(51:60,:)';
inputnum=401; 
hiddennum=8;
outputnum=1; 
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');
W1= net. iw{1, 1};
B1 = net.b{1};
W2 = net.lw{2,1};
B2 = net. b{2};
net.trainParam.epochs=10000;      
net.trainParam.lr=0.01;             
net.trainParam.goal=0.00001;              
net.dividefcn="";
net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本
inputn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test); 
test_simu=mapminmax('reverse',an,outputps); 
error=test_simu-output_test;    
...........

image.gif

image.gif编辑

🀄结果分析:

我取了前50行数据,其中40行数据用来做训练集,后10行用来和预测集作比较,通过结果来看,预测的效果不能用“”字来形容了,那是相当的nice🏄🏻‍♀️

🗝️2.3 基于时间序列影响的预测算法

题目:

image.gif编辑

这是一道关于肿瘤放疗的问题,其中在第二小题中出现了预测的字眼,需要预测出放疗剂量为2.5Gy15次放疗数据,这部就是妥妥的预测模型嘛,由于excel中给出了不同剂量的数据,这个就相当于一个多指标预测,可以直接用上面的算法去预测,但是我想讲的是它每一种剂量中,肿瘤的大小是与时间相关的,我们可以定量分析,当剂量相同时,预测后面的时间的肿瘤大小,这就构成了一个时间序列模型时间就成了唯一的指标

image.gif编辑

时间(天) 肿瘤体积(mm^3)
1 1.0
2 1.3
3 1.6
4 1.8
5 2.1
6 2.5
7 2.9
8 3.3
9 3.9
10 4.5
11 5.2
12 6.0
...... ........

image.gif编辑

因为本文章只针对于时间序列类问题,关于只有时间这一个指标时,我们可以认为y(t)的数据与之前n组数据有关,即前n组数据影响到y(t)这个数据的值,从而我们建立一个新模型:

y(t)=f(y(t-n),y(t-n+1),....,y(t-1))

%input=randi([1 20],200,2);  %载入输入数据
%output=input(:,1)+input(:,2);  %载入输出数据
%input_train = input(1:190,:)';
%output_train =output(1:190,:)';
%input_test = input(191:200,:)';
%output_test =output(191:200,:)';
input_train = input(1:25,:)';
output_train =output(1:25,:)';
input_test = input(20:27,:)';
output_test =output(20:27,:)';
%节点个数
inputnum=2; 
hiddennum=5;
outputnum=1;
%% 第三本 训练样本数据归一化
[inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
[outputn,outputps]=mapminmax(output_train);
%% 第四步 构建BP神经网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练
W1= net. iw{1, 1};%输入层到中间层的权值
B1 = net.b{1};%中间各层神经元阈值
%对训练集的仿真
an0=sim(net,inputn);
train_simu=mapminmax('reverse',an0,outputps); 
..........

image.gif

image.gif编辑

🀄结果分析:

我一共取了27组数据做预测,最后取八组数据做测试集,最后的结果呢也是意料之中的非常好,拟合优度R2达到了99%,其他的回归指标也是非常的nice!

📖三、BP神经网络预测的分析与总结

📝1、大量数据集

首先我们在机器学习的时候无论是做预测还是做图像识别,我们都需要大量数据集的支撑,因为小量数据跑出来的网络具有不确定性,跑出来的结果往往不是很好。

📝2、数据预处理

在训练网络的时候,我们要保证输入的数据一定是足够干净且准确的,也就是说训练集中不可以出现异常值,空缺值,所以我们在拿到一大堆数据时,先对数据进行预处理,然后再训练网络,这样预测得到的数据精准度会很高。

📝3、n的取值

在进行时间序列预测时,上面有提到我们需要取前n个数,那么这个n值取多少才是最合适的呢,这个需要我们好好去思考一下!

数模之路漫漫远兮,以上均为博主个人理解,如有错误,欢迎指正,您的三连就是对俺最大的肯定!😘

image.gif编辑

相关文章
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
587 0
|
7月前
|
编解码 人工智能 JSON
飞桨x昇腾生态适配方案:10_ONNX转OM
本章节主要介绍如何将ONNX模型转化为昇腾AI处理器支持的OM模型,并进行离线推理。通过昇腾张量编译器(ATC),可实现静态OM、动态BatchSize、动态分辨率、动态维度及动态shape等多种模型转换。文中详细说明了ATC工具的使用方法、参数配置、命令格式以及常见问题解决方法,同时提供了具体示例和可视化工具辅助输入参数确认,帮助用户高效完成模型转换与部署。
1196 0
|
9月前
|
存储 机器学习/深度学习 人工智能
TaoAvatar:手机拍出电影级虚拟人!阿里3D高斯黑科技让动捕设备下岗
阿里巴巴最新推出的TaoAvatar技术,通过3D高斯溅射实现照片级虚拟人实时渲染,支持多信号驱动与90FPS流畅运行,将彻底改变电商直播与远程会议体验。
624 8
TaoAvatar:手机拍出电影级虚拟人!阿里3D高斯黑科技让动捕设备下岗
|
8月前
|
数据采集 人工智能 监控
AI时代下的代理IP新机遇:解锁数据、安全与效率的隐形密码
在AI浪潮推动下,代理IP从辅助工具升级为数据采集与传输的核心基础设施。它突破地域限制、规避反爬机制,助力AI模型训练效率提升;通过智能路由和协议优化,实现高效稳定的数据传输;同时满足隐私保护与合规需求。在电商、金融、内容创作等领域,代理IP已成为不可或缺的效率与安全护航者。未来,智能化、合规化、全球化将成为其发展关键趋势。
177 0
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
310 13
|
12月前
|
机器学习/深度学习 分布式计算 供应链
阿里云先知安全沙龙(上海站) ——大模型基础设施安全攻防
大模型基础设施的安全攻防体系涵盖恶意输入防御和基础设施安全,包括框架、三方库、插件、平台、模型和系统安全。关键漏洞如CVE-2023-6019(Ray框架命令注入)、CVE-2024-5480(PyTorch分布式RPC)及llama.cpp中的多个漏洞,强调了代码安全性的重要性。模型文件安全方面,需防范pickle反序列化等风险,建议使用Safetensors格式。相关实践包括构建供应链漏洞库、智能化漏洞分析和深度检测,确保全方位防护。
|
机器学习/深度学习 存储 人工智能
【AI系统】低比特量化原理
模型量化是将浮点数模型参数转化为低比特整数表示的技术,旨在减少模型大小、内存消耗及推理延迟,但会带来精度损失。本文介绍量化的基本原理、优势及挑战,涵盖量化训练、动态与静态离线量化等方法,并探讨线性与非线性量化、饱和与非饱和量化等技术细节。
557 2
【AI系统】低比特量化原理
|
SQL 关系型数据库 网络安全
【一文搞懂PGSQL】2.基础管理
本文档介绍了 PostgreSQL 的基础管理操作,包括登录方式、基本 SQL 命令、防火墙配置 (`pg_hba.conf`)、用户管理(创建、修改、删除用户)及权限管理(数据库、模式、对象权限)。提供了创建数据库、表及用户的具体示例,并展示了如何通过角色组管理用户权限。最后通过一个业务案例演示了如何为开发部门的新业务创建数据库、schema 和用户,并授予相应的操作权限。
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术:现状与未来
本文旨在探讨深度学习领域中模型压缩技术的现状、挑战及未来发展。随着深度学习技术的飞速发展,大型神经网络在许多任务中取得了显著成果,但它们也面临着计算资源消耗大、部署困难等问题。模型压缩技术应运而生,通过减少模型大小和计算量,使得深度神经网络更加高效、灵活。本文首先介绍了模型压缩的基本概念和方法分类,然后详细讨论了当前主流的模型压缩技术及其优缺点,并展望了未来的研究方向和技术趋势。
|
C++
【PTA】L1-020 帅到没朋友 (C++)
【PTA】L1-020 帅到没朋友 (C++)
284 0
【PTA】L1-020 帅到没朋友 (C++)