最近一直在做一个关于用BP神经网络预测网络流量的仿真实验,数据来源比较准确,都是实测出来的数值,在完成编程之后,运行的效果非常的不满意,基本上预测值和真实值相差太大 。有图为证:
我查阅过相关资料,BP在预测这块的效果是比较好的,但是预测出来的效果的确是不尽人意。算法设想的是利用前五天每天每小时的网络流量,来预测第六天每小时的流量,即24小时流量,最近,自己也在不停的查阅相关资料,估计是实验中的样本组合出现问题,根据资料上的说明,是说利用滚动式法来进行预测,即第一天到第五天预测第六天,第二天到第六天预测第七天,但是这样的意思,反映到算法上到底是如何表示呢,而我自己的表示就是:输入值p(:,1)+p(:,2)+p(:,3)+p(:,4)+p(:,5),目标值为p(:,6),P是连续15天每天每小时的流量数值的数组,共15行24列,不知道是不是我的输入值的组合出了问题,导致预测的结果误差如此之大,想请教各位高手们,来帮我看看这个问题,我不胜感激!
114147lb8zs24pm6e6bcp2.jpg (230.74 KB, 下载次数: 12)
2013-12-13 01:15 上传
那我现在吧程序完整的贴出来,请各位高手们帮我指正哈,主要就是样本训练那块,我的本意是希望利用前三天的流量来预测第四天的流量,但是预测的结果,不太理想,谢谢你们啦哈~p=[1365 1779 1499 1343 1699 1305 1481 1000 1496 6690 2963 5919 3600 4594 4882 5198 3231 7478 6664 4417 4667 3545 3964 4800;
3085 3096 799 1708 732 1586 2798 2220 2565 5164 4868 2949 3219 3556 4251 3380 6494 3182 3043 4707 3805 2095 3107 6746;
3124 2636 1407 1347 1896 1887 2627 3106 2282 3622 4862 2805 2843 2305 1590 2515 3864 2827 4104 2354 488 2144 1380 2274;
1250 3635 774 1623 1279 1269 1299 1516 1730 1630 1779 3128 2989 4037 2027 2731 2165 1972 2168 3139 2795 2544 3084 5177;
4202 2527 2004 896 754 1441 1717 1257 2870 2324 3927 1998 2886 4325 2806 2899 2788 3681 2943 3233 1996 3255 4332 3281;
2504 587 1297 746 641 1061 1588 1697 4502 9879 3435 2961 6507 2343 1806 3593 2746 2974 3275 2755 2817 2582 2868 3161;
2247 2031 1309 1725 1243 1402 1568 1069 2986 9115 4041 1411 2838 5794 11516 4201 1833 3329 1838 3510 1129 1174 1832 1273;
2086 1656 1988 1030 1563 847 1097 737 1750 2384 2094 1715 6860 13602 2927 3130 3174 1432 750 1853 2265 1794 1691 2784;
1754 1457 1543 745 1158 1338 1465 755 5146 2207 4985 3794 3481 3791 2184 4355 3607 4106 2550 2048 2144 2654 1590 3875;
2131 2919 1708 1252 1470 1228 1576 1137 1152 2412 4059 2344 12736 1492 1250 1622 988 1776 1461 1467 1032 1089 1000 2096;
1417 1527 1572 1776 1296 1263 1557 1013 1882 1361 2073 1854 1200 2090 1003 1527 1606 2105 2195 2706 2113 1380 1707 2565;
960 1784 1022 742 1057 946 1432 2653 3702 4395 3073 4737 2301 3136 3013 2240 3781 7096 2002 1545 1273 1651 1490 11066;
1043 1496 1203 1592 1157 1490 1320 1224 1692 2201 7071 2600 1746 1785 1413 4907 1618 2153 1804 1353 899 1031 820 487;
1279 940 1070 1139 1239 1150 1147 885 1044 1567 3372 4040 5060 1331 2749 1102 1685 6137 4984 6685 3870 4169 5370 6596;
6343 2527 2945 2578 1303 1576 2036 5365 24355 13025 6308 6200 5936 6747 5206 10394 5939 10414 6479 5385 3025 2126 4698 7238;
2208 3857 1224 1404 1361 962 1654 3103 2104 3201 2888 2760 2355 2170 1950 2496 1045 1923 2389 1427 1461 864 1163 1854;
2120 1744 1547 1547 1298 1046 1709 2185 1640 7986 2198 1742 1921 1155 2621 1050 1219 1208 2313 1851 811 1860 2395 4946;
2812 2064 1405 1054 718 886 725 1568 14499 7806 4884 5974 8107 5598 2184 2592 2781 2311 2391 1888 2384 5279 3933 2200;]';
p=p./1024;
t=[1250 3635 774 1623 1279 1269 1299 1516 1730 1630 1779 3128 2989 4037 2027 2731 2165 1972 2168 3139 2795 2544 3084 5177;
4202 2527 2004 896 754 1441 1717 1257 2870 2324 3927 1998 2886 4325 2806 2899 2788 3681 2943 3233 1996 3255 4332 3281;
2504 587 1297 746 641 1061 1588 1697 4502 9879 3435 2961 6507 2343 1806 3593 2746 2974 3275 2755 2817 2582 2868 3161;
2247 2031 1309 1725 1243 1402 1568 1069 2986 9115 4041 1411 2838 5794 11516 4201 1833 3329 1838 3510 1129 1174 1832 1273;
2086 1656 1988 1030 1563 847 1097 737 1750 2384 2094 1715 6860 13602 2927 3130 3174 1432 750 1853 2265 1794 1691 2784;
1754 1457 1543 745 1158 1338 1465 755 5146 2207 4985 3794 3481 3791 2184 4355 3607 4106 2550 2048 2144 2654 1590 3875;
2131 2919 1708 1252 1470 1228 1576 1137 1152 2412 4059 2344 12736 1492 1250 1622 988 1776 1461 1467 1032 1089 1000 2096;
1417 1527 1572 1776 1296 1263 1557 1013 1882 1361 2073 1854 1200 2090 1003 1527 1606 2105 2195 2706 2113 1380 1707 2565;
960 1784 1022 742 1057 946 1432 2653 3702 4395 3073 4737 2301 3136 3013 2240 3781 7096 2002 1545 1273 1651 1490 11066;
1043 1496 1203 1592 1157 1490 1320 1224 1692 2201 7071 2600 1746 1785 1413 4907 1618 2153 1804 1353 899 1031 820 487;
1279 940 1070 1139 1239 1150 1147 885 1044 1567 3372 4040 5060 1331 2749 1102 1685 6137 4984 6685 3870 4169 5370 6596;
6343 2527 2945 2578 1303 1576 2036 5365 24355 13025 6308 6200 5936 6747 5206 10394 5939 10414 6479 5385 3025 2126 4698 7238;
2208 3857 1224 1404 1361 962 1654 3103 2104 3201 2888 2760 2355 2170 1950 2496 1045 1923 2389 1427 1461 864 1163 1854;
2120 1744 1547 1547 1298 1046 1709 2185 1640 7986 2198 1742 1921 1155 2621 1050 1219 1208 2313 1851 811 1860 2395 4946;
2812 2064 1405 1054 718 886 725 1568 14499 7806 4884 5974 8107 5598 2184 2592 2781 2311 2391 1888 2384 5279 3933 2200;
2911 1228 1411 1315 1061 751 1539 1181 1181 2478 7403 3854 4997 2553 2646 3560 4587 1675 2222 2261 1379 993 1948 3253;]';
t=t./1024;
u=t;
%%%%%%归一到 0 1 之间
for i=1:24
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
for i=1:24
t(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));
end
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
net=newff(threshold,[95,24],{'tansig','purelin'},'traingdx');
net.trainParam.epochs=5000;
%训练次数
net.trainParam.goal=1e-4;
%训练结束的目标
net.trainParam.lr=0.06;
trainParam.lr_inc =1.1;
%这个应该是学习率
net.trainParam.show=50;
P=[p(:,1)+p(:,2)+p(:,3) p(:,2)+p(:,3)+p(:,4) p(:,3)+p(:,4)+p(:,5) p(:,4)+p(:,5)+p(:,6) p(:,5)+p(:,6)+p(:,7) p(:,6)+p(:,7)+p(:,8) p(:,7)+p(:,8)+p(:,9) p(:,8)+p(:,9)+p(:,10) p(:,9)+p(:,10)+p(:,11) p(:,10)+p(:,11)+p(:,12) p(:,11)+p(:,12)+p(:,13) p(:,12)+p(:,13)+p(:,14) p(:,13)+p(:,14)+p(:,15) p(:,14)+p(:,15)+p(:,16) p(:,15)+p(:,16)+p(:,17)];
T=[t(:,1) t(:,2) t(:,3) t(:,4) t(:,5) t(:,6) t(:,7) t(:,8) t(:,9) t(:,10) t(:,11) t(:,12) t(:,13) t(:,14) t(:,15)];
%输入样本的输入和目标
net=train(net,P,T);
%训练网络
test=[p(:,16)+p(:,17)+p(:,18)];
out=sim(net,test);%仿真预测,归一化后的实际输出
%反归一化
for i=1:24
predict(i)=out(i)*(max(u(i,:))-min(u(i,:)))+ min(u(i,:));
end
predict=abs(predict)
%绘制预报曲线
y=[u(:,16)];
X=0:23;
figure(1);
plot(X,predict,'r*-',X,y,'bo-');
legend('predicted data','actual data')
xlabel('00:00~23:00(h)');
ylabel('network traffic(M)');