以下是我编写的BP网络预测程序:
其中,20*9的矩阵代表不同时间段采集到的180个数据。
clear;
clc;
%20*9的矩阵数据
x=[202.44 209.94 207.57 194.97 209.01 196.66 195.56 170.88 186.61
172.72 176.31 155.45 169.16 180.53 189.18 189.04 210.74 234.61
243.75 278.08 348.07 440.97 455.06 590.05 581.35 589.54 685.23
770.86 844.12 1106.2 1435.2 1666 2047.8 1945.3 1568.1 1698.2
1555.7 1501.5 1353.6 1272.9 1297.3 1197.2 1252.2 1109.7 1246.7
1403.0 1356.3 1424.5 1352.7 1349.6 1408.5 1285.2 1207.1 1282.7
1349.5 1328.7 1301.4 1292.5 1369.2 1166.2 1034.7 1453.9 1333.7
1261.4 1337.6 1526.3 1466.2 1606.0 1842.5 1871.9 2091.8 1811.6
1847.7 1967.9 1714.9 1620.9 1623.2 1623.7 1561.0 1438.7 1321.9
1278.2 1240.2 1244.8 1160.0 1120.6 855.87 834.47 639.17 538.95
441.24 353.52 252.87 212.87 199.40 202.74 224.20 200.46 201.65
175.62 186.55 190.55 189.82 195.32 170.28 174.15 176.56 167.52
189.45 194.01 194.37 207.64 231.31 234.97 229.81 278.68 335.24
460.49 503.73 543.73 587.44 536.45 559.19 732.17 914.22 1152.2
1469.6 1741.9 2168.2 2073.0 1792.5 1683.0 1518.3 1478.4 1281.5
1131.7 1239.9 1367.0 1180.1 1318.3 1287.6 1347.3 1312.0 1383.8
1339.3 1315.0 1363.5 1374.1 1460.0 1305.0 1327.8 1427.1 1411.6
1208.2 1153.4 1114.0 1198.8 1338.0 1298.3 1199.7 1460.0 1523.7
1540.0 1742.1 1773.2 1888.0 1776.5 1800.2 1763.4 1678.7 1780.6
1725.3 1660.2 1662.1 1535.0 1424.8 1393.6 1309.9 1198.3 1109.3];
% x=reshape(x,18,10);
% [pl,ps]=mapminmax(x,0,1);%归一化
for i=1:170;%共170组输入
y(i,:)=x(i:i+9);
tt(i)=x(i+10);
end
for i=1:120;
%10行*9列的输入(10组)
p=[ y(i,:), y(i+1,:), y(i+2,:), y(i+3,:), y(i+4,:), y(i+5,:), y(i+6,:), y(i+7,:), y(i+8,:), y(i+9,:)]';
t=[tt(i),tt(i+1),tt(i+2),tt(i+3),tt(i+4),tt(i+5),tt(i+6),tt(i+7),tt(i+8),tt(i+9)]';
input=[ y(i+1,:), y(i+2,:), y(i+3,:), y(i+4,:), y(i+5,:), y(i+6,:), y(i+7,:), y(i+8,:), y(i+9,:), y(i+10,:)]';
%net=newff(minmax(p),[10,1],{'tansig','purelin'},'trainrp')
net=newff(minmax(p),minmax(t),[10,1],{'tansig','purelin','purelin'},'trainlm')
%y1=sim(net,p(i));
%[net,tr] = feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam);
net.trainparam.epochs=50000;
net.trainparam.goal=0.00001;
net.trainParam.lr=0.01;
net.trainparam.show=50;
net.trainFcn='traincgb';
net=train(net,p,t);
%net.iw{1,1}%隐层权值
%net.b{1}%隐层阈值
output=sim(net,input);
A(i)=output(10);
end
%[trainoutput,pd]=mapminmax('reverse',A,ps);%反归一化
input=x(20:139);
plot(linspace(0,1,length(A)),A,'*');
hold on
plot(linspace(0,1,length(A)),input,'-')
hold off
预测效果截图如下:
可以肯定的是,该预测结果是错误的,不可能预测结果为0误差。大家帮忙看看程序有什么问题吧?
或者说说BP网络数据预测程序的思路也行。我刚接触神经网络,很多地方不懂,恳请您的指教!!谢谢~~
截图.jpg
(81.74 KB, 下载次数: 14)
2013-3-2 16:33 上传