BP神经网络在matlab中的应用
现给出一药品商店一年当中12个月的药品销售量(单位:箱)如下:2056 2395 2600 2298 1634 1600 1873 1487 1900 1500 2046 1556,训练一个BP网络,用当前的所有数据预测下一个月的药品销售量。
分析:
用前三个月的销售量预测下一个月的销售量,即用1-3月的销售量预测第4个月的销售量,用2-4个月的销售量预测第5个月的销售量,如此循环下去,直到用9-11月预测12月份的销售量。这样训练BP神经网络后,就可以用10-12月的数据预测来年一月的销售量。
matlab实现:(在matlab中新建一个Script,写入如下代码)
P =[2056 2395 2600;2395 2600 2298;2600 2298 1634;2298 1634 1600;
1634 1600 1873;1600 1873 1478;1873 1478 1900;1478 1900 1500;
1900 1500 2046;]; %输入样本矩阵
T = [2298 1634 1600 1873 1478 1900 1500 2046 1556]; %期望输出
%归一化处理
pmax = max(P); %找出样本中每一列的最大值
pmax1 = max(pmax); %找出样本的最大值
pmin = min(P);
pmin1 = min(pmin);
for i=1:9
P1(i,:)=(P(i,:)-pmin1)/(pmax1-pmin1); %将样本每一行都归一化
T1(i)=(T(i)-pmin1)/(pmax1-pmin1);
End
%创建BP神经网络
net = newff(P1\',T1,[3 7],{\'tansig\' \'logsig\'},\'traingd\'); %注意newff()的参数
%设置最大迭代次数、误差精度、学习速率,依次训练每一个样本
for i = 1:9
net.trainParam.epochs = 15000;
net.trainParam.goal=0.01;
net.trainParam.lr = 0.1
net = train(net,P1(i,:)\',T1(i));
end
y=sim(net,[1500 2046 1556]\'); %训练结束后,根据样本进行预测
y1=y*(pmax1-pmin1)+pmin1; %预测结果归一化
%仿真结束
结果:
对比学习速率为0.01和0.1的仿真结果:
由于每次初始化网络的随机值不同,因此仿真可能得到不同的结果。可以看出学习速率越小,训练时间越长,迭代次数越多,
注意:
newff() 函数
(1) 功能:建立BP网络
(2) 参数:4个参数依次是:
第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。
第二个参数设定每层神经元个数。
第三个参数包含每层用到的传递函数名称。
最后一个参数是用到的训练函数的名称。
如:net=newff([-1 2; 0 5],[3,1],{\'tansig\',\'purelin\'},\'traingd\');
这个命令创建了一个BP网络,它的输入是两个元素的向量,第一个元素的范围是-1到2,第二个元素的范围是0到5;网络第一层有3个神经元,第二层有1个神经元;第一层的传递函数是tan-sigmoid,输出层的传递函数是线性的;输入向量的训练函数是traingd,标准梯度下降算法。
请发表评论