还在用单步预测?ALA-BiTCN-BiGRU一键实现多步预测吸引审稿人!附Matlab代码

📅 2026/8/2 20:14:34 👁️ 阅读次数 📝 编程学习
还在用单步预测?ALA-BiTCN-BiGRU一键实现多步预测吸引审稿人!附Matlab代码

目录

多步预测教程

数据输入格式

结果展示

模型原理

1.BiTCN层

2.BiGRU层

3.ALA优化算法

部分代码展示

完整代码获取


今天给大家带来一期利用25年最新旅鼠优化算法ALA优化BiTCN-BiGRU深度学习模型多步预测的代码,这个方法也是我们原创的一个新模型,任何学术平台都搜不到,非常适合作为创新点。

为什么我说非常适合作为创新点?

首先,目前市面上所有预测程序基本上都是单步的,实际上单步预测容易造成精度很高的假象,并且没有任何实际意义,会被审稿人质疑!而市面上出现的几种多步预测程序,大多存在错误或者不科学的地方。比如,很多小伙伴手里有超前24步或96步预测程序,实际上这并不是真正的多步预测,只是预测24行数据与真实值进行比较。而论文里通常用的3步、4步、6步预测,又该如何解决呢?难不成只预测三个点吗?

而我们本期推出的多步预测程序,不仅可以显著增加工作量,防止大家工作量不够,而且,利用25年最新的优化算法对模型进行优化,能够吸引审稿人,更能够真正反映出预测效果。

您只需做的工作:替换Excel数据,一键运行main文件即可!非常适合新手小白!

多步预测教程

时间序列的多步预测是以一维或多维的多个历史数据为输入变量,输入到设定的预测模型中去,再由模型对数据进行拟合,最终输出某区间时刻的未来值,可以看下面这张图!

多步预测也分很多类型,比如:直接策略、递归策略、多输出策略等等。在我们的代码中,是一次性收集了连续多个历史时刻作为输入并将紧随其后的多个时刻作为输出。因此,模型的目标是:

kim表示历史时间步长度(即连续 kim 个历史时刻作为输入),而zim表示预测的步长。模型每次会一次性输出多个未来时刻的预测值,因此我们的模型采用的是直接多步预测(Direct Multi-step)。

数据输入格式

本期推文采用的案例数据是经典的多变量时间序列预测数据集,是为了方便大家替换自己的数据集,各个变量采用特征1、特征2…表示,无实际含义,最后一列即为输出。同时,设置延时步长(即滑动窗口)为6。

更换自己的数据时,只需最后一列放想要预测的列,其余列放特征即可,无需更改代码(时间不用放,因为程序不会读取时间),非常方便!

结果展示

在模型超参数方面,统一设置最大迭代次数为100,Adam 梯度下降算法,初始学习率为0.01,最大位置编码长度为256。划分80%为训练集,20%为测试集,其余参数均为默认参数。同时,设置历史时间步(即滑动窗口,与预测步长不同)为6。

为了体现出多步预测的特点,我们分别设置步长为2、4、6,看一下各个步长预测的效果,其他步长小伙伴们也可以自行尝试!

首先是2步预测,即同时预测未来2个时刻,效果如下:

2步预测时,R2达到了0.926,精度还是非常高的,再来看下4步预测:

4步预测时,精度相比于2步有下降,R2下降,RMSE上升,这也完美符合多步预测的规律,预测的步长越长,难度也就越高,精度肯定越低。最后看下6步预测:

6步预测时,精度下降的更多,毕竟直接预测未来6个时刻还是非常有难度的,图中预测值的曲线相比上面两张图也偏移较多。

总体上看,我们的多步预测是非常成功的,很多论文里都会列一张表格,记录每个步长的各个误差指标,比如下面这个论文中的表格,小伙伴们也可以参考下:

当然,我们代码中还有很多其他图片,小伙伴们也可以自行选用~

迭代曲线图:

回归图:

误差直方图:

网络结构图:

最后,命令行窗口也会清楚地显示R2、MAE、RMSE、MAPE的误差指标~

以上结果展示中所有图片,作者都已精心整理过代码,都可以一键运行main直接出图!不信的话可以看下面文件夹截图,非常清晰明了!

适用平台:Matlab2023及以上,没有的文件夹里已经免费提供安装包,直接下载即可!

模型原理

这里再简单给小伙伴们介绍下ALA-BiTCN-BiGRU的模型预测原理,没有任何公式,可以放心查看!防止大家不会写!

1.BiTCN层

传统的TCN只对输入序列进行正向卷积计算,只提取正向数据特征,忽略了反向中的隐含信息。在输入序列的每一层卷积之后,扩张因子呈指数增长。经过几次卷积,BiTCN获得了更大的接受域。BiTCN接受域的增加带来了梯度消失和收敛缓慢等问题。残差块的引入可以避免这些问题,同时实现对序列的高效特征提取。因此,采用双向时间卷积结构BiTCN来捕捉前后方向的隐藏特征,以更好地获得序列的长时间依赖性!BiTCN的网络结构如下图所示!非常新颖!

2.BiGRU层

接着,利用BiGRU层来进一步处理BiTCN的输出,通过考虑的前后文信息来提高预测的准确性,进一步提高预测精度!BiGRU 本质上是一个双层 GRU 网络,在前向 GRU 层中,通过前向传播将特征输入到网络训练中,并挖掘数据的前向相关性。在逆向 GRU 层中,输入序列通过反向传播进行训练,挖掘数据的逆相关性。这种网络架构可以对输入的特征进行双向提取,更好地提高特征的完整性和全局性。

3.ALA优化算法

旅鼠优化算法ALA于2025年1月发表在SCITop期刊《Artificial Intelligence Review上!实验结果表明,ALA算法在大部分测试函数上均取得了最优结果!该算法性能非常不错,解决了BiTCN-BiGRU模型参数难以人工准确设定的问题!之前推文有做过ALA和经典算法SCA的比较,效果显而易见!链接如下

2025年SCI顶刊新算法-旅鼠优化算法(ALA)-公式原理详解与性能测评 Matlab代码免费获取

部分代码展示

%% 导入数据 X = xlsread('数据集.xlsx'); %% 数据分析 num_samples = size(X, 1); % 样本行数 or_dim = size(X, 2); % 每条数据的列数 kim = 6; % 历史时间步长度(用连续 kim 个历史时刻作为输入) zim = 2; % 想要一次性预测的步数(多步预测) %% 重构数据集 res = []; for i = 1 : (num_samples - kim - zim + 1) input_part = 略 % 输入部分 output_part = 略 % 输出部分 res(i, :) = [input_part, output_part]; % 拼接部分 end %% 训练集和测试集划分 outdim = zim; % 多步预测输出维度 = zim num_size = 0.8; % 训练集占比 num_train_s = round(num_size * size(res,1)); % 训练集样本个数 f_ = size(res, 2) - outdim; % 输入特征维度 = kim*or_dim P = res(:, 1 : f_); T = res(:, f_ + 1 : end); %% 划分训练集和测试集 P_train = P(1 : num_train_s, :)'; T_train = T(1 : num_train_s, :)'; M = size(P_train, 2); P_test = P(num_train_s + 1 : end, :)'; T_test = T(num_train_s + 1 : end, :)'; N = size(P_test, 2);

完整代码获取

如果需要以上完整代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:

多步预测单品