声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1847|回复: 14

[编程技巧] 求助:预测的Matlab程序(有酬)

[复制链接]
发表于 2006-6-6 11:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请联系zhengdg_007@163.com或者电话:023-62485268。谢谢,有酬,30RMB
内容在附件中,我可以简单描述如下:

我们用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算法程序可得如下的拟合值和预测值:

我写了个程序如下,不能很好的预测,哪位大侠可以帮忙解决一下,今天急用
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);
回复
分享到:

使用道具 举报

发表于 2006-6-6 11:58 | 显示全部楼层
思路很正确,但学习样本太少,你可以用重复迭代的方法或试试其他的网络。
 楼主| 发表于 2006-6-6 12:02 | 显示全部楼层

回复:(ericlin)思路很正确,但学习样本太少,你可以...

可以帮我修改一下程序或者再重写一下吗?我QQ:215302868,可以在QQ上聊。明天交论文了,这个程序跑出来的误差太大了,我也不晓得怎么修改,可以帮我吗?谢谢老
发表于 2006-6-6 12:15 | 显示全部楼层
P=P';T=T';
net=newelm(minnax(P),[10,1],{'tansig','logsig'},'traingdx'');
net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
LP.lr=0.1;
net=train(net,P,T);
隐含层神经元数可以经验试凑;
最大问题可能还是你训练样本太少,信息量不够。
建议你不要写有酬什么的,这里是交流的地方。

评分

1

查看全部评分

 楼主| 发表于 2006-6-6 12:18 | 显示全部楼层
ericlin教训的对!以后一定改正。第一次到这个版,感觉非常棒!谢谢
可以加你QQ吗?关于这个程序还有点问题的。
发表于 2006-6-6 13:10 | 显示全部楼层

回复:(zhengdg)求助:预测的Matlab程序(有酬)

上次写的有点错误。
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 =

0.2205 0.2357 0.2656 0.3155 0.3825 0.4230 0.5152 0.6462 0.7846

>> net=newelm(minmax(P),[9,1],{'tansig','logsig'},'traingdx');
>> net.trainParam.epochs=1000;net.trainParam.goal=0.001;LP.lr=0.1;net=train(net,P,T);
TRAINGDX, Epoch 0/1000, MSE 0.160838/0.001, Gradient 0.383732/1e-006
TRAINGDX, Epoch 25/1000, MSE 0.106695/0.001, Gradient 0.380153/1e-006
TRAINGDX, Epoch 50/1000, MSE 0.0122784/0.001, Gradient 0.104677/1e-006
TRAINGDX, Epoch 75/1000, MSE 0.00339681/0.001, Gradient 0.0256419/1e-006
TRAINGDX, Epoch 90/1000, MSE 0.000911549/0.001, Gradient 0.0116649/1e-006
TRAINGDX, Performance goal met.
1.jpg

评分

1

查看全部评分

发表于 2006-6-6 13:50 | 显示全部楼层

回复:(zhengdg)求助:预测的Matlab程序(有酬)

P_test=P;
Y=sim(net,P_test)

Y =

Columns 1 through 9

0.2092 0.2385 0.2750 0.3196 0.3725 0.4344 0.5114 0.6274 0.8229

Column 10

0.9752
P_test可以取自己的值。
1.jpg

评分

1

查看全部评分

 楼主| 发表于 2006-6-6 13:50 | 显示全部楼层

回复:(ericlin)回复:(zhengdg)求助:预测的Matl...

请帮我看一下这个程序。
%输入样本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 =[0.2205 0.2357 0.2656 0.3155 0.3825 0.4230 0.5152 0.6462 0.7846];

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


%输入需要预测的值P1
>> P1=[0.10519619 0.12359474 0.14521116 0.17060824 0.20044720 0.23550493 0.27669416 0.32508730 0.38194427 0.44874539;
0.11500057 0.13623855 0.16139869 0.19120533 0.22651658 0.26839401 0.31790693 0.37661707 0.44616962 0.52856694;
0.12476708 0.14645358 0.17190955 0.20179017 0.23686451 0.27803534 0.32636231 0.38308928 0.44967630 0.52783721];
>> sim(net,P1) %仿真

%请问用训练好的网络进行预测,就运行下面仿真的程序,对吗?还是?
%另外,如何显示仿真的曲线图呢?
发表于 2006-6-6 13:52 | 显示全部楼层
plot(Y,'*');
 楼主| 发表于 2006-6-6 13:56 | 显示全部楼层

回复:(ericlin)plot(Y,'*');

多谢多谢!现在基本上可以搞定了!多谢啊!
方便的话一定加我QQ哦,以后这个版我会经常来的。ericlin太好了!
发表于 2006-6-6 14:02 | 显示全部楼层
^_^,那你以后帮忙多回答问题啊,我也就只懂这么点。
发表于 2006-6-7 11:44 | 显示全部楼层
我很苦恼,这样也行?我指的不是程序!~
 楼主| 发表于 2006-6-7 17:19 | 显示全部楼层
两位大虾都蛮厉害的!
发表于 2006-6-7 20:32 | 显示全部楼层

回复:(F117_ren_0)我很苦恼,这样也行?我指的不是程...

1.苦恼什么?
2.怎样行?
3.你指的是什么?
发表于 2006-8-31 10:26 | 显示全部楼层
其实一定要用神经网络吗?,这种时间序列的用灰色系统里面的GM(1,1)模型很简单就可以预测出来了啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 18:04 , Processed in 0.086097 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表