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

发布时间:2016-08-28 08:36:04

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

7(1994) 8(1995)

实际值

(ERI) 0.1093 0.1110 0.1127 0.1141 0.1154 0.1164 0.1171 0.1175

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

15(2002) 16(2003)

实际值

(ERI) 0.1178 0.1179 0.1179 0.1179 0.1179 0.1180 0.1182 0.1185

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

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

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

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

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

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

% 当前输入层权值和阈值

inputWeights=net_1.IW{1,1}

inputbias=net_1.b{1}

% 当前网络层权值和阈值

layerWeights=net_1.LW{2,1}

layerbias=net_1.b{2}

% 设置训练参数

net_1.trainParam.show = 50;

net_1.trainParam.lr = 0.05;

net_1.trainParam.mc = 0.9;

net_1.trainParam.epochs = 10000;

net_1.trainParam.goal = 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

1988-2002--->2003

1989-2003--->2004

1990-2004--->2005

…………

1994-2008--->2009

以上构成了1994-1988+17组输入输出对。

利用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=[0.1093 0.1110 0.1127 0.1141 0.1154 0.1164 0.1171 0.1175 0.1178 0.1179 0.1179 0.1179 0.1179 0.1180 0.1182 0.1185];

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

inputWeights=net_1.IW{1,1}

inputbias=net_1.b{1}

layerWeights=net_1.LW{2,1}

layerbias=net_1.b{2}

net_1.trainParam.show = 50;

net_1.trainParam.lr = 0.05;

net_1.trainParam.mc = 0.9;

net_1.trainParam.epochs = 10000;

net_1.trainParam.goal = 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');

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

相关推荐