记录一下比较完整的BP神经网络预测模型
只做了部分解释,比较粗糙,只是记录一下
所用数据集前12行如下
(其实只用了第2,3行数据(年,月),第5行数据(月温度值),第七行(年/月))
(用第七行是因为想要x轴显示为'年/月'格式的日期)
所用代码如下:
%% matlab编程实现的BP神经网
络时间序列预测模型
% 清空环境变量
clear
close all %关闭所有图形窗口
clc
[StepData,txt]=xlsread('C:\Users\lenovo\Desktop\年月1.xlsx');%读取csv文件
%%第一步 读取数据
input=StepData(:,2:3); %载入输入数据年月
output=StepData(:,5); %载入输出数据月温度
X1=txt(2:1213,7);
xn=datenum(X1);
X2=txt(1214:1487,7);
xnn=datenum(X2);
X=txt(2:1487,7);
xnnn=datenum(X);
%% 第二步 设置训练数据和预测数据
% 注意要将指标变为列向量
input_train = input(1:1212,:)';
output_train =output(1:1212,:)';
input_test = input(1213:1486,:)';
output_test =output(1213:1486,:)';
%节点个数
inputnum=1213; % 输入层节点数量,也就是训练集样本数 1212+1
hiddennum=4; % 隐含层节点数量
outputnum=1; % 输出层节点数量 计算的是月温度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); % 对样本数据进行归一化
%% 第八步 BP神经网络预测
an=sim(net,inputn_test); %用训练好的模型进行仿真
%% 第九步 预测结果反归一化与误差计算
test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级
error=test_simu-output_test; %预测值和真实值的误差
%训练集仿真
an0=sim(net,inputn);
train_simu=mapminmax('reverse',an0,outputps);
%训练集图
figure('units','normalized','position',[0.119 0.2 0.38 0.5])
plot(xn,output_train,'bo-','markersize',1,'markerfacecolor','b')
datetick('x','yyyy-mm')
hold on
plot(train_simu,'rs-','markersize',2,'markerfacecolor','r')
grid on
legend('Actual value','Predicted value')
xlabel('Date')
ylabel('Temperature')
title('Plot of the predicted and actual values of the training set')
%%第十步 真实值与预测值误差比较
figure('units','normalized','position',[0.119 0.2 0.38 0.5])
plot(xnn,output_test,'bo-','markersize',1,'markerfacecolor','b')
datetick('x','yyyy-mm')
hold on
plot(xnn,test_simu,'rs-','markersize',1,'markerfacecolor','r')
grid on
legend('Actual value','Predicted value')
xlabel('Date')
ylabel('Temperature')
title('Plot of the predicted and actual values of the test se')
%描述过去1899至2021年气温
figure('units','normalized','position',[0.119 0.2 0.38 0.5])
plot(xn,output_train,'go-','markersize',1,'markerfacecolor','g')
datetick('x','yyyy-mm')
hold on
plot(xn,train_simu,'bs-','markersize',1,'markerfacecolor','b')
hold on
plot(xnn,output_test,'go-','markersize',1,'markerfacecolor','g')
hold on
plot(xnn,test_simu,'bs-','markersize',1,'markerfacecolor','b')
grid on
legend('Actual value','Predicted value')
xlabel('Date')
ylabel('Temperature')
title('Graph of actual and predicted temperature from 1899 to 2021')
%显示误差
[c,l]=size(output_test);
MAE1=sum(abs(error))/l;
MSE1=sum(error.^2)/l;
RMSE1=MSE1^(1/2);
MAPE1=sum(abs(error./output_test))/l;
R=corrcoef(output_test,test_simu);
R2=R(1,2)^2;
disp(['Calculation of error:'])
disp(['Error results when the number of hidden layer nodes is ',num2str(hiddennum)])
disp(['Mean absolute error(MAE): ',num2str(MAE1)])
disp(['Mean square error(MSE): ',num2str(MSE1)])
disp(['Root mean square error(RMSE): ',num2str(RMSE1)])
disp(['Mean relative error(MAPE): ',num2str(MAPE1)])
disp(['Coefficient of determination(R^2): ',num2str(R2)])
%预测2050年和2100年每月温度
x=zeros(24,2);
for i=1:1:12
x(i,1)=2050;
x(i,2)=i;
x(i+12,1)=2100;
x(i+12,2)=i;
end
predict_y = zeros(24,1); % 初始化predict_y
pre_test=mapminmax('apply',x',inputps);% 对预测数据进行归一化
for i = 1: 24
result = sim(net, pre_test(:,i));
predict_y(i) = result;
end
disp('Monthly temperature projections for 2050 and 2100:')
predict_y=mapminmax('reverse',predict_y,outputps); %把预测结果还原
disp(predict_y)
%预测2050年和2100年年温度
disp('Predicted mean temperature for 2050 and 2100:')
y=zeros(2,1);
for i = 1: 12
y(1)=predict_y(i) +y(1);
y(2)=predict_y(i+12) +y(2);
end
y(1)=y(1)/12;
y(2)=y(2)/12;
disp(y)
记录一下比较完整的BP神经网络预测模型相关推荐
- BP神经网络预测模型输入数据表是一个表还是可以多个表
如何建立bp神经网络预测 模型 . 建立BP神经网络预测模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测2 ...
- bp神经网络预测模型python,r语言bp神经网络预测
如何建立bp神经网络预测 模型 . 建立BP神经网络预测模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测2 ...
- bp神经网络预测模型实例,BP神经网络预测模型
如何建立bp神经网络预测 模型 建立BP神经网络预测 模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测20 ...
- bp神经网络预测模型优点,什么是BP神经网络模型?
灰色理论预测和BP神经网络预测哪个难 谷歌人工智能写作项目:神经网络伪原创 初学者对BP神经网络的疑惑 伤寒.副伤寒流行预测模型(BP神经网络)的建立 由于目前研究的各种数学模型或多或少存在使用条件的 ...
- bp神经网络预测模型优点,bp神经网络缺点及克服
BP神经网络的核心问题是什么?其优缺点有哪些? 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规则不 ...
- bp神经网络预测模型原理,BP神经网络预测模型
深度学习与神经网络有什么区别 深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化. 五.DeepL ...
- bp神经网络预测模型例题,bp神经网络模型是什么
1.BP神经网络中隐藏层节点个数怎么确定最佳? 1.神经网络算法隐含层的选取 1.1 构造法 首先运用三种确定隐含层层数的方法得到三个隐含层层数,找到最小值和最大值,然后从最小值开始逐个验证模型预测误 ...
- bp神经网络预测模型优点,bp神经网络相关性分析
BP神经网络的可行性分析 神经网络的是我的毕业论文的一部分4.人工神经网络人的思维有逻辑性和直观性两种不同的基本方式. 逻辑性的思维是指根据逻辑规则进行推理的过程:它先将信息化成概念,并用符号表示,然 ...
- bp神经网络预测模型_基于BP神经网络模型的河南省严重精神障碍患者服药依从性影响因素分析...
发表文章 文章发表背景1 严重精神障碍主要包括精神分裂症.分裂情感性障碍.偏执性精神病等6种疾病,目前此类患者的主要治疗方法是社区抗精神病药维持治疗,虽然各类抗精神病药不断问世,但是患者服药依从性情况 ...
最新文章
- 【五】搜索推荐技术在电商导购领域的应用——截图小王子
- 解读最新的 Xamarin 更新
- vs 2017 静态库 动态库 的初步使用
- c语言中执行一次的函数once,iOS只执行一次的方法
- JetBrains 2020 Java调查报告:中国开发者使用比例最高,Java 8最受欢迎
- java的环境变量设置_Java开发环境不再需要配置classpath
- Java多线程-生产者消费者问题(多个消费者多个生产者)
- mysql基础2-数据库的相关操作
- ModuleNotFoundError: No module named ‘models‘
- python怎么换背景颜色_Python给照片换底色(蓝底换红底)
- 新媒体运营是什么专业
- Java中修饰变量和方法的关键字总结分析
- iOS上架详细通关教程(提交到AppStore)
- 计算机主板的典型布局,主板布局
- 安装Linux系统后必做的几件事
- 第一章 老虎Linux简介
- 干货| 生鲜电商的冷库内部该怎么设计(含案例)
- POJO和PO的概念,区别
- 如何在MSDN上下载操作系统
- 【学习笔记】Transformers库笔记
热门文章
- 使用SQL语句清空数据库所有表的数据
- C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝
- 根据某个字段来查询筛选数据
- C++设计模式——备忘录模式(memento pattern)
- 可爱的 __exit__() 方法(配合 with ... as ... 作用,优雅实现 try: ... except ... 的排错“功能”)
- 云有约 | 超融合的远航探险 看泽塔云2019年如何披荆斩棘?
- req请求的参数req.params - req.query - req.body
- qrcode生成二维码插件
- 我的世界java萌新须知_我的世界:萌新必备小知识,你全部知道吗?
- mac 系统 钥匙串 中看不到对应证书的私钥