BP神经网络模型
神经网络模型是仿照人类大脑神经系统构建的模型,目前常用的神经网络模型为BP神经网络模型。BP神经网络模型是多层前馈神经网络,该模型算法中主要的部分是信号的前向传播和误差的反向传播。神经网络基本结构如下图所示:
图3.1中,从左至右分别为输入层i,隐藏层k(隐藏层一般有多层),输出层j。
误差的反向传播是BP神经网络模型算法的核心,随着迭代次数的增加,误差不断减小,当达到人工设定的迭代次数或者最小误差时停止训练,确定神经元之间的最优连接权值和阈值。由于网络本身的缺陷,连接权值是随机给定的,网络经常会陷入局部最优解,通常无法得到网络的最优权值。
BP神经网络预测用来预测各领域数据,例如电力行业负荷预测,风力预测,光伏预测等,本文通过应用BP神经网络,以近几年电动汽车销售量为历史数据,对未来的销售量进行预测,matlab程序如下,进攻参考:
下面展示一些 内联代码片
。
// BP神经网络预测matlab程序
clc
close all
clear all
% 年月, 销售量/数量
S=[ 201901 9.6;
201902 5.3;
201903 12.6;
201904 9.7;
201905 10.4;
201906 15.2;
201907 8;
201908 8.5;
201909 8;
201910 7.5;
201911 9.5;
201912 16.3;
202001 4.4;
202002 1.29;
202003 5.3;
202004 7.2;
202005 8.2;
202006 10.4;
202007 9.8;
202008 10.9;
202009 13.8;
202010 16;
202011 20;
202012 24.8];
%% 神经网络模型
Result3=ones(1,12);
E3=ones(1,12);
s=S(:,1);
load=S(:,2);
T=[S(13,2),S(14,2),S(15,2),S(16,2),S(17,2),S(18,2),S(19,2),S(20,2),S(21,2),S(22,2),S(23,2),S(24,2)];
for i=1:12
P_train=S(i:i+12,:)';% 训练数据输入
T_train=load(i:i+12)';% 训练数据输出
P_test=S(i+12,:)';% 测试数据输入
T_test=load(i+12)';% 测试数据输出
[p_train, ps_input] = mapminmax(P_train,0,1);
p_test = mapminmax('apply',P_test,ps_input);
[t_train, ps_output] = mapminmax(T_train,0,1);
net = newff(p_train,t_train,9);
net.trainParam.epochs = 1000;% 设置网络训练参数
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;
net = train(net,p_train,t_train);% Elman网络训练
t_sim = sim(net,p_test);% 预测数据
T_sim = mapminmax('reverse',t_sim,ps_output);
error = (T_sim - T_test)./T_test;
N = size(P_test,2);
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
result=T_sim;
Result3(i)=result;
E3(i)=error;
end
E3=ones(1,12);
for i=1:2
E3(i)=(Result3(i)-T(i))/T(i);
end
figure
plot(202001:1:202012,T,'b:*',202001:1:202012,Result3,'r-o')
legend('真实值','预测值')
xlabel('时间:x年x月')
ylabel('销售量/万辆')
运行结果如下图:
从结果中我们可以看出,BP神经网络有很好的预测效果,预测值与实际值比较接近。