【matlab】BP神经网络 回归预测

多输入多输出
data里面一行代表一个样本

%% 清空环境变量
clc
clear all
close all
%% 训练数据预测数据提取及归一化
%% 训练集/测试集产生
%一列为一个样本

data = xlsread('data.xlsx');
P_train = data(1:16,1:3)';
T_train = data(1:16,4:5)';
P_test = data(1:16,1:3)';
T_test = data(1:16,4:5)';

[inputn, ps_input] = mapminmax(P_train,0,1);%归一化
input_n = mapminmax('apply', P_test, ps_input);
[outputn, ps_target] = mapminmax(T_train,0,1);%归一化


%% BP网络训练
% %初始化网络结构
%确定隐含层节点个数
%采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
setdemorandstream(pi)
net=newff(inputn,outputn,[7],{
    
    'tansig','purelin'},'trainlm');%这里要加入输出层的转移函数,一般是trainlm
net.trainParam.epochs=10000;%设置最大收敛次数
net.trainParam.lr=0.001;%设置学习速率
net.trainParam.goal=0.00001;%设置收敛误差
net.divideFcn = '';

%网络训练
net=train(net,inputn,outputn);

%% BP网络预测

%网络预测输出
an=sim(net,input_n);

%网络输出反归一化
BPoutput = mapminmax('reverse', an, ps_target); %反归一化

%% 结果分析
figure(1)%图一
subplot(2,1,1)
plot(BPoutput(1,:),':o')
hold on
plot(T_test(1,:),'-*');
legend('材料去除率预测输出','材料去除率期望输出')
title('BP网络预测材料去除率输出','fontsize',12)
ylabel('材料去除率/(nm/min)','fontsize',12)
xlabel('样本','fontsize',12)

subplot(2,1,2)
plot(BPoutput(2,:),':o')
hold on
plot(T_test(2,:),'-*');
legend('表面粗度R_a预测输出','表面粗度R_a期望输出')
title('BP网络预测表面粗度R_a输出','fontsize',12)
ylabel('表面粗度R_a/(nm)','fontsize',12)
xlabel('样本','fontsize',12)

%相对误差
% error1=BPoutput(1,:)-T_test(1,:);
% mse1=mse(error1)
% error2=BPoutput(2,:)-T_test(2,:);
% mse2=mse(error2)
mse_all=mse(BPoutput-T_test);% 计算输出的MSE(均方误差)

acc=exp(-mse_all)

save('net.mat','net') % 将网络net保存为.mat文件,后面可直接调用

猜你喜欢

转载自blog.csdn.net/qq_43050258/article/details/129270714