非线性数据类型预测之BP神经网络——基于MATLAB

1、BP网络简介

BP网络(Back-ProPagation Network)又称反向传播神经网络,它是一种前馈式、多层、感知机网络。 通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。它是一种应用较为广泛的神经网络模型,多用于函数逼近、模型识别分类、数据压缩和时间序列预测等。

BP网络由输入层、隐层和输出层组成,具有高度非线性和较强的泛化能力,但也存在收敛速度慢、迭代步数多、易于陷入局部极小和全局搜索能力差等缺点。

2、数据准备

现有训练、测试数据样本各300个,每个样本含有非线性数据x1,x2两者,还有一个与x1,x2有关的变量“类型”,设为y


3、模型目的

根据训练集中x1,x2与y的关系建立神经网络,从而预测测试集中300个样本数据对应的类型y,然后与实际值比较,确定模型的准确率。

4、模型建立

4.1 把x1,x2作为输入指标,类型作为输出指标。注意:x1,x2每列看做一组输入训练集,所以在读入数据要适当有技巧的转换

4.2 隐层设计

研究表明只要隐节点足够多就可以以任意精度逼近一个非线性函数。因此本文采用含有一个隐层的三层多输入单输出的BP网络建立预测模型。在网络设计过程中隐层神经元数的确定十分重要。隐层神经元个数过多会加大网络计算量并容易产生过度拟合问题神经元个数过少则会影响网络性能达不到预期效果。网络中隐层神经元的数目与实际问题的复杂程度、输入和输出层的神经元数以及对期望误差的设定有着直接的联系。目前对于隐层中神经元数目的确定并没有明确的公式只有一些经验公式神经元个数的最终确定还是需要根据经验和多次实验来确定。本文在选取隐层神经元个数的问题上参照了以下的经验公式:

其中, n为输入层神经元个数, m 为输出层神经元个数, a [ 1, 10]之间的常数。 

根据上式可以计算出神经元个数为3-12个之间,在本次实验中选择隐层神经元个数为5.

4.3 参数设置

    设定网络输入层、隐层和输出层激励函数分别为tansig、tansigpurelin函数网络训练函数为trainlm,隐层神经元数初设为5,网络迭代次数epochs5000期望误差goal0.001学习速率lr0. 02。设定完参数后开始训练网络。

4.4 完整代码

%训练集
x1=xlsread('a.xls','train','A2:A301');
x2=xlsread('a.xls','train','B2:B301');
x=[x1';x2'];%输入向量
y=xlsread('a.xls','train','C2:C301');
y=y';%输出向量
net=newff(x,y,[2,5,1],{'tansig','tansig','purelin'},'trainlm');%创建网络
net.trainParam.epochs=5000; %迭代次数 训练次数
net.trainParam.goal=0.001;%期望误差 收敛误差
net.trainParam.lr=0.02;%学习速率
net=train(net,x,y);%训练网络
%%测试集
xx1=xlsread('a.xls','test','A2:A301');
xx2=xlsread('a.xls','test','B2:B301');
xx=[xx1';xx2'];%输入向量
yy=xlsread('a.xls','test','C2:C301');
yy=yy';%输出向量
ty=sim(net,xx);%使用网络进行仿真
sr=size(ty);%获取行数和列数
%计算测试集上正确率
j=0;
for i=1:sr(2) 
    if round(ty(i))==yy(i)
        j=j+1;
    end
end
j
accurate=j/300

4.5 输出结果

    

   

4.6 结果分析

    由结果可知,所建立的模型准确率超过94%,而且该网络通过28次重复学习达到期望误差后则完成学习。(注意:参数设置不同,结果会有显著的差异,而且尽管所有参数一致,前后两次执行结果也不一定完全相同)

5、模型改善

5.1 数据归一化

    归一化有以下好处:①避免一些不必要的数值问题,数值过大或过小;②求解方便,提高学习速率(其中注意梯度下降法traaingd)比列文伯格-马跨特算法trainlm对归一化的依赖较为强烈;③归一化能使初始化模块简便化,使处理思路清晰化;④使得网络快速的收敛。其实,matlab2012版本(以上)已经自动将输入数据归一化,所以大可不必再去做数据的预处理,但是需要对输出数据做归一化。

5.2 反复训练

   有时间可以尝试多种参数或改变神经网络模型,寻找最合适的神经网络结构。

猜你喜欢

转载自blog.csdn.net/X_dmword/article/details/80339981