备战数学建模34-BP神经网络预测2

2023-11-07

目录

一、辛烷值的预测

1-题目分析与原理介绍

2-神经网络建立过程

3-预测结果分析


BP神经网络模型,包含输入层,隐含层和输出层,正向传播过程是通过输入样本到输入层,通过输入层经过各层隐藏层,最后到达输出层;若输出层输出值与期望值的输出不符,然后误差反向传播,修正各个单元的权值,网络输出的误差达到可接受的程度或进行到预设的学习次数时终止。本次就不介绍理论部分了,直接看例题,需要学习理论部分,可以看我的上一篇神经网络的博客。

一、辛烷值的预测

1-题目分析与原理介绍

我们看一下这个例题1, 对于50组数据,我们把它看成大样本,可以考虑建立神经网络模型进行预测,因为辛烷值作为预测对象,我们将吸光度作为输入,辛烷值作为输出。

使用神经网络进行预测,我们需要知道三个名词:训练集,验证集,测试集,具体如下所示,我们此次选70%作为训练集,剩余30%分别作为验证集和测试集。

关于刚开始使用Matlab写神经网络出现Input data size does not match net.inputs{1}.size问题,是因为训练数据的输入和输出维度不一致,要保证输入的列数等于输出的列数。

2-神经网络建立过程

将吸光度作为输入,辛烷值作为输出,建立神经网络,其中隐藏层神经元的个数为7个,输出层神经元的个数为1个,具体如下:

 50组数据,前面40组作为训练集,后面10组作为测试集,训练集训练模型,测试集进行泛化能力评估,我们计算均方根误差和均值误差。最后对10组数据进行预测。

对网络进行训练,然后进行预测,MATLAB代码和未来10年的预测结果如下所示:

clear; clc
load data_Octane.mat

%%第一步 读取数据
input=X;  %载入输入数据
output=Y;  %载入输出数据

%% 第二步 设置训练数据和预测数据
input_train = input(1:40,:)';
output_train =output(1:40,:)';
input_test = input(41:50,:)';
output_test =output(41:50,:)';
input_10 =  new_X(1:10,:)' ;
output_10 = zeros(10,1)' ;
%节点个数
inputnum=2; % 输入层节点数量
hiddennum=7;% 隐含层节点数量
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};%中间各层神经元阈值

W2 = net.lw{2,1};%中间层到输出层的权值
B2 = net. b{2};%输出层各神经元阈值

%% 第五步 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
net.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
net.trainParam.lr=0.01;                   % 学习速率,这里设置为0.01
net.trainParam.goal=0.00001;                    % 训练目标最小误差,这里设置为0.00001

%% 第六步 BP神经网络训练
net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本

%% 第七步 测试样本归一化
inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化
inputn_10 = mapminmax('apply',input_10,inputps);

%% 第八步 BP神经网络预测
an=sim(net,inputn_test); %用训练好的模型进行仿真
an1 = sim(net,inputn_10) ;%最后10组预测

%% 第九步 预测结果反归一化与误差计算     
test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级
output_10 = mapminmax('reverse',an1,outputps);
error=test_simu-output_test;      %预测值和真实值的误差

%%第十步 真实值与预测值误差比较
figure(1);
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据组数')
ylabel('样本值')
title('BP神经网络测试集的预测值与实际值对比图')

[c,l]=size(output_test);
MAE1=sum(abs(error))/l;
MSE1=error*error'/l;
RMSE1=MSE1^(1/2);
disp(['-----------------------误差计算--------------------------']);
disp(['隐含层节点数为',num2str(hiddennum),'时的误差结果如下:']);
disp(['平均绝对误差MAE为:',num2str(MAE1)]);
disp(['均方误差MSE为:       ',num2str(MSE1)]);
disp(['均方根误差RMSE为:  ',num2str(RMSE1)]);
disp('最后10组辛烷的预测结果为:') ;
disp(output_10) ;
figure(2);
plot(51:60,output_10,'o-') ;
xlabel('样本ID');
ylabel('辛烷预测值') ;

3-预测结果分析

我们看一下测试集预测值和真实值的对比分析,可以发现误差很小,几乎接近于0,可以认为模型训练的较好。

然后我们看一下,最后10组辛烷值的预测结果,具体如下:

 我们看一下预测均方误差和均值误差,具体如下:

我们看一下训练集、验证集、测试集和总体的均方误差随训练次数的变化图像,基本上验证集和测试集5次就收敛了,训练集要6次以上。

将拟合值对真实值回归,拟合优度越高,说明拟合的的效果越好,我们可以看出来集合的拟合优度都是接近于1的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

备战数学建模34-BP神经网络预测2 的相关文章

随机推荐

  • SpringBoot+Vue+POI+Mybatis-Plus+实现数据导出到Excel表格

    作者 Memory 星哥 Wechat QQ 574373426 整理不易 感谢支持 欢迎 收藏 转发 分享 专注IT职业教育多年 学编程找星哥 利用Apache POI将数据导出到Excel 技术栈 准备前端页面 创建SpringBoot
  • 解决Xavier编译ROS工程中cv_bridge找不到的问题

    0 背景 Jetson 系列Xavier 系统18 04 刷机自带opencv4 1 1版本 普通机器安装18 04系统后会自带opencv3 2版本 ROS自18 04 Melodic 不再自带opencv 依赖系统opencv 因此ro
  • spring boot+vue+nginx前后端分离详细部署过程心得!(不包含nginx集群和负载均衡)

    前期准备 spring boot项目 vue 服务器 或者linux虚拟机可联网 环境准备 服务器上有数据库 java环境即可 java会打包 vue使用build打包项目 1 安装nginx到服务器 虚拟机 下载的相关包 nginx安装包
  • Kafka各个版本差异总结

    Kafka各个版本差异总结 问题导读 1 Kafka如何做到升级不停机 2 Kafka各个版本有哪些显著变化 3 Kafka新版本设计哪些协议 Kafka 2 0 0引入了线程协议的变化 通过遵循下面建议的滚动升级计划 您可以保证在升级期间
  • python语言开发环境搭建_Python学习之路 (一)开发环境搭建-Go语言中文社区

    目录 目录 正文 前言 python3应该是Python的趋势所在 当然目前争议也比较大 这篇随笔的主要目的是记录在centos6 7下搭建python3环境的过程 以及碰到的问题和解决过程 另外 如果本机安装了python2 尽量不要管他
  • SpringCloud-服务网关

    服务网关 GateWay 核心简介 上一代zuul 1 x官网 Gateway官网 概述 Cloud全家桶中有个很重要的组件就是网关 在1 x版本中都是采用的Zuul网关 但在2 x版本中 zuul的升级一直跳票 SpringCloud最后
  • # Vue 配置前端后端路由地址

    Vue 配置前端后端路由地址 文章目录 Vue 配置前端后端路由地址 前端路由配置 配置项目地址 配置页面路由 路径跳转 后端路由配置 配后端请求地址 前端路由配置 配置项目地址 修改 config index js的配置文件 proxyT
  • jvm监控工具之jvisualvm&jmc

    一 jvisualvm 监控 方法一 使用 jstatd 1 创建策略文件 jstatd all policy 内容如下 grant codebase file java home lib tools jar permission java
  • 许奔创新社-第7问:构建创意的液态网络需要哪些条件?

    在 创意诞生的关键要素 中 我们曾提到一个非常重要的问题 对于体量差异不大的液态网络 为什么有的能产出大量高价值的创意 而剩下的却如一潭死水般无法产出分毫创意 造成此等差距的原因究竟是什么 液态网络这个词 是由创新者史蒂文 约翰逊 Stev
  • iptables 命令

    NAME iptables administration tool for IPv4 packet filtering and NAT SYNOPSIS iptables ADC 指定链的规则 A 添加 D 删除 C 修改 iptables
  • 【Neo4j】第 4 章:图形数据科学Library and Path Finding

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Java RMI 入门

    Java RMI 入门 如何通信 实战 完整代码 Java RMI 指 JDK 内置的关于实现远程方法调用 Remote Method Invocation 的 API 这些 API 位于包 java rmi 中 通过 Java RMI 可
  • java事件监听机制(观察者设计模式的实际运用)

    package cn yang test controller java的事件监听机制和观察者设计模式 Created by Dev yang on 2016 3 1 public class Demo public static void
  • QT-MQTT客户端和服务端介绍

    MQTT Message Queuing Telemetry Transport 是一种基于发布 订阅模式的消息传递协议 在QT中使用MQTT 可以轻松地创建MQTT客户端和服务端 并实现设备之间的通信 在QT中 可以使用Qt MQTT模块
  • 7个Python有趣的lambda应用

    7个Python有趣的lambda应用 1 排序sort 2 寻找最大值max 3 查找最小值min 4 filter 5 map 6 reduce 7 Sorted 源码 1 排序sort 2 寻找最大值max 3 查找最小值min 4
  • javascript数据验证

    校验是否全由数字组成 function isDigit s var patrn 0 9 1 20 if patrn exec s return false return true 校验登录名 只能输入5 20个以字母开头 可带数字 的字串
  • 2021美赛E题

    2021年 问题E 重新优化食物系统 最近的事件向我们表明 我们的全球粮食系统即使在世界的某些地区也是不稳定的 它通常服务于全世界 这些不稳定的部分原因是我们目前的全球气候变化 庞大的国内和国际食品生产商和经销商体系 这个食物系统 使食物的
  • 2022-15-Java 设计模式-抽象工厂模式

    在工厂方法模式中 我们使用一个工厂创建一个产品 一个具体工厂对应一个具体产品 但有时候我们需要一个工厂能够提供多个产品对象 而不是单一的对象 这个时候我们就需要使用抽象工厂模式 在介绍抽象工厂模式前 我们先厘清两个概念 产品等级结构 产品等
  • 【Java书笔记】:《Redis 深度历险:核心原理和应用实践》分布式锁,延时队列,位图,HyperLogLog,布隆过滤器,漏斗限流,GeoHash,Scan,管道,事务,主从,Redis源码

    Redis 深度历险 核心原理和应用实践 目 录 开篇 授人以鱼不若授人以渔 Redis 可以用来做什么 7 由 Redis 面试想到的 7 小册的内容范围 8 Redis 可以做什么 8 基础 万丈高楼平地起 Redis 基础数据结构 1
  • 备战数学建模34-BP神经网络预测2

    目录 一 辛烷值的预测 1 题目分析与原理介绍 2 神经网络建立过程 3 预测结果分析 BP神经网络模型 包含输入层 隐含层和输出层 正向传播过程是通过输入样本到输入层 通过输入层经过各层隐藏层 最后到达输出层 若输出层输出值与期望值的输出