只做了部分解释,比较粗糙,只是记录一下

所用数据集前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神经网络预测模型相关推荐

  1. BP神经网络预测模型输入数据表是一个表还是可以多个表

    如何建立bp神经网络预测 模型 . 建立BP神经网络预测模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测2 ...

  2. bp神经网络预测模型python,r语言bp神经网络预测

    如何建立bp神经网络预测 模型 . 建立BP神经网络预测模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测2 ...

  3. bp神经网络预测模型实例,BP神经网络预测模型

    如何建立bp神经网络预测 模型 建立BP神经网络预测 模型,可按下列步骤进行:1.提供原始数据2.训练数据预测数据提取及归一化3.BP网络训练4.BP网络预测5.结果分析现用一个实际的例子,来预测20 ...

  4. bp神经网络预测模型优点,什么是BP神经网络模型?

    灰色理论预测和BP神经网络预测哪个难 谷歌人工智能写作项目:神经网络伪原创 初学者对BP神经网络的疑惑 伤寒.副伤寒流行预测模型(BP神经网络)的建立 由于目前研究的各种数学模型或多或少存在使用条件的 ...

  5. bp神经网络预测模型优点,bp神经网络缺点及克服

    BP神经网络的核心问题是什么?其优缺点有哪些? 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规则不 ...

  6. bp神经网络预测模型原理,BP神经网络预测模型

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017-01-10最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己的思路,做下删减,细化. 五.DeepL ...

  7. bp神经网络预测模型例题,bp神经网络模型是什么

    1.BP神经网络中隐藏层节点个数怎么确定最佳? 1.神经网络算法隐含层的选取 1.1 构造法 首先运用三种确定隐含层层数的方法得到三个隐含层层数,找到最小值和最大值,然后从最小值开始逐个验证模型预测误 ...

  8. bp神经网络预测模型优点,bp神经网络相关性分析

    BP神经网络的可行性分析 神经网络的是我的毕业论文的一部分4.人工神经网络人的思维有逻辑性和直观性两种不同的基本方式. 逻辑性的思维是指根据逻辑规则进行推理的过程:它先将信息化成概念,并用符号表示,然 ...

  9. bp神经网络预测模型_基于BP神经网络模型的河南省严重精神障碍患者服药依从性影响因素分析...

    发表文章 文章发表背景1 严重精神障碍主要包括精神分裂症.分裂情感性障碍.偏执性精神病等6种疾病,目前此类患者的主要治疗方法是社区抗精神病药维持治疗,虽然各类抗精神病药不断问世,但是患者服药依从性情况 ...

最新文章

  1. 【五】搜索推荐技术在电商导购领域的应用——截图小王子
  2. 解读最新的 Xamarin 更新
  3. vs 2017 静态库 动态库 的初步使用
  4. c语言中执行一次的函数once,iOS只执行一次的方法
  5. JetBrains 2020 Java调查报告:中国开发者使用比例最高,Java 8最受欢迎
  6. java的环境变量设置_Java开发环境不再需要配置classpath
  7. Java多线程-生产者消费者问题(多个消费者多个生产者)
  8. mysql基础2-数据库的相关操作
  9. ModuleNotFoundError: No module named ‘models‘
  10. python怎么换背景颜色_Python给照片换底色(蓝底换红底)
  11. 新媒体运营是什么专业
  12. Java中修饰变量和方法的关键字总结分析
  13. iOS上架详细通关教程(提交到AppStore)
  14. 计算机主板的典型布局,主板布局
  15. 安装Linux系统后必做的几件事
  16. 第一章 老虎Linux简介
  17. 干货| 生鲜电商的冷库内部该怎么设计(含案例)
  18. POJO和PO的概念,区别
  19. 如何在MSDN上下载操作系统
  20. 【学习笔记】Transformers库笔记

热门文章

  1. 使用SQL语句清空数据库所有表的数据
  2. C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝
  3. 根据某个字段来查询筛选数据
  4. C++设计模式——备忘录模式(memento pattern)
  5. 可爱的 __exit__() 方法(配合 with ... as ... 作用,优雅实现 try: ... except ... 的排错“功能”)
  6. 云有约 | 超融合的远航探险 看泽塔云2019年如何披荆斩棘?
  7. req请求的参数req.params - req.query - req.body
  8. qrcode生成二维码插件
  9. 我的世界java萌新须知_我的世界:萌新必备小知识,你全部知道吗?
  10. mac 系统 钥匙串 中看不到对应证书的私钥