您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 数学建模神经网络预测模型及程序
年份(年)1(1988)2(1989)3(1990)4(1991)5(1992)6(1993)7(1994)8(1995)实际值(ERI)0.10930.11100.11270.11410.11540.11640.11710.1175年份(年)9(1996)10(1997)11(1998)12(1999)13(2000)14(2001)15(2002)16(2003)实际值(ERI)0.11780.11790.11790.11790.11790.11800.11820.1185BP神经网络的训练过程为:先用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对应输出T1988-2002---20031989-2003---20041990-2004---2005…………1994-2008---2009以上构成了1994-1988+1=7组输入输出对。利用P/T进行训练,训练成功(一般还要设一个确认集进行泛化能力的检测,光是训练误差小是不行的)后。sim(net_1,x)这是对网络进行仿真。在这个仿真函数中,给一个输入,(类似训练时用的输入P,列数可以不同,但行数必须一样),网络就给出你想要的输出。而这个x就是你最后要进行的预测的输入。由于你预测的是2010年的值,那么输入就是为1995-2009,这样“按道理”,网络就给出了2010年的值明白没?P=[12345678910111213141516];T=[0.10930.11100.11270.11410.11540.11640.11710.11750.11780.11790.11790.11790.11790.11800.11820.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=[1234567891011121314151617];T1=sim(net_1,P1);plot(P,T,'r*');holdon;plot(P1,T1,'bo');
本文标题:数学建模神经网络预测模型及程序
链接地址:https://www.777doc.com/doc-7245055 .html