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

所用数据集前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. ubuntu mysql 多端口_ubuntu 16.04下mysql5.7.17开放远程3306端口
  3. java 整数 字节数组_将整数转换为字节数组(Java)
  4. python编程用户登陆c_django实现用户登陆功能详解
  5. C语言拼接字符串 -- 使用strcat()函数
  6. hdu 4292 Food 最大流
  7. 通过path绘制点击区域
  8. 横空出世!IDEA画图神器来了,比Visio快10倍!
  9. 亲,如果你笑了,记住给我留言!
  10. 我的k8s随笔:命令实践
  11. linux系统开启多路径,Linux系统怎么配置多路径
  12. 分享一些Java常见的面试题,大厂都爱用
  13. 基于隐马尔可夫模型的有监督词性标注
  14. 分享240道有意思的逻辑思维题
  15. 2019深圳罗湖民办小学有哪些?查查吧深圳学区地图
  16. Android Notification使用
  17. 幸福课第11讲_笔记
  18. STM32F103C8T6 I/O口驱动4位共阳数码管
  19. Eclipse基础知识
  20. Apple Developer文档笔记(一)AppKit App Structure

热门文章

  1. 海思3559:BT656调试笔记
  2. 【笔记】判断今年是闰年还是平年
  3. 【Android原生开发】艺术圈APP
  4. 你必须要知道的九种浏览器端缓存
  5. 用于金融科技应用开发的高性能图表控件
  6. vivado学习之PS与PL通信
  7. mac mysql 端口被占用_Mysql3306端口被占用无法启动解决办法
  8. 京瓷Kyocera CS 3050ci 一体机驱动
  9. 极客战记计算机科学2村庄守卫,「网易官方」极客战记(codecombat)攻略-森林-村庄守卫-village-warder...
  10. dz调用图片PHP写法,100分discuz列表页调用帖子图片