声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
数据介绍
模型流程
创新点
结果展示
部分代码展示
完整代码
今天为大家带来一期基于分解+集成思想的VMD-CNN-BiGRU-Attention时间序列预测代码,知网和WOS都是搜不到的!完全是作者独家创立的!可以说是尚未发表的创新点!直接替换Excel数据即可用!
特别需要指出的是,我们在各个学术平台上搜索VMD-CNN-BiGRU-Attention,都是完全搜索不到这个模型的!!!不信的可以看下面截图!
知网平台:
WOS平台:
数据介绍
本期作者采用的数据是某地的风速时间序列数据集,是为了方便大家替换自己的数据集。如果有时间一列,则可输入可不输入,因为程序是不会识别时间。
更换自己的数据时,只需替换Excel中这一列,无需更改代码,非常方便!!!
模型流程
先简单介绍一下我们的这个模型是怎么实现以及它的流程:
1.数据导入:从Excel文件中读取风速预测的数据,只需一列即可。
2.VMD分解:设置VMD参数,如分解个数和阿尔法的值,对风速序列使用VMD分解方法,分解成多个固有模式函数(IMF),并绘制分解结果。
3.数据预处理和格式准备:将分解后的IMFs作为目标变量进行预处理,设置延时步长(若干个历史数据作为自变量),还有训练集和测试集的划分、数据归一化等。
4.模型训练:对每个IMF分量,构建并训练CNN-BiGRU-Attention模型。
5.模型预测:使用训练好的模型对训练集和测试集进行预测,并将预测结果进行反归一化处理。
6.预测结果集成:将所有IMF分量的预测结果相加,得到最终的预测结果。
7.结果对比和评估:绘制真实值与预测值的对比图,并计算R^2、MAE、RMSE和MAPE等评估指标。
以上所有流程,作者都已精心整理过代码,都可以一键运行main直接出图!
适用平台:Matlab2020B及以上,没有的可免费提供安装包!
创新点
以下这些文字,如果大家需要用这个程序写论文,都是可以直接搬运的!
1.VMD (Variational Mode Decomposition):
VMD是一种信号分解方法,可以将时间序列数据分解成不同频率的子信号(模态)。利用VMD技术,模型可以更好地捕捉时间序列数据中不同频率的变化模式,提高了模型对数据特征的提取能力。
2.CNN (Convolutional Neural Network):
CNN被用于处理每个VMD分解得到的子信号,以提取局部特征。通过CNN,模型能够有效地捕获子信号中的空间局部信息,增强了模型对时间序列数据的特征提取能力。
3.BiGRU (Bidirectional Gated Recurrent Unit):
BiGRU是一种具有双向记忆和门控机制的循环神经网络结构,能够捕捉时间序列数据中的长期依赖关系。通过BiGRU,模型可以在学习过程中有效地记忆序列数据中的历史信息,从而提高了模型对序列数据的建模能力。
4.通道注意力机制:
通道注意力机制被引入以动态地调整模型对不同时间序列位置的关注程度。通过Attention机制,模型可以自适应地关注重要的时间序列,从而提高了模型在时间序列预测任务中的性能。
5. 模型结构的高度整合
该模型的一个关键创新是四种技术的高度整合,形成了一个既能捕捉复杂时间依赖性、又能关注关键信息的强大深度学习模型。这种整合不仅使模型在时间序列任务中表现出色,还保证了较低的计算成本和良好的可解释性。
结果展示
原始序列:
VMD分解结果:
网络结构图:
训练集预测结果:
测试集预测结果:
回归图:
误差直方图:
预测结果指标:
由于时间关系,CNN-BiGRU-Attention的迭代次数作者只设置了100次,如果时间充足,可运行更多次,效果会更好~
以上所有图片,作者都已精心整理过代码,都可以一键运行main直接出图,不像其他代码一样需要每个文件运行很多次!
不信的话可以看下面文件夹截图,仅仅只有4个文件,非常清晰明了!
部分代码展示
%% 建立模型
lgraph = layerGraph(); % 建立空白网络结构
tempLayers = [
sequenceInputLayer([f_, 1, 1], "Name", "sequence") % 建立输入层,输入数据结构为[f_, 1, 1]
sequenceFoldingLayer("Name", "seqfold")]; % 建立序列折叠层
lgraph = addLayers(lgraph, tempLayers); % 将上述网络结构加入空白结构中
tempLayers = convolution2dLayer([3, 1], 32, "Name", "conv_1"); % 卷积层 卷积核[3, 1] 步长[1, 1] 通道数 32
lgraph = addLayers(lgraph,tempLayers); % 将上述网络结构加入空白结构中
tempLayers = [
reluLayer("Name", "relu_1") % 激活层
convolution2dLayer([3, 1], 64, "Name", "conv_2") % 卷积层 卷积核[3, 1] 步长[1, 1] 通道数 64
reluLayer("Name", "relu_2")]; % 激活层
lgraph = addLayers(lgraph, tempLayers); % 将上述网络结构加入空白结构中
可以看到,代码注释非常清晰,适合新手小白!
完整代码
点击下方小卡片,后台回复关键字,不区分大小写:
CXYHF
其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~