bp网络实现预测
本例题采用了一个线性序列,在实际应用中可以应用不同的数据进行预测,例如每天的温度,产量等。
具体实现如下:
clear %本例题采用了一个线性序列,在实际应用中可以应用不同的数据进行预测,例如每天的温度,产量等 % day=[1,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ... % 20 ,21, 22 ,23, 24 ,25 ,26, 27, 28 ,29 ,30,... % 31 ,32, 33, 34, ]; %%本例题采用了一个sin序列 Test=1:1:34; day=sin(Test); dayhistory=day(1:30);%取其中前三十个数据作为历史数据样本 dayhismod=reshape(dayhistory,5,6);% 将历史数据分为6个样本,每个大小为5,其中reshape是以列排序的 dayday=day(1:25);% 取其中的前25个 daypost=day(6:30);%取其中的随后25个 p=reshape(dayday,5,5);% 将前25个数据分为5行5列矩阵作为网络的训练输入样本 t=reshape(daypost,5,5); %将随后的25个分为5行5列矩阵作为网络的目标输出向量 daylast=day(26:30); h3=reshape(daylast,5,1);% 将倒数第二个样本作为网络测试时的输入样本 r=6:30; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 新建bp网络 net=newff(minmax(p),[5,5],{'purelin' 'purelin'},'trainlm'); y1=sim(net,p); net.trainParam.epochs=2000; % 训练次数 nettrainParam.goal=1e-3; % 误差期望值 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%训练网络 [net,tr,Y,E]=train(net,p,t); %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 网络测试 y21=sim(net,p); y2=reshape(y21,1,25); clf plot(r,y2,'b-^') hold on plot(1:34,day,'r-v') %%%%%%%%%%%%%%%%%%%%%%%%%%%% 预测 y3=sim(net,h3); plot(31:35,y3,'-*') hold on %%%%%%%%%%%%%%%%%%%%%%%%%%%% 给出说明性文字和图例 title('神经网络训练结果'); xlabel('序列'); ylabel('仿真输出结果'); legend('仿真模拟值','实际值','神经网络预测值','Location','NorthWest'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 绘制误差曲面 figure; x=1:5; y=1:5; plot3(x,y,E(x,y))