• SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测


    SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

    预测效果

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

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

    在这里插入图片描述

    基本介绍

    1.基于PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测,要求Matlab2023版以上,自注意力机制,一键单头注意力机制替换成多头注意力机制;
    2.输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测;
    3.data为数据集,main.m为主程序,运行即可,所有文件放在一个文件夹;
    4.命令窗口输出R2、MSE、MAE、MAPE和RMSE多指标评价;
    5.优化学习率,神经元个数,注意力机制的键值, 正则化参数。

    程序设计

    • 完整源码和数据获取方式私信博主回复Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测
    
    %% 
    
    %% 粒子群算法优化TCN-BiGRU-Attention,实现多变量输入单步预测
    clc;
    clear 
    close all
    
    X = xlsread('data.xlsx');
    num_samples = length(X);                            % 样本个数 
    kim = 6;                      % 延时步长(kim个历史数据作为自变量)
    zim =  1;                      % 跨zim个时间点进行预测
    or_dim = size(X,2);
    
    %  重构数据集
    for i = 1: num_samples - kim - zim + 1
        res(i, :) = [reshape(X(i: i + kim - 1,:), 1, kim*or_dim), X(i + kim + zim - 1,:)];
    end
    
    
    % 训练集和测试集划分
    outdim = 1;                                  % 最后一列为输出
    num_size = 0.9;                              % 训练集占数据集比例
    num_train_s = round(num_size * num_samples); % 训练集样本个数
    f_ = size(res, 2) - outdim;                  % 输入特征维度
    
    
    P_train = res(1: num_train_s, 1: f_)';
    T_train = res(1: num_train_s, f_ + 1: end)';
    M = size(P_train, 2);
    
    P_test = res(num_train_s + 1: end, 1: f_)';
    T_test = res(num_train_s + 1: end, f_ + 1: end)';
    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);
    
    %  格式转换
    for i = 1 : M 
        vp_train{i, 1} = p_train(:, i);
        vt_train{i, 1} = t_train(:, i);
    end
    
    for i = 1 : N 
        vp_test{i, 1} = p_test(:, i);
        vt_test{i, 1} = t_test(:, i);
    end
    
    
    
    
    outputSize = 1;  %数据输出y的维度  
    numFilters = 64;
    filterSize = 5;
    dropoutFactor = 0.1;
    numBlocks = 2;
    
    layer = sequenceInputLayer(f_,Normalization="rescale-symmetric",Name="input");
    lgraph = layerGraph(layer);     convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal")
            layerNormalizationLayer
            reluLayer
            dropoutLayer(dropoutFactor) 
            additionLayer(2,Name="add_"+i)];
    
        % Add and connect layers.
        lgraph = addLayers(lgraph,layers);
        lgraph = connectLayers(lgraph,outputName,"conv1_"+i);
    
        % Skip connection.
        if i == 1
            % Include convolution in first skip connection.
            layer = convolution1dLayer(1,numFilters,Name="convSkip");
    
            lgraph = addLayers(lgraph,layer);
            lgraph = connectLayers(lgraph,outputName,"convSkip");
            lgraph = connectLayers(lgraph,"convSkip","add_" + i + "/in2");
        else
            lgraph = connectLayers(lgraph,outputName,"add_" + i + "/in2");
        end
    
        % Update layer output name.
        outputName = "add_" + i;
    end
    
    
    tempLayers = flattenLayer("Name","flatten");
    lgraph = addLayers(lgraph,tempLayers);
    
    tempLayers = gruLayer(NumNeurons,"Name","gru1");
    lgraph = addLayers(lgraph,tempLayers);
    
    tempLayers = [
        FlipLayer("flip3")
        gruLayer(NumNeurons,"Name","gru2")];
    lgraph = addLayers(lgraph,tempLayers);
    
    
    tempLayers = [
        concatenationLayer(1,2,"Name","concat")
    
    

    参考资料

    [1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
    [2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

  • 相关阅读:
    Spring - IoC 容器之拓展点 BeanPostProcessor
    值得拥有的 12 大最佳照片恢复软件 [持续更新]
    linux入门---信号的操作
    功能强大的开源数据中台系统 DataCap 2024.03.3 发布
    机器学习第二章 感知机和支持向量机
    人物重识别(ReID):AaP-ReID: Improved Attention-Aware Person Re-identification
    IPTV桌面系统建设物料和费用:服务器+软件+电视盒
    1.3自然语言的分布式表示-word2vec
    2 springMVC-处理器方法的返回值ModeVeiw,String,void,Object,List<Object>,String对象
    LeetCode每日一题(2369. Check if There is a Valid Partition For The Array)
  • 原文地址:https://blog.csdn.net/kjm13182345320/article/details/139279564