多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

news2024/11/19 13:44:29

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

目录

    • 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测
      • 效果一览
      • 基本介绍
      • 模型搭建
      • 程序设计
      • 参考资料

效果一览

1
2
3
4
5
6
7
8

9
10
11
12

基本介绍

MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测。基于贝叶斯(bayes)优化卷积神经网络-长短期记忆网络(CNN-LSTM)多变量时间序列预测,BO-CNN-LSTM/Bayes-CNN-LSTM多变量时间序列预测模型。
1.优化参数为:学习率,隐含层节点,正则化参数。
2.评价指标包括:R2、MAE、MSE、RMSE和MAPE等。
3.运行环境matlab2020b及以上。
4.data为数据集,格式为excel,4个输入特征,1个输出特征,考虑历史特征的影响,多变量时间序列预测,MainBO_CNN_LSTMNTS.m是主程序,其余为函数文件,无需运行;

模型搭建

  • CNN-LSTM模型结合了CNN和LSTM的优点,CNN-LSTM网络模型如图1所示,本文使用的CNN-LSTM模型的第一部分是由卷积层和最大值组成的CNN部分池化层,对原始数据进行预处理并输入CNN卷积层,利用卷积核自适应提取生命特征,卷积层将遍历输入信息,将卷积核权重与局部序列进行卷积运算体管信息得到初步的特征矩阵,比原始序列数据(矩阵)更具表现力。
  • 本文使用的池化层是最大池化层,池化操作对提取的特征进行数据降维,避免模型过拟合,保留主要特征。最大池化层将前一个卷积层得到的特征矩阵作为输入,在这个矩阵上滑动一个池化窗口,在每一次滑动中取池化窗口的最大值,输出一个更具表现力的特征矩阵。
  • 池化后,连接一个 LSTM 层,提取相关向量由CNN构造成一个长期的时间序列作为LSTM的输入数据。卷积层将卷积层的数据展平(Flatten),模型中加入Flatten,将(height,width,channel)的数据压缩成一个长高宽通道的一维数组,然后我们可以添加直接密集层。
  • 对卷积池化数据压缩特征操作,多个卷积特征提取框架提取的特征融合或从输出层融合,全连接层聚合学习到的特征,激活函数使用Relu。
  • 通常,在模型训练过程中需要对超参数进行优化,为模型选择一组最优的超参数,以提高预测的性能和有效性。 凭经验设置超参数会使最终确定的模型超参数组合不一定是最优的,这会影响模型网络的拟合程度及其对测试数据的泛化能力。

8

  • 伪代码
    9

10

  • 通过调整优化算法调整模型参数,学习重复率和贝叶斯优化超参数来调整模型参数。

程序设计

  • 完整程序和数据获取方式1:私信博主,同等价值程序兑换;
  • 完整程序和数据下载方式2(订阅《组合优化》专栏,同时获取《组合优化》专栏收录的所有程序,数据订阅后私信我获取):多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测
%%  优化算法参数设置
%参数取值上界(学习率,隐藏层节点,正则化系数)
%%  贝叶斯优化参数范围
optimVars = [
    optimizableVariable('NumOfUnits', [10, 50], 'Type', 'integer')
    optimizableVariable('InitialLearnRate', [1e-3, 1], 'Transform', 'log')
    optimizableVariable('L2Regularization', [1e-10, 1e-2], 'Transform', 'log')];

%%  贝叶斯优化网络参数
bayesopt(fitness, optimVars, ...    % 优化函数,和参数范围
        'MaxTime', Inf, ...                      % 优化时间(不限制) 
        'IsObjectiveDeterministic', false, ...
        'MaxObjectiveEvaluations', 10, ...       % 最大迭代次数
        'Verbose', 1, ...                        % 显示优化过程
        'UseParallel', false);

%%  得到最优参数
NumOfUnits       = BayesObject.XAtMinEstimatedObjective.NumOfUnits;       % 最佳隐藏层节点数
InitialLearnRate = BayesObject.XAtMinEstimatedObjective.InitialLearnRate; % 最佳初始学习率
L2Regularization = BayesObject.XAtMinEstimatedObjective.L2Regularization; % 最佳L2正则化系数
%% 创建混合CNN-LSTM网络架构
% 输入特征维度
numFeatures  = f_;
% 输出特征维度
numResponses = 1;
FiltZise = 10;
%  创建"CNN-LSTM"模型
    layers = [...
        % 输入特征
        sequenceInputLayer([numFeatures 1 1],'Name','input')
        sequenceFoldingLayer('Name','fold')
        % CNN特征提取
        convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
        batchNormalizationLayer('Name','bn')
        eluLayer('Name','elu')
        averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
        % 展开层
        sequenceUnfoldingLayer('Name','unfold')
        % 平滑层
        flattenLayer('Name','flatten')
        % LSTM特征学习
        lstmLayer(50,'Name','lstm1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
        % LSTM输出
        lstmLayer(NumOfUnits,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
        dropoutLayer(0.25,'Name','drop3')
        % 全连接层
        fullyConnectedLayer(numResponses,'Name','fc')
        regressionLayer('Name','output')    ];

    layers = layerGraph(layers);
    layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');

%% CNNLSTM训练选项
% 批处理样本
% 最大迭代次数
%% 训练混合网络
net = trainNetwork(XrTrain,YrTrain,layers,options);

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

易点易动设备管理平台帮助化工企业实现设备高效管理

在现代化工企业中,设备管理和能耗监控是至关重要的。易点易动设备管理平台通过整合设备台账、巡检、维修、保养、备件管理、设备监控和能耗监控功能,为化工企业提供了一套全面、高效的解决方案。本文将详细介绍易点易动设备管理平台如何帮助化工企业实现…

JVM字节码分析

文章目录 1、类文件结构1.1、 魔数1.2、 版本1.3 、常量池1.4、 访问标识与继承信息1.5、 Field 信息1.6、 Method 信息1.7 、附加属性 2、字节码指令2.1、javap工具2.2、图解方法执行流程2.2.1 常量池载入运行时常量池2.2.2 方法字节码载入方法区2.2.3 main线程开始运行&#…

windows下另一种傻瓜式从零部署cuda环境的方式

前言 最近因为连续部署了两个深度学习环境,实在嫌烦了,于是摸索出一条简便的方式希望让人人都可以傻瓜式的快速部署,首先确保你的硬盘具有20G以上的空间,这里以部署torch的gpu版和让onnxruntime使用cuda加速为例,让我…

PDF.js源码使用总结

1、官网地址 pdf.js官网(http://mozilla.github.io/pdf.js/) pdf.js源码(https://github.com/mozilla/pdf.js) 版本选择:点击Tags 2、选择对应版本zip包下载、解压 在进行npm install之前 (注意:node.js…

【c++初阶】:引用

c入门 一.概念二.使用三.应用四.常引用五.引用与指针 一.概念 c语言中我们常用指针找地址,但在c中,忽略了指针(当然也可以使用指针)。常用引用这个概念。 二.使用 可以看到这里的b和c本质上都是a,只是不同的称呼罢了。…

【NestJs】数据库重构

上一篇文章详细了介绍nestjs 配置数据库,有不懂的小伙伴可以先查看上一篇文章【NestJs】使用连接mysql企业级开发规范在继续往下。 今天这一篇文章主要是针对配置数据库的重构,使用代码规范,方便后期维护。 当应用变得复杂 我们需要借用TypeO…

webstorm常用快捷键

webstorm作为前端代码JavaScript开发的利器,真的特别好用,我就总结一下我工作中经常用到的快捷键,有些快捷键是我自定义配置的,是以mac电脑来总结这篇文章的,请知晓: 自定义配置快捷键: 常用快…

SpringCloud源码探析(五)-网关Gateway的使用

1.概述 在微服务架构中,网关提供了统一的对外访问入口(自身跨一个或多个服务),它保证了内部服务对外暴露的合理性与安全性、降低了服务之间访问的复杂性,是微服务架构中至关重要的一部分。在SpringCloud中网关主要包含…

让观众近距离感受如然之光 lipro智能家居成上海车展亮点之一

近段时间,上海国际车展如火如荼地举行,吸引了众多汽车厂商及相关企业参展。在本次展会上,星纪魅族集团也携手亿咖通科技,以联合参展的形式登陆「上海国际车展」 6.1号馆,共同展示智能汽车解决方案及产品创新。此外&…

第十四届蓝桥杯研究生组2023年省赛题解--全部采用Java语言实现

引言 今天现在这里 挖个坑,太忙了,这个专题不一样有时间补完,但我会尽力而为的。记录一下今天的日子:2023/04/21 看看这个坑要什么时候自己才能补完。 题目pdf下载:第十四届蓝桥杯研究生组pdf下载 在此特别感谢博主…

flac转换成mp3,4种方法教会你

怎么把flac转换成mp3?由于互联网技术的不断提升,我们每天接触到的各种音频格式变得越来越多样化。然而,有些特殊格式的音频会在处理时带来一定困难,因为它们的兼容性较差,不能在常用播放器上正常播放,这就给…

React面试题

React 如何创建一个react的项目(使用脚手架) 安装cr脚手架:npm install -g create-react-app进入文件夹:create-react-app 项目名称进入项目:cd 项目名称运行项目:npm start 如何不使用脚手架创建一个项…

maven打包学习

这篇文章不错: 思考:打包的时候是按照当前项目为标准打包的,那么所有的冲突都会以当前pom为根pom打包。那么,如果jar冲突,会用当前pom的依赖jar。 根据这个文章做了个有趣的实验: object3 //install 2个…

深度强化学习——第一次知识小结(3.5)

一、策略网络的小结: 重要概念回顾: 1、动作价值函数QΠ(st,at) 动作价值函数是未来奖励总和Ut的条件期望,如果已知了策略函数Π与当前的状态st,QΠ就可以对所有的动作a打分,以此来决定选择哪个a 其实顾名思义就是…

2023第14届蓝桥杯C/C++A组省赛题解

省一了,占个坑,今天晚上来补蓝桥的题 试题 A: 幸运数 本题总分:5 分 【问题描述】 小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面 一半的数位之和,则这个数是他的幸运数字。例如 2314 是…

ROC的理解

ROC 的由来 ROC 曲线是由混淆矩阵衍生来的指标。 混淆矩阵如图所示, 二ROC曲线的横坐标为 FPR,纵坐标为 TPR,计算公式分别是 F P R F P F P T N , 也就是 F P R F P F A L S E FPR \frac{FP}{FPTN}, 也就是 FPR \frac{FP}{FALSE} FP…

5天学会Linux C高级

day1 用C语言的理论知识点去推断结果 需求&#xff1a;让面试官知道你懂这个内容 一、C语言补充内容 【1】结构体补充内容&#xff1a; 1&#xff09;结构体.等法 结构体.等法代码 #include <stdio.h> struct student { int num; float score; char name[32…

docker镜像创建|实战案例(ssh|systemd|nginx|apache)

docker镜像创建|实战案例&#xff08;ssh|systemd|nginx|apache&#xff09; 一 Docker 镜像的创建1.基于现有镜像创建2基于本地模板创建3 基于Dockerfile 创建为什么Docker里的centos的大小才200M&#xff1f;DockerfileDocker 镜像结构的分层 4 Dockerfile 案例&#xff08;h…

Java IO数据流

Java IO数据流介绍 在程序开发中&#xff0c;将不同输入/输出设备&#xff08;例如文件、网络、压缩包等&#xff09;之间的数据传输抽象为流。可以将流分为字节流&#xff08;以Stream结尾的流&#xff09;和字符流&#xff08;以Reader和Writer结尾的流&#xff09;两种 try…