未发表!黑翅鸢算法BKA优化BiTCN-BiGRU-Attention一键实现多变量时序预测并与未优化的模型对比!

       声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 

目录

数据介绍

模型介绍

1.BiTCN层

2.BiGRU层

3.Attention机制

4.整体模型结构

模型流程

创新点

1. 综合双向时序特征提取

2. 强化长短期记忆处理能力

3. 引入自适应注意力机制

4. 模型结构的高度整合

5.利用24年最新的黑翅鸢优化算法BKA实现超参数自动优化:

结果展示

部分代码

完整代码


        今天为大家带来一期黑翅鸢算法BKA优化BiTCN-BiGRU-Attention代码,知网和WOS都是搜不到的!完全是作者独家创立的!并且,提供了与未优化的模型对比可以说是尚未发表的创新点直接替换Excel数据即可用!

        特别需要指出的是,我们在各个学术平台上搜索BKA-BiTCN-BiGRU-Attention,都是完全搜索不到这个模型的!!!不信的可以看下面截图!

        知网平台:

        WOS平台:

数据介绍

        本期采用的数据是经典的多变量时间序列预测数据集,是为了方便大家替换自己的数据集,各个变量采用特征1、特征2…表示,无实际含义,最后一列即为输出。

        更换自己的数据时,只需最后一列放想要预测的列,其余列放特征即可,无需更改代码,非常方便!

模型介绍

1.BiTCN层

        TCN由具有相同输入和输出长度的扩张因果卷积层组成,结合了CNN和RNN的优势。因果卷积的示意图如下图所示:

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

2.BiGRU层

        接着,利用BiGRU层来进一步处理BiTCN的输出,通过考虑的前后文信息来提高预测的准确性,进一步提高预测精度!BiGRU通过结合正向和反向两个GRU,增强了模型的记忆能力,使其能够从两个方向学习数据的动态变化。与LSTM相比,GRU结构更简单,参数更少,能够以较低的计算成本实现强大的序列建模能力。

3.Attention机制

        本文的注意力机制连接在了BiTCN-BiGRU层的后面,为自注意力机制,具体连接方式可以看后文的网络结构!注意力机制能使模型能够聚焦于序列中最重要的部分,即使在处理长序列时也不会丢失重要信息,这对于提高模型的解释性和性能都有重要意义。通过权重分配,注意力层能够加强模型内部特征之间的相互作用,使得模型能够学习到更加复杂和抽象的特征表示。

4.整体模型结构

        以下图片,代码均可以一键运行出图!

模型流程

        最后再介绍一下我们的这个模型是怎么实现的以及它的流程:

        1.数据导入:从Excel文件中读取数据,设定最后一列为输出变量,其余列作为特征变量。

        2.训练集与测试集划分:按比例划分训练集和测试集。

        3.数据归一化:对训练集和测试集的特征和标签进行归一化处理,以提高模型训练效率。

        4.建立原始模型:设计未经优化的BiTCN-BiGRU-Attention网络,并保存相应预测结果。

        5.优化算法确定超参数:使用黑翅鸢优化算法(BKA)确定BiTCN-BiGRU-Attention模型的最优参数,包括学习率,BiGRU的神经元个数,注意力机制的键值,正则化参数。

        6.参数回带:将得到的最优参数回带入BiTCN-BiGRU-Attention中,形成BKA-BiTCN-BiGRU-Attention,即优化后的BiTCN-BiGRU-Attention模型。

        7.模型预测:利用训练好的模型对训练集和测试集进行预测,然后对预测结果进行反归一化。

        8.性能评估:通过绘制真实值与预测值的对比图、雷达图、柱状图、二维图等,并计算R^2、MAE、RMSE和MAPE等指标,评估模型性能。

创新点

        以下这些文字,如果大家需要用这个程序写论文,都是可以直接搬运的!

1. 综合双向时序特征提取

        BiTCN组件通过融合正向和反向的时序卷积网络,有效捕获了数据的前后文信息,提供了一种深度且广泛的特征提取方式。不同膨胀因子的使用使得模型能在多个时间尺度上提取特征,这种综合双向和多尺度特征提取的方法在预测中是非常创新的,能够显著提高对复杂模式的识别能力。

2. 强化长短期记忆处理能力

        通过将BiGRU集成到模型中,该模型不仅保留了GRU在处理长短期依赖方面的优势,还通过双向处理机制增强了对数据前后文信息的理解。这种结合了双向处理和门控机制的设计,进一步强化了模型处理复杂时间依赖关系的能力。

3. 引入自适应注意力机制

        模型通过引入注意力机制,自适应地关注对当前任务最重要的特征,这不仅提高了模型的准确性,还增加了模型对其决策过程的解释性。在BiTCN和BiGRU的基础上加入注意力机制,确保了模型能够在复杂的数据中识别并聚焦于关键信息,是一大创新点。

4. 模型结构的高度整合

        该模型的一个关键创新是三种技术的高度整合,形成了一个既能捕捉复杂时间依赖性、又能关注关键信息的强大网络。这种整合不仅使模型在预测和分类任务中表现出色,还保证了较低的计算成本和良好的可解释性。

5.利用24年最新的黑翅鸢优化算法BKA实现超参数自动优化

        黑翅鸢优化算法(Black‑winged kite algorithm, BKA)于2024年3月发表在中科院1区Top SCI期刊《Artificial Intelligence Review》上,该算法刚刚提出,提出时间极短,目前还没有使用该算法的文献,你先用,你就是创新!

        BKA算法灵感来源于黑翅鸢迁徙和捕食行为,BKA以其优异的性能证明了其在大部分CEC-2022和CEC-2017测试函数都能够获得最佳性能!

        具体原理和测试效果请看这篇推文:

2024年SCI一区新算法-黑翅鸢优化算法(BKA)-公式原理详解与性能测评 Matlab代码免费获取

结果展示

        可以看到,优化后的BiTCN-BiGRU-Attention模型精度有了很大的提高,误差明显减小!出的图片也非常美观!需要注意的是,因为MAPE是百分制的,所以值非常小,因此相比于MAE、RMSE指标其值过小而看不出,这是非常正常的!

        另外,如果想要预测精度更好,可以增大迭代次数,作者这里因为时间关系只设置了6次,大家在时间充足的情况下迭代10次甚至20次都是可以的!

       以上所有图片,作者都已精心整理过代码,都可以一键运行main直接出图,不像其他代码一样需要每个文件运行很多次!

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

部分代码

%%  导入数据
result = xlsread('数据集.xlsx');

%%  数据分析
num_samples = length(result);               %  样本个数
kim = 3;                                    %  延时步长(前面多行历史数据作为自变量)
zim = 1;                                    %  跨zim个时间点进行预测
nim = size(result, 2);                      %  原始数据的特征是数目

%%  划分数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1 , :), 1, kim * nim), result(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

disp('此程序运行较慢,请耐心等待!')

%% 优化算法优化前,构建优化前的BiTCN-BiGRU-Attention模型 
numFilters = 64;
filterSize = 5;
dropoutFactor = 0.1;
numBlocks = 1;

完整代码

         点击下方小卡片,后台回复关键字,不区分大小写:

CXYHF

        其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~

         更多代码链接:更多代码链接

  • 39
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了驱动STM8S903K3使用BKA30,您可以使用RIS-BKA库。首先,您需要在项目中安装该库,可以使用以下命令进行安装: ``` $ npm install ris-bka ``` 然后,在您的项目中导入ris-bka模块,并创建一个RisBka对象。您可以使用该对象的方法来执行特定的操作,例如获取版本信息。在您的代码中,您可以调用`getVersion`方法来获取版本信息。该方法接受一个回调函数作为参数,该回调函数将在获取版本信息成功后被调用。您可以在回调函数中处理获取到的版本信息并进行相应的操作。以下是一个使用RIS-BKA库驱动STM8S903K3的示例代码: ```javascript // 导入ris-bka模块 var RisBka = require('ris-bka'); // 创建RisBka对象 var bka = new RisBka(); // 使用getVersion方法获取版本信息 bka.getVersion(function(version) { // 在回调函数中处理获取到的版本信息 console.log("BKA30驱动版本:" + version); // 进行相应的操作 // ... }); ``` 请注意,以上代码仅为示例,您可能需要根据实际情况进行相应的修改和补充。希望这能帮助到您。<span class="em">1</span> #### 引用[.reference_title] - *1* [ris-bka:用于请求 ris.bka.gv.at 的 Javascript 库](https://download.csdn.net/download/weixin_42116585/19568519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值