基于MATLAB的BP神经网络组合预测模型在公路货运量预测中的应用
- 格式:pdf
- 大小:424.02 KB
- 文档页数:5
MATLAB程序代码--bp神经网络通用代码matlab通用神经网络代码学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下, 希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享感应器神经网络、线性网络、BP神经网络、径向基函数网络%通用感应器神经网络。
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量T=[1 1 0 0 1];%期望输出plotpv(P,T);%描绘输入点图像net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold onlinehandle=plotpc(net.iw{1},net.b{1});net.adaptparam.passes=3;for a=1:25%训练次数[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.iw{1},net.b{1},linehandle);drawnow;end%通用newlin程序%通用线性网络进行预测time=0:0.025:5;T=sin(time*4*pi);Q=length(T);P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。
P(1,2:Q)=T(1,1:(Q-1));P(2,3:Q)=T(1,1:(Q-2));P(3,4:Q)=T(1,1:(Q-3));P(4,5:Q)=T(1,1:(Q-4));P(5,6:Q)=T(1,1:(Q-5));plot(time,T)%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);%网络测试figure(2)plot(time,a,time,T,'+')xlabel('时间');ylabel('输出-目标+');title('输出信号和目标信号');e=T-a;figure(3)plot(time,e)hold onplot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')代替hold offxlabel('时间');ylabel('误差');title('误差信号');%通用BP神经网络P=[-1 -1 2 2;0 5 0 5];t=[-1 -1 1 1];net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd');%输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'%训练函数traingd--梯度下降法,有7个训练参数.%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05;% lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda的4个附加参数%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数: % delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);% delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0)% 适合大型网络%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;%训练函数traincgb--Powell-Beale共轭梯度法%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr%训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络% 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);% lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)% 缺少1个训练参数:lr%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络net=init(net);net.trainparam.epochs=300; %最大训练次数(前缺省为10,自trainrp后,缺省为100)net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=50; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-5; %训练要求精度(缺省为0)%net.trainparam.max_fail 最大失败次数(缺省为5)%net.trainparam.min_grad 最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6) %net.trainparam.time 最大训练时间(缺省为inf)[net,tr]=train(net,P,t); %网络训练a=sim(net,P) %网络仿真%通用径向基函数网络——%其在逼近能力,分类能力,学习速度方面均优于BP神经网络%在径向基网络中,径向基层的散步常数是spread的选取是关键%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1%可以通过net=newrbe(P,T,spread)生成网络,且误差为0%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止%GRNN网络,迅速生成广义回归神经网络(GRNN)P=[4 5 6];T=[1.5 3.6 6.7];net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)%PNN网络,概率神经网络P=[0 0 ;1 1;0 3;1 4;3 1;4 1;4 3]';Tc=[1 1 2 2 3 3 3];%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=[1 4;0 1;5 2]';Y=sim(net,P2);Yc=vec2ind(Y)%应用newrb()函数构建径向基网络,对一系列数据点进行函数逼近P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.500 -0.3930 -0.1647 -0.0988...0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];%绘制训练用样本的数据点plot(P,T,'r*');title('训练样本');xlabel('输入向量P');ylabel('目标向量T');%设计一个径向基函数网络,网络有两层,隐层为径向基神经元,输出层为线性神经元%绘制隐层神经元径向基传递函数的曲线p=-3:.1:3;a=radbas(p);plot(p,a)title('径向基传递函数')xlabel('输入向量p')%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数%例如a2=radbas(p-1.5);a3=radbas(p+2);a4=a+a2*1.5+a3*0.5;plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--')title('径向基传递函数权值之和')xlabel('输入p');ylabel('输出a');%应用newrb()函数构建径向基网络的时候,可以预先设定均方差精度eg以及散布常数sc eg=0.02;sc=1; %其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试plot(P,T,'*')xlabel('输入');X=-1:.01:1;Y=sim(net,X);hold onplot(X,Y);hold offlegend('目标','输出')%应用grnn进行函数逼近P=[1 2 3 4 5 6 7 8];T=[0 1 2 3 2 1 2 1];plot(P,T,'.','markersize',30)axis([0 9 -1 4])title('待逼近函数')xlabel('P')ylabel('T')%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);hold onoutputline=plot(P,A,'o','markersize',10,'color',[1 0 0]);title('检测网络')xlabel('P')ylabel('T和A')%应用pnn进行变量的分类P=[1 2;2 2;1 1]; %输入向量Tc=[1 2 3]; %P对应的三个期望输出%绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Tc(i)))endaxis([0 3 0 3]);title('三向量及其类别')xlabel('P(1,:)')ylabel('P(2,:)')%网络设计T=ind2vec(Tc);spread=1;net=newgrnn(P,T,speard);%网络测试A=sim(net,P);Ac=vec2ind(A);%绘制输入向量及其相应的网络输出plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i)))endaxis([0 3 0 3]);title('网络测试结果')xlabel('P(1,:)')ylabel('P(2,:)')P=[13, 0, 1.119, 1, 26.3;22, 0, 1.135, 1, 26.3;-15, 0, 0.9017, 1, 20.4;-30, 0, 0.9172, 1, 26.7;24, 0, 1.238,0.9704,28.2;3,24,1.119,1,26.3;0,52,1.089,1,26.3;0,-73,1.0889,1,26.3;1,28, 0.8748,1,26.3;-1,-39,1.1168,1,26.7;-2, 0, 1.495, 1, 26.3;0, -1, 1.438, 1, 26.3;4, 1,0.4964, 0.9021, 26.3;3, -1, 0.5533, 1.2357, 26.7;-5, 0, 1.7368, 1, 26.7;1, 0, 1.1045, 0.0202, 26.3;-2, 0, 1.1168, 1.3764, 26.7;-3, -1, 1.1655, 1.4418,27.5;3, 2, 1.0875, 0.748, 27.5;-3, 0, 1.1068, 2.2092, 26.3;4, 1, 0.9017, 1, 13.7;3, 2, 0.9017, 1, 14.9;-3, 1, 0.9172, 1, 13.7;-2, 0, 1.0198, 1.0809, 16.1;0, 1, 0.9172, 1, 13.7] T=[1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0; 0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ; 0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1 ];%期望输出plotpv(P,T);%描绘输入点图像。
2021.12科学技术创新铁路轨道是保障高铁列车行驶安全的重要结构部件。
在铁路日常运营中,轨道在列车高速下的冲击、振动及列车荷载等长时间作用下,内部结构不可避免地发生改变。
轨道不平顺的发展,将会对铁路运营产生巨大影响,如铁路运输的质量指数(Track Quality Index,简称TQI )是评价轨道整体不平顺的重要指标,因此预测TQI 的发展变化趋势,能够帮助铁路部门人员及时掌握设备状态,制定合理的维修计划,实现由“事后修”到“状态修”的转变,避免人力、物力方面的浪费。
实践证明,随着运营时间的增长,单元区段内轨道不平顺几何数据以多阶段、周期性、非线性等形式表现出来的。
ARMA 模型由于具有线性预测优势,主要被应用在线形预测方面。
然而针对非线性规律部分预测,则稍显不足。
BP 神经网络在非线性预测方面有着独特的优势,因此本文提出建立ARMA-BP 组合模型对轨道质量指数TQI 进行预测研究。
1ARMA-BP 组合模型1.1ARMA (p,q )模型自回归滑动平均模型由自回归模型(AR 模型)与滑动平均模型(MA 模型)两个模型混合而成。
1.1.1自回归模型AR(p)其中,1,2,…,p 是模型参数;兹t 为白噪声序列。
1.1.2滑动平均模型MA(q)1.1.3自回归滑动平均模型ARMA(p,q)如果时间序列模型既包括p 阶自回归,又包括q 阶滑动平均,则此模型为自回归滑动平均模型,有如下形式:1.2BP 神经网络模型BP (Back Propagation )网络在1986年由以Rinehart 和McClelland 为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP 网络无需事前描述映射关系,可以学习和保存大量的输入-输出模式映射关系。
1.3ARMA-BP 组合模型构建TQI 时间序列往往含有线形变化规律和非线性变化规律,ARMA 模型作为传统的时间序列预测模型,能够很好地提取时间序列线性特征。
MATLAB中的神经网络模型融合与集成方法导言:神经网络模型是一种模仿生物神经系统进行信息处理的数学模型,具有强大的学习能力和适应性。
然而,单一神经网络模型可能存在局限性,为了充分发挥神经网络模型的优势,研究人员开始探索模型融合与集成方法。
本文将介绍MATLAB中的神经网络模型融合与集成方法,并探讨其在实际问题中的应用。
一、神经网络模型融合的方法1. 加权平均加权平均是神经网络模型融合中最简单且常用的方法之一。
其原理是将多个神经网络模型的预测结果按照一定的权重进行线性组合,得到最终的融合结果。
在MATLAB中,可以通过定义权重向量和使用MATLAB自带的函数来实现加权平均的模型融合。
这种方法适用于多个神经网络模型具有相似预测性能的情况。
2. 投票法投票法是一种常见的非加权模型融合方法。
其基本原理是将多个神经网络模型的预测结果进行投票,选择得票最多的结果作为最终的融合结果。
在MATLAB中,可以通过使用变量存储各模型的预测结果,并利用统计函数进行计数和选择得票最多的结果。
投票法适用于多个神经网络模型有较大差异的情况。
二、神经网络模型集成的方法1. 堆叠自编码器堆叠自编码器是一种用于神经网络模型集成的深度学习算法。
其基本原理是将多个自编码器进行堆叠,形成一个复杂的神经网络模型。
在MATLAB中,可以通过使用MATLAB自带的深度学习工具箱和相关函数,按照一定的层次关系,构建并训练堆叠自编码器。
堆叠自编码器适用于数据集较大且特征较复杂的情况。
2. 集成学习算法集成学习算法是一种有效的神经网络模型集成方法。
其基本原理是通过组合多个不同的神经网络模型,以提高整体性能,并减少模型的方差和偏差。
在MATLAB中,可以通过使用集成学习工具箱和相关函数,实现模型集成的算法。
常用的集成学习算法包括随机森林、Adaboost等。
集成学习算法适用于样本较少且模型高度相关的情况。
三、神经网络模型融合与集成方法的应用案例1. 图像分类在图像分类领域,神经网络模型融合与集成方法可以用于提高分类准确率。
BPNN在matlab中的实现学习运用Matlab创建BP神经网络(R2022b)BP神经网络属于前向网络以下为创建BP神经网络的方法及参数意义(1)net=newff(P,T,S)或者net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)P:输入参数矩阵。
(R某Q1)T:目标参数矩阵。
(SN某Q2)S:N-1个隐含层的数目(S(i)到S(N-1)),输出层的单元数目取决于T,默认为空矩阵。
TF:相关层的传递函数,默认隐含层为tanig函数,输出层为purelin函数。
BTF:BP神经网络学习训练函数,默认值为trainlm函数。
BLF:权重学习函数,默认值为learngdm。
PF:性能函数,默认值为me。
IPF,OPF,DDF均为默认值即可。
(2)传递函数purelin线性传递函数tanig正切S型传递函数logig对数S型传递函数隐含层和输出层函数的选择对BP神经网络预测精度有较大影响,一般隐含层节点转移函数选用tanig函数或logig函数,输出层节点转移函数选用tanig函数或purelin函数。
(3)学习训练函数神经网络的学习分为有导师学习和无导师学习。
最速下降BP算法:traingd动量BP算法:traingdm学习率可变的BP算法:trainda(学习率可变的最速下降BP算法);traind某(学习率可变的动量BP算法)弹性算法:trainrp变梯度算法:traincgf(Fletcher-Reeve修正算法)traincgp(Polak_Ribiere修正算法)traincgb(Powell-Beale复位算法)trainbfg(BFGS拟牛顿算法)traino(OSS算法)trainlm(LM算法)参数说明:通过net.trainParam可以查看参数ShowTrainingWindowFeedbackhowWindow:trueMinimumGradientmin_grad:性能函数最小梯度Ma某imumValidationCheckma某_fail:最大验证失败次数LearningRatelr:学习速率LearningRateIncreaelr_inc:学习速率增长值LearningRatelr_dec:学习速率下降值Ma某imumPerformanceIncreaema某_perf_inc:MomentumContantmc:动量因子(4)BP神经网络预测函数SimOut=im('model',Parameter)&y=im(net,某)函数功能:用训练好的BP神经网络预测函数输出net:训练好的网络某:输入数据y:网络预测数据(5)训练函数[net,tr]=train(Net,P,T,Pi,Ai)其中,Net待训练的网络P输入数据矩阵T输出数据矩阵(default=zero)Pi初始化输入层条件(default=zero)Ai初始化输出层条件(default=zero)net训练好的网络tr训练过程记录注意:PNi-by-TScellarrayEachelementP{i,j,t}ianNi-by-Qmatri 某.TNl-by-TScellarrayEachelementT{i,t}iaUi-by-Qmatri某.现给出一药品商店一年当中12个月的药品销售量(单位:箱)如下:205623952600229816341600187314871900150020461556训练一个BP网络,用当前的所有数据预测下一个月的药品销售量。
MATLAB中的神经网络算法和实现方法简介:神经网络是一种模仿生物神经系统活动的数学模型,广泛应用于机器学习和模式识别领域。
MATLAB作为一种功能强大的科学计算软件,提供了丰富的工具箱和函数,用于神经网络的设计、训练和应用。
本文将介绍MATLAB中的神经网络算法和实现方法。
1. 神经网络的基本原理神经网络由多个神经元组成的网络结构,每个神经元都有多个输入和一个输出。
神经网络的基本原理是通过对输入和权重的加权求和,经过激活函数的处理得到输出。
神经网络的学习过程就是通过调整权重的数值和选择合适的激活函数,使网络能够逼近目标函数。
2. MATLAB中的神经网络工具箱MATLAB提供了神经网络工具箱(Neural Network Toolbox),用于快速实现各种类型的神经网络。
神经网络工具箱包含了各种神经网络算法和函数,可用于网络的创建、训练和应用。
3. 神经网络的创建与配置在MATLAB中创建神经网络可以通过网络构建函数(newff、newcf、newp等)来实现。
可以根据网络的拓扑结构、层数和节点数目来创建神经网络。
配置神经网络可以通过设置网络的参数,如网络输入、目标输出、激活函数、训练算法等。
4. 神经网络的训练神经网络的训练过程是调整网络的权值和偏置,使网络能够对输入进行正确的分类或预测输出。
在MATLAB中,可以使用train函数进行神经网络的训练。
train函数提供了多种训练算法,如梯度下降、Levenberg-Marquardt算法等。
训练过程中,可以设置训练次数、学习率、误差目标等参数。
5. 神经网络的应用神经网络可以用于各种应用领域,如模式识别、数据挖掘、图像处理等。
在MATLAB中,可以使用已经训练好的神经网络对新的输入进行分类或预测。
可以使用sim函数对训练好的网络进行模拟,并根据输出结果进行判断。
6. 神经网络的性能评估与改进在使用神经网络进行建模和预测时,需要对网络的性能进行评估。
在Matlab中使用机器学习工具箱进行模型训练和预测引言:随着人工智能的快速发展,机器学习在各个领域中得到了广泛的应用。
而Matlab作为一款功能强大的数值计算软件,其机器学习工具箱为用户提供了便捷的模型训练和预测功能。
本文将介绍在Matlab中如何使用机器学习工具箱进行模型训练和预测,并结合实例加以说明。
一、数据准备在进行模型训练和预测之前,首先需要准备训练和测试所需的数据集。
Matlab中的机器学习工具箱提供了丰富的数据导入和处理函数,可以直接读取常见的数据格式,如CSV和Excel文件。
同时,也可以通过代码生成或手动输入数据。
数据准备包括数据清洗、预处理、特征选择等步骤,这些步骤的目的是为了提高后续模型训练和预测的准确性和效果。
二、选择合适的算法在进行机器学习任务之前,需要先选择合适的算法。
Matlab的机器学习工具箱提供了各类经典的机器学习算法,如线性回归、逻辑回归、决策树、支持向量机等。
在选择算法时,需要根据任务的特点和数据的性质来决定。
比如要进行分类任务,可以选择逻辑回归或支持向量机;要进行回归任务,可以选择线性回归或决策树。
算法的选择直接影响了后续模型的性能和效果,因此需要慎重考虑。
三、模型训练选择好算法之后,就可以进行模型训练了。
在Matlab中,只需要简单几行代码就可以完成模型的训练过程。
以线性回归为例,首先需要定义一个线性回归模型对象,然后使用训练数据对模型进行训练。
训练过程中可以设置一些参数,如迭代次数、学习率等。
训练完成后,可以通过评估指标来评价模型的性能,如均方误差(MSE)和决定系数(R-squared)。
四、模型预测模型训练完成后,就可以使用该模型进行预测了。
Matlab提供了预测函数,可以将测试数据输入模型,得到预测结果。
预测结果可以通过可视化的方式呈现,以便于观察。
同时,也可以计算预测结果与真实标签之间的误差,以评估模型的预测能力。
五、模型调优在模型训练和预测的过程中,有时候会出现性能不佳的情况。