clc
clear
load flow.mat
%--------------------------数据图
figure(1)
plot(data)
xlabel('时间,15min/单位')
ylabel('交通流量/量')
%训练数据归一化
%%%----------------数据归一化
[datan,dataps]=mapminmax((data)');
%-------------------------重构数据
%m=10;
%tau=1;
x=datan;
for t=10:2684
Data(:,(t-9))=[x(t-9) x(t-8) x(t-7) x(t-6) x(t-5) x(t-4) x(t-3) x(t-2) x(t-1) x(t) x(t+1)];
end
%--------------------------开始预测
%准备训练数据和测试数据
trn_data = zeros(11,2560);
test_data = zeros(11,100);
% prepare training data
trn_data=Data(1:11,1:2560);
% prepare checking data
test_data=Data(1:11,2561:2660);
%训练数据
input_train=(trn_data(1:10,:));
output_train=(trn_data(11,:));
%测试数据
input_test=(test_data(1:10,:));
output_test=(test_data(11,:));
%构建BP神经网络
net=newff(input_train,output_train,[10 1],{'tansig','purelin'},'trainlm');
net.trainParam.epochs=7000; % 训练次数
net.trainParam.goal=0.00001; % 误差期望值
net.trainParam.lr=0.05; % 学习率
% returns of the train:
% net--New network
net=train(net,input_train,output_train);
%BP神经网络预测输出
y=sim(net,input_test);
%输出结果反归一化
BPoutput=mapminmax('reverse',y,dataps);
output=mapminmax('reverse',output_test,dataps);
%网络预测结果图形
figure(2)
plot(BPoutput,'-r*'); %利用BP产生的预测输出图形
hold on
plot(output,'-b+'); %预测数据的输出图形
legend('预测输出','期望输出')
xlabel('时间,15min/单位')
ylabel('交通流量/量')
%误差曲线
[DIM_INPUT LEN_DATA ]=size(test_data); % Data matrix size (1 input vector per row)
for tt=1:LEN_DATA,
error(tt)=abs((BPoutput(tt)-output(tt))/output(tt));
ERR(tt)= BPoutput(tt)-output(tt); % Prediction error
end
Emape=sum(error)/LEN_DATA
Emse=mse(ERR)
Ermse=sqrt(Emse)
NMSE=var(ERR)/var(output)
figure(3)
plot(error);
xlabel('时间,15min/单位')
ylabel('相对误差')
err_mse=mse(error);
err_rmse=sqrt(err_mse);