warning off
close all
clear
clc
files = 'data.xlsx';
sheet = 1; %工作表
data = xlsread(files,sheet);%读所有数据
[m,n]=size(data);
%数据集随机划分
% indice=randperm(m);
% train=indice(1:floor(length(indice)*0.7));
% validation=indice(floor(length(indice)*0.7)+1:end);
%validation=indice(floor(length(indice)*0.7)+1:floor(length(indice)*0.9));
%test = indice(floor(length(indice)*0.9)+1:end);
%数据集不随机划分
train_ind=1:1:floor(m*0.9);
validation=floor(m*0.9)+1:1:m;
%归一化操作
[Y,PS]=mapminmax(data',0,1);
data_gy = Y';
%切分得x,y
train_x = data_gy(train_ind,1:2);
train_y = data_gy(train_ind,3);
valid_x = data_gy(validation,1:2);
valid_y = data_gy(validation,3);
%test_x = data_gy(test,1:2);
%test_y = data_gy(test,3);
net=newff([-1 1; -1 1],[2,3,1],{'tansig','tansig','purelin'},'trainlm');
net.trainParam.epochs=10000;%训练次数设置
net.trainParam.goal=1e-7;%训练目标设置
net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛
net.trainParam.mc=0.9;%动量因子的设置,默认为0.9
net.trainParam.show=25;%显示的间隔次数
net = train(net,train_x',train_y');
YPred=sim(net,valid_x'); %仿真预测
YReal = valid_y;
YPred_inv = mapminmax('reverse',YPred,PS)';
YReal_inv = mapminmax('reverse',YReal',PS)';
figure(1);
hold on;
x=1:1:length(YPred_inv);
plot(x,YPred_inv(:,3),'-*b',x,YReal_inv(:,3),'-or'); %线性,颜色,标记
axis([1,length(YPred_inv),30,45]) %确定x轴与y轴框图大小
%set(gca,'XTick',[0:1:length(YPred_inv)]) %x轴范围1-6,间隔1
%set(gca,'YTick',[0:10:60]) %y轴范围0-700,间隔100
legend('预测值','实际值'); %右上角标注
xlabel('样本') %x轴坐标描述
ylabel('输出') %y轴坐标描述
grid on