每层神经元数目(输入层,隐含层,输出层)
转移函数σ:(每一层的神经元基本上都会用同一个转移函数)
训练方法:traingdx(梯度下降)、trainlm(Levenburg-Marquardt,一种结合了梯度下降法和牛顿法的方法)
其他可选部分:误差函数(默认MSE),训练过程作图,等等。
%生成训练集、测试集
speed=xlsread('C:\Users\Hasee\Desktop\rs\BPoccupy.xlsx');
follow=xlsread('C:\Users\Hasee\Desktop\rs\BPfollow.xlsx');
P_train=speed((2:5000),2:end)';
T_train=follow((2:5000),2:end)';
P_test=speed((5001:6624),2:end)';
T_test=follow((5001:6624),2:end)';
N=size(P_test,2);
%归一化
[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,5,{'tansig','purelin'},'trainlm');
%训练参数
net.trainParam.epochs=1000;
net.trainParam.goal=1e-3;
net.trainParam.lr=0.01;
%训练网络
net=train(net,p_train,t_train);
%仿真测试
t_sim=sim(net,p_test);
%数据反归一化
T_sim=mapminmax('reverse',t_sim,ps_output);
%相对误差
error=abs(T_sim-T_test)./T_test;
%决定系数R2
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_test',T_sim',error'];
%绘图
figure;
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('流量')
string = {'测试集流量预测结果对比';['R^2=' num2str(R2)]};
title(string)