基于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=1∑mwjixi+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+e−x1 和双曲正切函数
tanh
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
tanh(x)=ex+e−xex−e−x 等。
对于输出层第
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=1∑nvkjyj+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=1∑l(tk−ok)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
∂vkj∂E=(tk−ok)ψ′(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
∂wji∂E=k=1∑l(tk−ok)ψ′(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)−η∂vkj∂E
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)−η∂wji∂E
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)−η∂ck∂E
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)−η∂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]
表示隐藏层有 n n n 个神经元,输出层有 3 个神经元,{'tansig', 'purelin'}
分别表示隐藏层和输出层的激活函数,'trainlm'
表示使用Levenberg - Marquardt算法进行训练。 - 训练参数设置:
net.trainParam.show = 50
表示每 50 个训练周期显示一次训练信息,net.trainParam.epochs = 2000
表示最大训练周期为 2000 次,net.trainParam.goal = 1e-3
表示训练的目标误差为 1 × 1 0 − 3 1\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.