搜档网
当前位置:搜档网 › BP神经网络预测的matlab代码

BP神经网络预测的matlab代码

BP神经网络预测的matlab代码
BP神经网络预测的matlab代码

BP神经网络预测的matlab代码附录5:

BP神经网络预测的matlab代码: P=[ 0

0.1386

0.2197

0.2773

0.3219

0.3584

0.3892

0.4159

0.4394

0.4605

0.4796

0.4970

0.5278

0.5545

0.5991

0.6089

0.6182

0.6271

0.6356

0.6438

0.6516

0.6592

0.6664

0.6735

0.7222

0.7275

0.7327

0.7378

0.7427

0.7475

0.7522

0.7568

0.7613

0.7657

0.7700]

T=[0.4455 0.323 0.4116 0.3255 0.4486 0.2999 0.4926 0.2249 0.4893

0.2357 0.4866 0.2249

0.4819 0.2217 0.4997 0.2269 0.5027 0.217 0.5155 0.1918 0.5058 0.2395 0.4541 0.2408 0.4054 0.2701 0.3942 0.3316 0.2197 0.2963 0.5576 0.1061 0.4956 0.267 0.5126 0.2238 0.5314 0.2083 0.5191 0.208 0.5133 0.1848

0.5089 0.242 0.4812 0.2129 0.4927 0.287 0.4832 0.2742 0.5969 0.2403

0.5056 0.2173 0.5364 0.1994 0.5278 0.2015 0.5164 0.2239 0.4489 0.2404 0.4869 0.2963 0.4898 0.1987 0.5075 0.2917 0.4943 0.2902 ]

threshold=[0 1]

net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');

net.trainParam.epochs=6000

net.trainParam.goal=0.01

LP.lr=0.1;

net=train(net,P',T')

P_test=[ 0.7742

0.7784

0.7824

0.7864

0.7902

0.7941 ] out=sim(net,P_test')

友情提示:以上面0.7742为例0.7742=ln(47+1)/5

因为网络输入有一个元素,对应的是测试时间,所以P只有一列,

Pi=log(t+1)/10,这样做的目的是使得这些数据的范围处在[0 1]区间之内,但是事实上对于logsin命令而言输入参数是正负区间的任意值,而将输出值限定于0到1之间。可能只有当输入值在0到1之间,输出的函数才可以通过返归依化得到正确的对应的答案,因此在后面有threshold来限制输入值的区间

n=-5:0.1:5;

a=logsig(n);

plot(n,logsig(n))

图像如右图所示

T是指CD4Count*0.02,与HIV分别对应的值,是输出值,有两组数据, T的第一列数据= 表格当中(CD4Count*0.02)?0.02,再取对数,再?10 T的第一列数据= 表格当中(HIV)的对数,再?5

这样就完成了最开始的数据导入工作,即为了训练神经而进行的输入与输出。

threshold=[0 1]---------

变量threshold用于规定输入向量的最大值和最小值,最大值为1,最小值为0

net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');

网络中间层神经元函数采用S型正切函数tansig,设定网络的训练函数为trainlm,它采用Levenberg-Marquardt算法进行网络学习。

输出层神经元函数采用S型对数函数logsig

net.trainParam.epochs=6000

net.trainParam.goal=0.01

LP.lr=0.1;

经多次尝试,当模型的训练次数取6000,训练目标为0.01,学习速率为0.1,中间神经元个数取11时误差最小(下图为训练误差曲线)

怎样看数据的误差,难道只能通过看图像的方法,. 参考资料

相关主题