Bootstrap

基于BP神经网络与GRNN对比的货运量预测案例分析

基于BP神经网络与GRNN对比的货运量预测案例分析

一、引言

在货运量预测领域,选择合适的预测模型至关重要。广义回归神经网络(GRNN)已经在前面的文章中有所介绍,它在处理非线性问题上有独特优势。而反向传播神经网络(BP神经网络)也是一种广泛应用的经典神经网络模型。本文将结合之前GRNN的货运量预测案例,引入BP神经网络进行对比分析,详细介绍BP神经网络的原理、代码实现,并对两种模型的预测结果进行评估。

二、BP神经网络原理

(一)网络结构

BP神经网络是一种多层前馈神经网络,通常由输入层、隐藏层和输出层组成。输入层接收外界数据,隐藏层对输入数据进行非线性变换,输出层输出最终的预测结果。设输入层有 m m m 个神经元,隐藏层有 n n n 个神经元,输出层有 l l l 个神经元。

(二)前向传播

在BP神经网络中,信息从输入层经过隐藏层传递到输出层,这一过程称为前向传播。对于输入层的第 i i i 个神经元的输入 x i x_i xi,隐藏层第 j j j 个神经元的输入 n e t j net_j netj 为:
n e t j = ∑ i = 1 m w j i x i + b j net_j=\sum_{i = 1}^{m}w_{ji}x_i + b_j netj=i=1mwjixi+bj
其中 w j i w_{ji} wji 是输入层第 i i i 个神经元到隐藏层第 j j j 个神经元的连接权重, b j b_j bj 是隐藏层第 j j j 个神经元的偏置。经过激活函数 φ \varphi φ 处理后,隐藏层第 j j j 个神经元的输出 y j y_j yj 为:
y j = φ ( n e t j ) y_j=\varphi(net_j) yj=φ(netj)
常见的激活函数有Sigmoid函数 φ ( x ) = 1 1 + e − x \varphi(x)=\frac{1}{1 + e^{-x}} φ(x)=1+ex1 和双曲正切函数 tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+exexex 等。

对于输出层第 k k k 个神经元,其输入 n e t k net_k netk 为:
n e t k = ∑ j = 1 n v k j y j + c k net_k=\sum_{j = 1}^{n}v_{kj}y_j + c_k netk=j=1nvkjyj+ck
其中 v k j v_{kj} vkj 是隐藏层第 j j j 个神经元到输出层第 k k k 个神经元的连接权重, c k c_k ck 是输出层第 k k k 个神经元的偏置。输出层第 k k k 个神经元的输出 o k o_k ok 为:
o k = ψ ( n e t k ) o_k = \psi(net_k) ok=ψ(netk)
这里 ψ \psi ψ 是输出层的激活函数,对于回归问题,常使用线性函数 ψ ( x ) = x \psi(x)=x ψ(x)=x

(三)反向传播

BP神经网络通过反向传播算法来调整网络的权重和偏置,以最小化预测输出与实际输出之间的误差。误差函数通常采用均方误差(MSE):
E = 1 2 ∑ k = 1 l ( t k − o k ) 2 E=\frac{1}{2}\sum_{k = 1}^{l}(t_k - o_k)^2 E=21k=1l(tkok)2
其中 t k t_k tk 是输出层第 k k k 个神经元的实际输出。

根据链式法则,对误差函数 E E E 关于权重 v k j v_{kj} vkj 求偏导数:
∂ E ∂ v k j = ( t k − o k ) ψ ′ ( n e t k ) y j \frac{\partial E}{\partial v_{kj}}=(t_k - o_k)\psi'(net_k)y_j vkjE=(tkok)ψ(netk)yj
对误差函数 E E E 关于权重 w j i w_{ji} wji 求偏导数:
∂ E ∂ w j i = ∑ k = 1 l ( t k − o k ) ψ ′ ( n e t k ) v k j φ ′ ( n e t j ) x i \frac{\partial E}{\partial w_{ji}}=\sum_{k = 1}^{l}(t_k - o_k)\psi'(net_k)v_{kj}\varphi'(net_j)x_i wjiE=k=1l(tkok)ψ(netk)vkjφ(netj)xi

然后根据梯度下降法更新权重和偏置:
v k j ( t + 1 ) = v k j ( t ) − η ∂ E ∂ v k j v_{kj}(t + 1)=v_{kj}(t)-\eta\frac{\partial E}{\partial v_{kj}} vkj(t+1)=vkj(t)ηvkjE
w j i ( t + 1 ) = w j i ( t ) − η ∂ E ∂ w j i w_{ji}(t + 1)=w_{ji}(t)-\eta\frac{\partial E}{\partial w_{ji}} wji(t+1)=wji(t)ηwjiE
c k ( t + 1 ) = c k ( t ) − η ∂ E ∂ c k c_k(t + 1)=c_k(t)-\eta\frac{\partial E}{\partial c_k} ck(t+1)=ck(t)ηckE
b j ( t + 1 ) = b j ( t ) − η ∂ E ∂ b j b_j(t + 1)=b_j(t)-\eta\frac{\partial E}{\partial b_j} bj(t+1)=bj(t)ηbjE
其中 η \eta η 是学习率,控制着权重和偏置更新的步长。

三、案例分析

(一)数据准备

在本案例中,我们使用之前GRNN案例中保存的数据。通过 load best 加载保存的数据,其中包含了经过交叉验证得到的最佳输入 desired_input 和最佳输出 desired_output,以及测试数据 p_testt_test,还有归一化所需的参数 mintmaxt

(二)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))])

代码解释:

  1. 网络创建:使用 newff 函数创建BP神经网络,minmax(p) 表示输入数据的范围,[n, 3] 表示隐藏层有 n n n 个神经元,输出层有 3 个神经元,{'tansig', 'purelin'} 分别表示隐藏层和输出层的激活函数,'trainlm' 表示使用Levenberg - Marquardt算法进行训练。
  2. 训练参数设置net.trainParam.show = 50 表示每 50 个训练周期显示一次训练信息,net.trainParam.epochs = 2000 表示最大训练周期为 2000 次,net.trainParam.goal = 1e-3 表示训练的目标误差为 1 × 1 0 − 3 1\times10^{-3} 1×103
  3. 训练网络:使用 train 函数调用 trainlm 算法对BP网络进行训练。
  4. 预测与误差计算:使用 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.

;