|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
已经来过一次,斑竹已经给我回了一个程序,我运行了一下,结果误差比较大,下面再把此问题发上来,看哪位大虾能改进或者重写一下。
问题描述:用BP神经网络解决长途话务量预测问题
这是1981-1990这十年我国长途电话的话务量(按张数计算)
年份 电话卡张数(万张)表2.1
1981 22049
1982 23574
1983 26556
1984 31553
1985 38254
1986 42303
1987 51525
1988 64617
1989 78462
1990 106291
利用上面的数据,用三种指数曲线模型分别对我国长途电话话务量进行了拟合建模与预测,三种模型的电话话务量拟合值与预测值如下(按张数计算)
这是拟合出来的长途电话的话务量值(按张数计算:万张)表2.2
年份 最小二乘法拟合 半均值法的拟合值 几何平均法的拟合值
1981 20989.40 21120.30 25124.65
1982 24660.39 25020.73 29491.71
1983 28973.44 29641.49 34617.84
1984 34040.82 35115.59 40634.98
1985 39994.48 41600.64 47697.98
1986 46989.41 49283.33 55988.65
1987 55207.74 58384.83 65720.37
1988 64863.44 68167.17 77143.62
1989 76207.90 81940.76 90552.41
1990 89536.48 97073.35 106291.86
这是预测出来的长途电话的话务量值(按张数计算:万张)表2.3
年份 最小二乘法拟合 半均值法的拟合值 几何平均法的拟合值
1991 105196.19 115000.57 124767.08
1992 123594.74 136238.55 146453.58
1993 145211.16 161398.69 171909.55
1994 170608.24 191205.33 201790.17
1995 200447.20 226516.58 236864.51
1996 235504.93 268394.01 278035.34
1997 276694.16 317906.93 326362.31
1998 325087.30 376617.07 383089.28
1999 381944.27 446169.62 449676.30
2000 448745.39 528566.94 527837.21
我们用1981-1990 年我国长途电话话务量的三种指数模型的拟合值(表2.2 所示) 与实际值(表2.1 所示) 分别作为网络训练样本的输入及训练的期望输出,利用BP 网络进行训练,将训练好的网络用于1991-2000 年三种指数模型的预测值(表2.3 所示) 综合,可获得组合预测结果。其具体作法分为两步。
(1) 学习阶段:首先将1981 年三种指数模型的拟合值作为第一组输入,将1981年我国长途电话话务量的实际值作为这一组的样本输出; 而后取1982 年我国长途电话话务量三种指数模型的拟合值作为样本的第二组输入,将1982 年我国长途电话话务量的实际值作为这一组的样本输出;
依此类推,直到最后取1990 年我国长途电话话务量的三种指数模型拟合值作为最后一组输入,又将1990 年我国长途电话话务量的实际值作为最后一组的输出。
(2) 组合预测 组合预测时,将1991 年我国长途电话话务量的三种指数模型的预测值作为样本输入,即可获得1991 年的输出。而后取1992 年的我国长途电话话务量的三种指数模型的预测值作为样本输入,组合预测1992 年的我国长途电话话务量,依次类推,即可组合预测2000 年我国长途电话话务量。具体计算结果可参见表2.4 和表2.5 。
我们设计的BP 网络的输入特征参数为3 个,隐含层节点数为6 个,输出层节点数为1 个,学习率取0.9 ,收敛度为0.001 ,误差限制在10% ,运行BP算法程序可得如下的拟合值和预测值:
年份神经网络拟合值 1981 22037.5
1982 23568.4
1983 26574.9
1984 31547.2
1985 38293.6
1986 42375.4
1987 51524.6
1988 64682.3
1989 78423.2
1990 106291.44
年份 人工神经网络的预测值
1991 135674.85
1992 156972.55
1993 214867.45
1994 283456.44
1995 317429.66
1996 346729.45
1997 484142.99
1998 501242.76
1999 611224.79
2000 728964.76
我运行了下面程序,出来的结果与实际结果误差很大,哪位大虾可以帮我改一下程序?(将电话卡的张数化为了小数)
P=[0.2098940 0.2466039 0.2897344 0.3404082 0.3999448 0.4698941 0.5520774 0.6486344 0.7620790 0.8953648;
0.2112030 0.2502073 0.2964149 0.3511559 0.4160064 0.4928333 0.5838483 0.6816717 0.8194076 0.9707335;
0.2512465 0.2949171 0.3461784 0.4063498 0.4769798 0.5598865 0.6572037 0.7714362 0.9055241 1.0629186];
T=[0.22049 0.23574 0.26556 0.31553 0.38254 0.42303 0.51525 0.64617 0.78462 1.06291];
[R,Q]=size(P);
[S2,Q]=size(T);
S1=6;
[W1,B1]=rands(S1,R);
[W2,B2]=rands(S2,S1);
A2=purelin(W2*tansig(W1*P,B1),B2);
disp_fqre=100;
max_epoch=100000;
err_goal=0.0001;
lr=0.04;
TP=[disp_fqre max_epoch err_goal lr];
[W1,B1,W2,B2,epochs,errors]=trainbp(W1,B1,'tansig',W2,B2,'purelin',P,T,TP);
P1=[1.0519619 1.2359474 1.4521116 1.7060824 2.0044720 2.3550493 2.7669416 3.2508730 3.8194427 4.4874539;
1.1500057 1.3623855 1.6139869 1.9120533 2.2651658 2.6839401 3.1790693 3.7661707 4.4616962 5.2856694;
1.2476708 1.4645358 1.7190955 2.0179017 2.3686451 2.7803534 3.2636231 3.8308928 4.4967630 5.2783721];
A1=tansig(W1*P1,B1);
A2=purelin(W2*A1,B2) |
|