基于分位数回归的长短期记忆网络QRLSTM的数据回归区间预测,多输入单输出模型。(主要应用于风速,负荷,功率)

%%  清空环境变量
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 ); 

你可能感兴趣的:(深度学习,人工智能)