1.【SCI一区级】Matlab实现SSA-CNN-GRU-Multihead-Attention麻雀算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测,要求Matlab2023版以上;
2.输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测;
3.data为数据集,main.m为主程序,运行即可,所有文件放在一个文件夹;
4.命令窗口输出R2、MSE、MAE、MAPE和RMSE多指标评价;
5.麻雀算法优化学习率,神经元个数,注意力机制的键值, 卷积核个数。
%% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 %% 划分训练集和测试集 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); %% 数据平铺 P_train = double(reshape(P_train, f_, 1, 1, M)); P_test = double(reshape(P_test , f_, 1, 1, N)); t_train = t_train'; t_test = t_test' ; %% 数据格式转换 for i = 1 : M p_train{i, 1} = P_train(:, :, 1, i); end for i = 1 : N p_test{i, 1} = P_test( :, :, 1, i); end %% 数据平铺 %% 模型 numChannels = or_dim; maxPosition = 256*2; numHeads = 4; numKeyChannels = numHeads*32; layers = [ sequenceInputLayer(numChannels,Name="input") positionEmbeddingLayer(numChannels,maxPosition,Name="pos-emb"); additionLayer(2, Name="add") options = trainingOptions(solver, ... 'Plots','none', ... 'MaxEpochs', maxEpochs, ... 'MiniBatchSize', miniBatchSize, ... 'Shuffle', shuffle, ... 'InitialLearnRate', learningRate, ... 'GradientThreshold', gradientThreshold, ... 'ExecutionEnvironment', executionEnvironment);
[1] http://t.csdn.cn/pCWSp
[2] https://download.csdn.net/download/kjm13182345320/87568090?spm=1001.2014.3001.5501
[3] https://blog.csdn.net/kjm13182345320/article/details/129433463?spm=1001.2014.3001.5501