%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
tic
%% 导入数据
load xtrain.mat
P_train = xtrain(:,1:20)';
T_train = xtrain(:,end)';
load ytrain.mat
P_test = ytrain(:,1:20)';
T_test = ytrain(:,end)';
% P_train = xlsread('data','training set','B2:G191')';
% T_train= xlsread('data','training set','H2:H191')';
% % 测试集——44个样本
% P_test=xlsread('data','test set','B2:G45')';
% T_test=xlsread('data','test set','H2:H45')';
f_=size(P_train, 1); % 输入特征维度
outdim = 1; % 最后一列为输出
%% 划分训练集和测试集
M = size(P_train, 2);
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 创建网络
save_net = [];
for i = 0.02 : 0.19 : 0.97 % 置信区间范围 0.97 - 0.02 = 0.95
layers = [ ...
sequenceInputLayer(f_, 'name', 'input') % 输入层
lstmLayer(10, 'name', 'hidden') % LSTM 层,隐藏层节点个数 5
reluLayer % Relu激活层
fullyConnectedLayer(outdim, 'name', 'fullconnect') % 回归层
QRegressionLayer('out', i)];
%% 网络参数设置
options = trainingOptions('adam', ... % Adam梯度下降算法
'MaxEpochs',600, ... % 最大训练次数 600
'InitialLearnRate', 0.01, ... % 初始学习率为 0.01
'LearnRateSchedule', 'piecewise', ... % 学习率下降
'LearnRateDropFactor', 0.2, ... % 学习率下降因子 0.2
'LearnRateDropPeriod', 400, ... % 经过 400 次训练后 学习率为 0.01 * 0.2
'Shuffle', 'every-epoch', ... % 训练打乱数据集
'ValidationPatience', Inf, ... % 关闭验证
'Verbose', false);
%% 训练网络
net = trainNetwork(p_train, t_train, layers, options);
%% 保存网络
save_net = [save_net, net];
end
%% 采用不同网络进行预测
for i = 1 : length(save_net)
%% 仿真预测
t_sim1(i, :) = predict(save_net(i), p_train);
t_sim2(i, :) = predict(save_net(i), p_test );