基于BP神经网络与GRNN对比的货运量预测案例分析
在货运量预测领域,选择合适的预测模型至关重要。广义回归神经网络(GRNN)已经在前面的文章中有所介绍,它在处理非线性问题上有独特优势。而反向传播神经网络(BP神经网络)也是一种广泛应用的经典神经网络模型。本文将结合之前GRNN的货运量预测案例,引入BP神经网络进行对比分析,详细介绍BP神经网络的原理、代码实现,并对两种模型的预测结果进行评估。
基于BP神经网络与GRNN对比的货运量预测案例分析
一、引言
在货运量预测领域,选择合适的预测模型至关重要。广义回归神经网络(GRNN)已经在前面的文章中有所介绍,它在处理非线性问题上有独特优势。而反向传播神经网络(BP神经网络)也是一种广泛应用的经典神经网络模型。本文将结合之前GRNN的货运量预测案例,引入BP神经网络进行对比分析,详细介绍BP神经网络的原理、代码实现,并对两种模型的预测结果进行评估。
二、BP神经网络原理
(一)网络结构
BP神经网络是一种多层前馈神经网络,通常由输入层、隐藏层和输出层组成。输入层接收外界数据,隐藏层对输入数据进行非线性变换,输出层输出最终的预测结果。设输入层有 mmm 个神经元,隐藏层有 nnn 个神经元,输出层有 lll 个神经元。
(二)前向传播
在BP神经网络中,信息从输入层经过隐藏层传递到输出层,这一过程称为前向传播。对于输入层的第 iii 个神经元的输入 xix_ixi,隐藏层第 jjj 个神经元的输入 netjnet_jnetj 为:
netj=∑i=1mwjixi+bjnet_j=\sum_{i = 1}^{m}w_{ji}x_i + b_jnetj=i=1∑mwjixi+bj
其中 wjiw_{ji}wji 是输入层第 iii 个神经元到隐藏层第 jjj 个神经元的连接权重,bjb_jbj 是隐藏层第 jjj 个神经元的偏置。经过激活函数 φ\varphiφ 处理后,隐藏层第 jjj 个神经元的输出 yjy_jyj 为:
yj=φ(netj)y_j=\varphi(net_j)yj=φ(netj)
常见的激活函数有Sigmoid函数 φ(x)=11+e−x\varphi(x)=\frac{1}{1 + e^{-x}}φ(x)=1+e−x1 和双曲正切函数 tanh(x)=ex−e−xex+e−x\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}tanh(x)=ex+e−xex−e−x 等。
对于输出层第 kkk 个神经元,其输入 netknet_knetk 为:
netk=∑j=1nvkjyj+cknet_k=\sum_{j = 1}^{n}v_{kj}y_j + c_knetk=j=1∑nvkjyj+ck
其中 vkjv_{kj}vkj 是隐藏层第 jjj 个神经元到输出层第 kkk 个神经元的连接权重,ckc_kck 是输出层第 kkk 个神经元的偏置。输出层第 kkk 个神经元的输出 oko_kok 为:
ok=ψ(netk)o_k = \psi(net_k)ok=ψ(netk)
这里 ψ\psiψ 是输出层的激活函数,对于回归问题,常使用线性函数 ψ(x)=x\psi(x)=xψ(x)=x。
(三)反向传播
BP神经网络通过反向传播算法来调整网络的权重和偏置,以最小化预测输出与实际输出之间的误差。误差函数通常采用均方误差(MSE):
E=12∑k=1l(tk−ok)2E=\frac{1}{2}\sum_{k = 1}^{l}(t_k - o_k)^2E=21k=1∑l(tk−ok)2
其中 tkt_ktk 是输出层第 kkk 个神经元的实际输出。
根据链式法则,对误差函数 EEE 关于权重 vkjv_{kj}vkj 求偏导数:
∂E∂vkj=(tk−ok)ψ′(netk)yj\frac{\partial E}{\partial v_{kj}}=(t_k - o_k)\psi'(net_k)y_j∂vkj∂E=(tk−ok)ψ′(netk)yj
对误差函数 EEE 关于权重 wjiw_{ji}wji 求偏导数:
∂E∂wji=∑k=1l(tk−ok)ψ′(netk)vkjφ′(netj)xi\frac{\partial E}{\partial w_{ji}}=\sum_{k = 1}^{l}(t_k - o_k)\psi'(net_k)v_{kj}\varphi'(net_j)x_i∂wji∂E=k=1∑l(tk−ok)ψ′(netk)vkjφ′(netj)xi
然后根据梯度下降法更新权重和偏置:
vkj(t+1)=vkj(t)−η∂E∂vkjv_{kj}(t + 1)=v_{kj}(t)-\eta\frac{\partial E}{\partial v_{kj}}vkj(t+1)=vkj(t)−η∂vkj∂E
wji(t+1)=wji(t)−η∂E∂wjiw_{ji}(t + 1)=w_{ji}(t)-\eta\frac{\partial E}{\partial w_{ji}}wji(t+1)=wji(t)−η∂wji∂E
ck(t+1)=ck(t)−η∂E∂ckc_k(t + 1)=c_k(t)-\eta\frac{\partial E}{\partial c_k}ck(t+1)=ck(t)−η∂ck∂E
bj(t+1)=bj(t)−η∂E∂bjb_j(t + 1)=b_j(t)-\eta\frac{\partial E}{\partial b_j}bj(t+1)=bj(t)−η∂bj∂E
其中 η\etaη 是学习率,控制着权重和偏置更新的步长。
三、案例分析
(一)数据准备
在本案例中,我们使用之前GRNN案例中保存的数据。通过 load best 加载保存的数据,其中包含了经过交叉验证得到的最佳输入 desired_input 和最佳输出 desired_output,以及测试数据 p_test 和 t_test,还有归一化所需的参数 mint 和 maxt。
(二)MATLAB代码实现
clear all
load best
n = 13
p = desired_input
t = desired_output
% 创建BP神经网络
net_bp = newff(minmax(p), [n, 3], {'tansig', 'purelin'}, 'trainlm');
% 设置训练参数
net.trainParam.show = 50;
net.trainParam.epochs = 2000;
net.trainParam.goal = 1e-3;
% 调用TRAINLM算法训练BP网络
net_bp = train(net_bp, p, t);
% 进行预测
bp_prediction_result = sim(net_bp, p_test);
bp_prediction_result = postmnmx(bp_prediction_result, mint, maxt);
bp_error = t_test - bp_prediction_result';
disp(['BP神经网络三项流量预测的误差为', num2str(abs(bp_error))])
代码解释:
- 网络创建:使用
newff函数创建BP神经网络,minmax(p)表示输入数据的范围,[n, 3]表示隐藏层有 nnn 个神经元,输出层有 3 个神经元,{'tansig', 'purelin'}分别表示隐藏层和输出层的激活函数,'trainlm'表示使用Levenberg - Marquardt算法进行训练。 - 训练参数设置:
net.trainParam.show = 50表示每 50 个训练周期显示一次训练信息,net.trainParam.epochs = 2000表示最大训练周期为 2000 次,net.trainParam.goal = 1e-3表示训练的目标误差为 1×10−31\times10^{-3}1×10−3。 - 训练网络:使用
train函数调用trainlm算法对BP网络进行训练。 - 预测与误差计算:使用
sim函数对测试数据进行预测,然后对预测结果进行反归一化处理,最后计算预测误差并显示。
(三)结果对比
在之前的GRNN案例中,我们得到了GRNN网络的预测误差 grnn_error。将BP神经网络的预测误差 bp_error 与GRNN的预测误差进行对比,可以评估两种模型在货运量预测任务中的性能。如果 bp_error 较小,说明BP神经网络在该任务中表现更好;反之,则说明GRNN更适合该任务。
四、结论
通过本案例的分析,我们可以看到BP神经网络在货运量预测中的应用过程。BP神经网络通过前向传播和反向传播算法不断调整权重和偏置,以实现对非线性关系的拟合。与GRNN相比,两种模型各有优劣。BP神经网络需要更多的训练时间和参数调整,但在合适的参数设置下可以获得较好的预测效果;GRNN则具有训练速度快、对参数不太敏感等优点。在实际应用中,需要根据具体问题和数据特点选择合适的模型。
五、参考文献
[1] Haykin S. Neural Networks and Learning Machines[M]. Pearson Prentice Hall, 2009.
[2] 史忠植. 神经网络[M]. 机械工业出版社, 2016.
[3] Rumelhart D E, Hinton G E, Williams R J. Learning internal representations by error propagation[J]. Parallel Distributed Processing: Explorations in the Microstructure of Cognition, 1986.
更多推荐


所有评论(0)