回归预测 | Matlab实现SSA-CNN-BiLSTM-Mutilhead-Attention麻雀算法优化卷积双向长短期记忆神经网络融合多头注意力机制多变量回归预测
目录
- 回归预测 | Matlab实现SSA-CNN-BiLSTM-Mutilhead-Attention麻雀算法优化卷积双向长短期记忆神经网络融合多头注意力机制多变量回归预测
- 预测效果
- 基本描述
- 程序设计
- 参考资料
预测效果
基本描述
1.Matlab实现SSA-CNN-BiLSTM-Mutilhead-Attention麻雀算法优化卷积双向长短期记忆神经网络融合多头注意力机制多变量回归预测,要求Matlab2023版以上;
2.输入多个特征,输出单个变量,多变量时间序列预测;
3.data为数据集,main.m为主程序,运行即可,所有文件放在一个文件夹;
4.命令窗口输出R2、MSE、MAE、MBE和MAPE多指标评价;
5.麻雀算法优化学习率,神经元个数,正则化系数。
程序设计
- 完整程序和数据获取方式私信博主回复Matlab实现SSA-CNN-BiLSTM-Mutilhead-Attention麻雀算法优化卷积双向长短期记忆神经网络融合多头注意力机制多变量回归预测。
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res =xlsread('data.xlsx','sheet1','A2:H104');
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
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);
f_ = size(P_train, 1); % 输入特征维度
%% 数据归一化
[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);
%_________________________________________________________________________%
% 麻雀优化算法 %
%_________________________________________________________________________%
function [Best_score,Best_pos,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)
ST = 0.7;%预警值
PD = 0.4;%发现者的比列,剩下的是加入者0.7
SD = 0.2;%意识到有危险麻雀的比重
PDNumber = round(pop*PD); %发现者数量
SDNumber = round(SD*PD);%意识到有危险麻雀数量
%种群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
%计算初始适应度值
fitness = zeros(1,pop);
for i = 1:pop
fitness(i) = fobj(X(i,:));
end
[fitness, index]= sort(fitness);%升排序
BestF = fitness(1);
WorstF = fitness(end);
GBestF = fitness(1);%全局最优适应度值
for i = 1:pop
X(i,:) = X0(index(i),:);
end
curve=zeros(1,Max_iter);
GBestX = X(1,:);%全局最优位置
X_new = X;
for i = 1: Max_iter
disp(['第',num2str(i),'次迭代'])
BestF = fitness(1);
WorstF = fitness(end);
R2 = rand(1);
for j = 1:PDNumber
if(R2<ST)
X_new(j,:) = X(j,:).*exp(-j/(rand(1)*Max_iter));
else
X_new(j,:) = X(j,:) + randn()*ones(1,dim);
end
end
for j = PDNumber+1:pop
selfAttentionLayer(2,2,"Name","selfattention") % 多头自注意力机制层 2023及以上版本
dropoutLayer(0.25,'Name','drop')
% 全连接层
fullyConnectedLayer(numResponses,'Name','fc')
regressionLayer('Name','output') ];
layers = layerGraph(layers);
layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');
%% 训练选项
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 100,... % 最大训练次数
'MiniBatchSize',64,... % 批处理
'InitialLearnRate',best_lr,... % 学习率
'L2Regularization', best_l2,... % L2正则化参数
'LearnRateSchedule', 'piecewise',... % 学习率下降
'LearnRateDropFactor', 0.1,... % 学习率下降因子 0.1
'LearnRateDropPeriod', 50,... % 经过训练后 学习率为*0.1
'Shuffle', 'every-epoch',... % 每次训练打乱数据集
'ValidationPatience', Inf,... % 关闭验证
'Plots', 'none',... % 关闭曲线
'Verbose', 1); % 打印