%% 清空环境变量
close all
clc; clear
%% 训练数据预测数据提取及归一化
%下载输入输出数据
load traindata1011 A O
load goontest inputtest_may16 outputtest_may16
inputnum=7;hiddennum=6;outputnum=1; %4-5-1结构 编码长度31 7-5-1 46
%训练数据和预测数据
input_train=A(1:360,:)';
input_test=inputtest_may16(1:24,:)';
output_train=O(1:360)';
output_test=outputtest_may16(1:24)';
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%% BP网络训练
%构建网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'});
%网络进化参数
net.trainParam.epochs=100; %迭代次数,学习率,目标
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;
net.trainParam.show=100;
net.trainParam.showWindow=0;
%网络训练
net=train(net,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
%% 结果分析
figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出(W)','fontsize',12)
xlabel('样本(h)','fontsize',12)
%预测误差
error=BPoutput-output_test;
error1=(output_test-BPoutput)./BPoutput; %相对误差
% figure(2)
% plot(error,'-*')
% title('BP网络预测误差','fontsize',12)
% ylabel('误差','fontsize',12)
% xlabel('样本','fontsize',12)
figure(3)
plot(error1,'-*');
title('BP神经网络预测误差百分比')
ylabel('相对误差','fontsize',12)
xlabel('样本(h)','fontsize',12)
figure(4)
hist(error1);
title('神经网络预测误差频率分布直方图');
MAE=(sum(abs(error1)))/24 %绝对平均误差 24对误差
RMSE=sqrt((sum(error1.^2))/24)%RMSE 均方根误差公式
% errorsum=sum(abs(error))