数学建模神经网络预测模型及程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

年份

(年) 1(1988) 2(1989) 3(1990) 4(1991) 5(1992) 6(1993)

7(1994) 8(1995)

实际值

(ERI)

年份

(年) 9(1996) 10(1997) 11(1998) 12(1999) 13(2000) 14(2001)

15(2002) 16(2003)

实际值

(ERI)

BP 神经网络的训练过程为: 先用1988 年到2002 年的指标历史数据作为网络的输入,用1989 年到2003 年的指标历史数据作为网络的输出,组成训练集对网络进行训练,使之误差达到满意的程度,用这样训练好的网络进行预测.

采用滚动预测方法进行预测:滚动预测方法是通过一组历史数据预测未来某一时刻的值,然后把这一预测数据再视为历史数据继续预测下去,依次循环进行,逐步预测未来一段时期的值. 用1989 年到2003 年数据作为网络的输入,2004 年的预测值作为网络的输出. 接着用1990 年到2004 年的数据作为网络的输入,2005 年的预测值作为网络的输出.依次类推,这样就得到2010 年的预测值。

目前在BP 网络的应用中,多采用三层结构. 根据人工神经网络定理可知,只要用三层的BP 网络就可实现任意函数的逼近. 所以训练结果采用三层BP模型进行模拟预测. 模型训练误差为,隐层单元数选取8个,学习速率为,动态参数,Sigmoid参数,最大迭代次数3000.运行3000次后,样本拟合误差等于。

P=[。。。];输入T=[。。。];输出

% 创建一个新的前向神经网络

net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')

% 当前输入层权值和阈值

inputWeights={1,1}

inputbias={1}

% 当前网络层权值和阈值

layerWeights={2,1}

layerbias={2}

% 设置训练参数

= 50;

= ;

= ;

= 10000;

= 1e-3;

% 调用TRAINGDM 算法训练BP 网络

[net_1,tr]=train(net_1,P,T);

% 对BP 网络进行仿真

A = sim(net_1,P);

% 计算仿真误差

E = T - A;

MSE=mse(E)

x=[。。。]';%测试

sim(net_1,x)

既然题目说的是预测,那么倒数第二行的代码x=[。。。]';%测试,x的值怎么确定呢,是不是题目从所给的数据中随便选一组作为测试啊顺便问一下,为什么要有这个x呢对未来的预测和这个x有什么关系啊

sim(net_1,x)

net_1是已经训练好的网络(用的是1988-2003的数据)

从题目知道网络的输入-输出数据是这样产生的

输入P 对应输出T

>2003

>2004

>2005

…………

>2009

以上构成了1994-1988+1=7组输入输出对。

利用P/T进行训练,训练成功(一般还要设一个确认集进行泛化能力的检测,光是训练误差小是不行的)后。sim(net_1,x)这是对网络进行仿真。在这个仿真函数中,给一个输入,(类似训练时用的输入P,列数可以不同,但行数必须一样),网络就给出你想要的输出。

而这个x就是你最后要进行的预测的输入。由于你预测的是2010年的值,那么输入就是为1995-2009,这样“按道理”,网络就给出了2010年的值

明白没

P=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];

T=[ ];

net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')

inputWeights={1,1}

inputbias={1}

layerWeights={2,1}

layerbias={2}

= 50;

= ;

= ;

= 10000;

= 1e-3;

[net_1,tr]=train(net_1,P,T);

A = sim(net_1,P);

E = T - A;

MSE=mse(E)

P1=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]; T1= sim(net_1,P1);

plot(P,T,'r*');

hold on;

plot(P1,T1,'bo');

相关文档
最新文档