clc%清除命令窗口变量
clear%清除工作空间变量
close all%关闭FIGURE图像
rng('default')
rng(2)
load maydata.mat
m=300;
n= randperm(length(num));
input_train=num(n(1:m),1:11)';%训练数据的输入数据
output_train=num(n(1:m),12)';%训练数据的输出数据4
input_test=num((m+1:end),1:11)';%测试数据的输入数据
output_test=num((m+1:end),12)'; %测试数据的输出数据
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);%训练数据的输入数据的归一化
[outputn,outputps]=mapminmax(output_train,0,1);%训练数据的输出数据的归一化de
inputn_test=mapminmax('apply',input_test,inputps);
outputn_test=mapminmax('apply',output_test,outputps);
%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,[135],{'tansig','tansig'},'trainlm');
% net=newff(minmax(inputn),outputn,[6],{'tansig','tansig'},'trainc');
net.trainParam.max_fail =50;
net.trainParam.epochs=1000;%最大迭代次数
net.trainParam.lr=0.2;%学习率
net.trainParam.goal=0.001;%学习目标
% net.divideParam.trainRatio = 0.6;
% net.divideParam.valRatio = 0.2;
% net.divideParam.testRatio = 0.2;
%网络训练
net=train(net,inputn,outputn);
%% BP网络预测
%网络预测输出
an=sim(net,inputn_test);
an1=sim(net,inputn);
%网络输出反归一化-+
BPoutput=round(mapminmax('reverse',an,outputps));
BPoutput1=round(mapminmax('reverse',an1,outputps));
R2 = R_2(output_test(1,:),BPoutput(1,:))
[MSE0, RMSE0, MBE0, MAE0 ] =MSE_RMSE_MBE_MAE(output_test(1,:),BPoutput(1,:))
%% 结果分析
figure
plot(output_test(1,:),'k-*');%期望数据,即真实的数据画图,-代表实现,*就是代表*的标识
hold on
plot( BPoutput(1,:),'b-^')%预测的结果数据画图:代表虚线,O代表圆圈标识,G代表绿色
hold on
legend('实际值风险类型','BP神经网络测试值')%标签
ylabel('风险类型')
xlabel('样本')
set(gca,'fontsize',12)
%预测误差
error=BPoutput-output_test;
result_table = table;
result_table.output_test = output_test';
result_table.BPoutput = BPoutput';
result_table.error =error';
writetable(result_table,'./jieguo.xlsx')
figure
plot(error(1,:)','k*')
ylabel('Error')
xlabel('样本')