***小白,有很多还没搞懂,这段代码用了14天的负荷数据作为样本集(一天有288个数据,每5分钟一个数据),不能理解输入层神经元为什么设为5个,或者说这段代码就没怎么看懂,要是输入层神经元为5个,那根据一般规则隐含层神经元应该为11个啊,求大家帮我解释一下,这个输入是前五天负荷数据吗?预测的又是哪一天的负荷数据?
clc
clear
close all
for i=1:14
str=['201010' num2str(i,'%02d'),'.镇江地区.txt']
data(:,i)=load('20101001.镇江地区.txt');
% A=load('20101001.镇江地区.txt');
end
data=data(4:end,:);
% P0=[data(:,1:2);data(:,2:3);data(:,14:18)];
p_train=[];
t_train=[];
for i=1:7
p_train=[p_train;data(:,0+i:4+i)];
t_train=[t_train;data(:,5+i)];
end
p_test=[];
t_test=[];
for i=8:8
p_test=[p_test;data(:,0+i:4+i)];
t_test=[t_test;data(:,5+i)];
end
%*********************************
%% 数据归一化
% 训练集
[pn_train,inputps1] = mapminmax(p_train',0,1);
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps1);
pn_test = pn_test';
% 测试集
[tn_train,outputps1] = mapminmax(t_train',0,1);
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps1);
tn_test = tn_test';
%%BP 神经网络进行预测得代码
% 数据转置
pn_train = pn_train';
tn_train = tn_train';
pn_test = pn_test';
tn_test = tn_test';
net=newff(minmax(pn_train),[27,1],{'tansig' 'purelin'} ,'traingda');%logsig
% 设置训练参数
net.trainparam.epochs = 4000;
net.trainparam.goal = 0.0001;
net.trainparam.show = 10;
net.trainparam.lr = 0.1;
% 训练网络
net = train(net,pn_train,tn_train);
% 仿真测试
Predict_1 = sim(net,pn_train);
Predict_2 = sim(net,pn_test);
% % 反归一化
predict_1 = mapminmax('reverse',Predict_1,outputps1)';
predict_2 = mapminmax('reverse',Predict_2,outputps1)';
% 结果对比
figure()
plot(1:length(t_train),t_train,'r-','LineWidth',2);
hold on
plot(1:length(t_train),predict_1,'b:o','LineWidth',2)
% grid on
legend('Train真实值','预测值')
title('训练对比图');
figure()
plot(1:length(t_train),t_train-predict_1,'r','LineWidth',0.5);
title('训练误差');
figure()
plot(linspace(1,24,288),t_test,'r-','LineWidth',2);
hold on
plot(linspace(1,24,288),predict_2,'b:o','LineWidth',2)
% grid on
legend('Test真实值','预测值')
title('测试对比图');
xlim([1 24]);
figure()
plot(linspace(1,24,288),t_test-predict_2,'r','LineWidth',2);xlim([7 21]);
title('测试误差');
figure()
plot(linspace(1,24,288),(t_test-predict_2)./predict_2,'r','LineWidth',2);xlim([7 21]);
title('相对误差');
E1=mse(t_train - predict_1);
E2=mse(t_test - predict_2);
R1=corr2(t_train,predict_1);
R2=corr2(t_test,predict_2);
mape2=mape(t_test,predict_2);
%注index有指标的含义
RBF_index.E2=E2;
RBF_index.R2=R2;
RBF_index.mape2=mape2;
fprintf('BP测试MSE=%4f\n',E2);
fprintf('BP测试相关性=%4f\n',R2);
fprintf('BP测试平均相对误差(Mape)=%4f\n',mape2);
RBF_ouput=predict_2;