.
一,说明
对销售额进行bp神经网络预测,销售额如表1
其中前17月数据用作训练样本,来预测第18个月的数据,然后利用前18个月的数据来预测第19个月的数据,以此来预测全部月份的数据,并最终给出真实值与预测值之间的误差 二,程序
程序包括两部分,main.m为主程序,NNetwork.m为训练及预测程序,NNetwork输入为真实数据,输出为预测数据。程序如下 main程序
clear all %清除变量空间
clc %清除命令窗口所有数据 close all %关闭所有figure窗口 % 数据,前17组为训练数据
t=[124.2 117.1 108.4 102.8 99.2 98.6 100.4 100. 99.4 101.2 103.9 101.8 101.5 104.8 105.9 99.3 103.3 113.2 116.5 117.1 116.9 115.8]; %%原始数据(数据的观测值) n=1; %每次预测个数 for i=17:21 s=t(1:i);
[a, anew]=NNetwork(s,n); %调用神经网络预测程序 disp(['预测的第',num2str(i+1),'个值为']);
anew %预测值 pred=a(1,:) ;
pred(end+1)=anew; %加上预测值新数据 end
%画图部分
figure xx=1:i+1;
plot(xx,pred,'r-*',xx,t,'k--+'); legend('预测值','实际值'); xlabel('点数'); ylabel('数据');
精品
.
figure
s=abs(pred-t)./t*100; plot(xx,s,'b-*'); xlabel('点数');
ylabel('误差比例(%)');
disp('实际值的标准差为') std(t) %求标准差
disp('预测值的标准差为') std(pred)
NNetwork程序如下
function [a, anew]=NNetwork(x,n) % x为神经网络训练数组 % n为预测数据的个数
p=1:length(x); %%数据的个数 warning off %数据归一化
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,x); %BP网络训练
net=newff([-1,1],[5,1],{'tansig','tansig','purelin'},'traingdx'); net.trainParam.show=1000; %每1000轮回显示一次结果 net.trainParam.Lr=0.05; %学习速率为0.05 net.trainParam.epochs=5000; %循环5000次 net.trainParam.goal=1e-6; %均方误差 net=train(net,pn,tn); %训练
an=sim(net,pn); %神经网络仿真
a=postmnmx(an,mint,maxt); %还原仿真得到的数据,反归一化 %对新数据进行预测 xx=1:length(x);
pnew=[length(xx):length(xx)+n];%预测数据
pnewn=tramnmx(pnew,minp,maxp);%新数据归一化 anewn=sim(net,pnewn);
anew=postmnmx(anewn,mint,maxt);%还原得到预测值 anew=anew(2);
三,程序运行截图
运行main.m文件,结果如图
精品
.
并给出真实值与预测值的标准差
真是值与预测值的对比曲线及误差比例曲线如图
精品
.
如有侵权请联系告知删除,感谢你们的配合!
精品