zhengdg 发表于 2006-6-6 16:54

紧急求助:BP预测问题

已经来过一次,斑竹已经给我回了一个程序,我运行了一下,结果误差比较大,下面再把此问题发上来,看哪位大虾能改进或者重写一下。
问题描述:用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=;
=size(P);
=size(T);
S1=6;
=rands(S1,R);
=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=;
=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)

zhengdg 发表于 2006-6-6 17:18

今天就要用啊!哪位大虾再帮一下哦!

在线等待,QQ215302868

zhengdg 发表于 2006-6-6 17:34

斑竹给过的程序

下面是斑竹给过的程序,谁还能再给个程序?谢谢了,毕业设计急用!
%输入样本P
P =[0.2099 0.2466 0.2897 0.3404 0.3999 0.4699 0.5521 0.6486 0.7621;
0.2112 0.2502 0.2964 0.3512 0.4160 0.4928 0.5838 0.6817 0.8194;
0.2512 0.2949 0.3462 0.4063 0.4770 0.5599 0.6572 0.7714 0.9055];
%目标输出T
T =;

>> net=newelm(minmax(P),,{'tansig','logsig'},'traingdx');
>> net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
LP.lr=0.1;
net=train(net,P,T);%训练网络

F117_ren_0 发表于 2006-6-7 11:32

程序没问题,数据处理有问题!~
数据化成小数?数据做归一化处理,而不是化成小数!~!~
前两天我帮一个人写过归一化程序,你找好看吧!~~

ericlin 发表于 2006-6-7 15:44

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=;
这里面P和T不用归一化,但如果你其他数据相差很大的化就要归一化了。

zhengdg 发表于 2006-6-7 17:15

<P>就是误差比较大,所以才寻求解决办法。</P>

lxq 发表于 2006-6-7 17:41

%输入样本P
P =[0.2099 0.2466 0.2897 0.3404 0.3999 0.4699 0.5521 0.6486 0.7621;
0.2112 0.2502 0.2964 0.3512 0.4160 0.4928 0.5838 0.6817 0.8194;
0.2512 0.2949 0.3462 0.4063 0.4770 0.5599 0.6572 0.7714 0.9055];
%目标输出T
T =;

net=newelm(minmax(P),,{'tansig','logsig'},'trainscg','learngdm');%比例共轭剃度动量算法
net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
LP.lr=0.1;
net=train(net,P,T);%训练网络

lxq 发表于 2006-6-7 17:47

没有运行过
如果误差还大
收敛不了
增加神经元数目再试试~

zhengdg 发表于 2006-6-7 22:36

假如我建立的BP网络输入层为3,隐藏层为6,输入层为1,那么下面的这个程序应该如何改?
net=newelm(minmax(P),,{'tansig','logsig'},'trainscg','learngdm');%比例共轭剃度动量算法

lxq 发表于 2006-6-7 22:49

你这个是BP网络吗?
BP网络不是net=newff();格式?
net=newelm(minmax(P),,{'tansig','logsig'},'trainscg','learngdm');%比例共轭剃度动量算法
就6个神经元吗?
6层好象多了!~三层就够了
你再试试

zhengdg 发表于 2006-6-7 23:52

嗯????假如我使用BP网络预测,就得是这种形式:net=newff(minmax(P),,{'tansig','purlin'},'trainscg');函数必须得用newff吗?对神经网络不熟,毕业设计用到,紧急赶的。

F117_ren_0 发表于 2006-6-8 10:21

楼主,你用的是newelm是elman网络,实际上elman网络的预测效果要比bp好,只是bp用的更为广泛!~
就象我上面说的,程序没有问题,只是你的数据处理没有做归一化!~我从没听说把数据小数化的~!这个跟网络的收敛与否没有直接关系,很简单的预测问题而已!~但用elman网络的时候我们很少指定网络误差目标!
比如net.trainParam.goal=0.001;我们是不指定的!~还有就是网络的隐层神经元应该根据kolmogorov定理定的!~
也就是2n+1,n指的是输入层的因子个数!~
页: [1]
查看完整版本: 紧急求助:BP预测问题