• 时序预测 | MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测


    时序预测 | MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测

    预测效果

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    基本介绍

    MATLAB实现NGO-LSTM北方苍鹰算法优化长短期记忆网络时间序列预测(完整源码和数据)
    1.data为数据集,单变量时间序列。
    2.MainNGOLSTMTS.m为程序主文件,其他为函数文件无需运行。
    3.命令窗口输出MAE、MSE、RMSEP、R^2、RPD和MAPE,可在下载区获取数据和程序内容。
    4.北方苍鹰算法优化参数为学习率,隐藏层节点个数,正则化参数。
    注意程序和数据放在一个文件夹,运行环境为Matlab2018及以上.

    程序设计

    %% --------------LSTM优化----------------------
    % 参数设置
    SearchAgents = 5;  % 种群数量 
    Max_iterations =10; % 迭代次数  
    
    lowerbound = [1e-10 0.0001 10 ];%三个参数的下限
    upperbound = [1e-2 0.002 400 ];%三个参数的上限
    dim = 3;%数量,即要优化的LSTM超参数个数
     
    fobj = @(x)fun(x,inputn_train,outputn_train,outputps);   %调用函数fun计算适应度函数值
    %% 赋值; 
    [Best_score,Best_pos,Convergence_curve]=NGO(SearchAgents,Max_iterations,lowerbound,upperbound,dim,fobj)    %% 北方苍鹰算法
    
    %得到最优参数
    L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
    InitialLearnRate = Best_pos(1,2); % 最佳初始学习率
    NumOfUnits  =abs(round( Best_pos(1,3)));   % 最佳隐藏层节点数
    
    %% ------------------利用优化参数重新训练LSTM并预测----------------------------
    % 数据输入x的特征维度
    inputSize  = size(inputn_train,1);
    % 数据输出y的维度
    outputSize = size(outputn_train,1);
    
    %  设置网络结构
    layers = [ ...
        sequenceInputLayer(inputSize)     %输入层,参数是输入特征维数
        lstmLayer(NumOfUnits)        %学习层,隐含层神经元的个数
        dropoutLayer(0.2)                  %权重丢失率
        fullyConnectedLayer(outputSize)   %全连接层,也就是输出的维数
        regressionLayer];    %回归层,该参数说明是在进行回归问题,而不是分类问题
    
    % trainoption(lstm)
    opts = trainingOptions('adam', ...      %优化算法
        'MaxEpochs',100, ...                %最大迭代次数
        'GradientThreshold',1,...           %梯度阈值,防止梯度爆炸
        'ExecutionEnvironment','cpu',...   %对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 上快。其他情况下,在 CPU 上进行预测计算通常更快。
        'InitialLearnRate',InitialLearnRate, ...
        'LearnRateSchedule','piecewise', ...
        'LearnRateDropPeriod',120, ...
        'LearnRateDropFactor',0.2, ...   % 指定初始学习率 0.005,在 100 轮训练后通过乘以因子 0.2 来降低学习率。
        'L2Regularization', L2Regularization, ...       % 正则化参数
        'Verbose',false, ...         %如果将其设置为true,则有关训练进度的信息将被打印到命令窗口中。
        'Plots','training-progress'...   %构建曲线图,   若将'training-progress'替换为'none',则不画出曲线
        );   % 'MiniBatchSize',outputSize*30, ...
    
    %  训练
    LSTMnet = trainNetwork(inputn_train ,outputn_train ,layers,opts);    %  网络训练
    
    %  预测
    [LSTMnet,LSTMoutputr_train]= predictAndUpdateState(LSTMnet,inputn_train);   % 训练样本拟合值
    LSTMoutput_train = mapminmax('reverse',LSTMoutputr_train,outputps);  % 数据反归一化
    
    %网络测试输出
    LSTMoutputr_test= [];
    end
    LSTMoutput_test= mapminmax('reverse',LSTMoutputr_test,outputps);   %反归一化
    toc
    
    %% -----------------预测结果-------------------------
    %  数据格式转换
    LSTM_train =LSTMoutput_train';
    LSTM_test = LSTMoutput_test';
    
    train_DATA=output_train';    %训练样本标签
    test_DATA= output_test'; %测试样本标签
    
    %%  绘图
    %%  均方根误差 RMSE
    error1 = sqrt(sum((LSTM_train - train_DATA).^2)./M);
    error2 = sqrt(sum((LSTM_test- test_DATA).^2)./N);
    %%
    %决定系数
    R1 = 1 - norm(train_DATA - LSTM_train)^2 / norm(train_DATA - mean(train_DATA))^2;
    R2 = 1 - norm(test_DATA -  LSTM_test)^2 / norm(test_DATA -  mean(test_DATA ))^2;
    
    %%
    %均方误差 MSE
    mse1 = sum((LSTM_train - train_DATA).^2)./M;
    mse2 = sum((LSTM_test - test_DATA).^2)./N;
    %%
    %RPD 剩余预测残差
    SE1=std(LSTM_train-train_DATA);
    RPD1=std(train_DATA)/SE1;
    
    SE=std(LSTM_test-test_DATA);
    RPD2=std(test_DATA)/SE;
    %% 平均绝对误差MAE
    MAE1 = mean(abs(train_DATA - LSTM_train));
    MAE2 = mean(abs(test_DATA - LSTM_test));
    %% 平均绝对百分比误差MAPE
    MAPE1 = mean(abs((train_DATA - LSTM_train)./train_DATA));
    MAPE2 = mean(abs((test_DATA - LSTM_test)./test_DATA));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93

    参考资料

    [1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502
    [2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502

  • 相关阅读:
    7月 显卡选购指南矿难矿卡环境下选购选卡 AMD 6700 与6750xt 等解决方案
    devops步骤 -- jenkins安装
    JavaWeb开发之——DDL-操作表-数据类型(08)
    Unity Hub报错The Hub as encountered a critical error and must close
    记一次 .NET 某药材管理系统 卡死分析
    【超好懂的比赛题解】HNCPC Multi-university Training Round2 比赛题解(AHBGIK)
    【已解决】goland每次都自动删除我import的包
    Leetcode(452)——用最少数量的箭引爆气球
    【Mysql专题】视图介绍及其基本操作
    VLAN 配置案例
  • 原文地址:https://blog.csdn.net/kjm13182345320/article/details/132909759