【MATLAB第34期】基于MATLAB的2023年棕熊优化算法BOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富

news2025/1/11 17:47:12

【MATLAB第34期】基于MATLAB的2023年棕熊优化算法BOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富,适合小白

一、代码优势

1.使用2023年棕熊算法BOA优化LSTM超参数(学习率,隐藏层节点,正则化系数,训练次数)
2.目标函数考虑训练集和测试集,更加合理;运行结果稳定,可直接调用结果,且调用结果非常方便。
3.滑动窗口方法处理单列时间序列数据,考虑历史数据的影响。
4.代码一体化,一键运行;注释丰富,评价指标丰富,逻辑清晰,适合小白学习。
5.代码绘图丰富(除基础绘图以外,还包括训练LOSS图、超参数迭代图)、美观
6.命令行窗口可见运行过程的结果.
7.参数可在代码中设置,方便调试;优化超参数可以根据需求更改 。

举例:

1.绘图美观,且包含对超参数随迭代次数变化的研究。

在这里插入图片描述
2.代码方便计算和调用,只需要在fun函数后面加超参数组合,就能得到结果。

[fitness1,net1,res1,info1] =  fun([0.005,50,0.005,50]); % 基础参数取值(学习率,隐藏层节点,正则化系数,训练次数)

二、后期研究计划

后续将在博文中更新更丰富、功能更完整的作品,敬请期待。
1.多层LSTM结构优化,含单向LSTM/GRU和双向Bilstm混合模型
2.更多超参数优化,含结构层数量、隐含层节点数、最小批处理数量、时间步数等
3.含预测未来功能
4.更多新的算法以及在基础上改进算法对比。
5.loss内置函数修改
6.多场景应用(分类、回归、多输入多输出等等)

三、代码展示

%%  1.清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
%%  2.导入数据(时间序列的单列数据)
result = xlsread('数据集.xlsx');

%%  3.数据分析
num_samples = length(result);  % 样本个数 
kim = 15;                      % 延时步长(kim个历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测

%%  4.划分数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end

%%  5.数据集分析
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度

%%  6.划分训练集和测试集
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);

%%  7.数据归一化
[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);

%%  8.数据平铺
%   将数据平铺成1维数据只是一种处理方式
%   也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
%   但是应该始终和输入层数据结构保持一致
P_train =  double(reshape(P_train, f_, 1, 1, M));
P_test  =  double(reshape(P_test , f_, 1, 1, N));

t_train = t_train';
t_test  = t_test' ;

%%  9.数据格式转换
for i = 1 : M
    p_train{i, 1} = P_train(:, :, 1, i);
end

for i = 1 : N
    p_test{i, 1}  = P_test( :, :, 1, i);
end

%%  10.优化算法参数设置
SearchAgents_no = 5;                   % 种群数量
Max_iteration = 5;                    % 最大迭代次数
dim = 4;                               % 优化参数个数
lb = [1e-3, 10, 1e-4,20];                 % 参数取值下界(学习率,隐藏层节点,正则化系数,训练次数)
ub = [1e-2, 80, 1e-3,100];                 % 参数取值上界(学习率,隐藏层节点,正则化系数,训练次数)
fobj=@(x)fun(x);  %适应度函数
%%  11.优化算法初始化
[Best_sol,Best_X,Convergence,BestNet,pos_curve]=BOA(SearchAgents_no,dim,Max_iteration,lb,ub,fobj)

%% 12.优化前LSTM运行结果
            
[fitness1,net1,res1,info1] =  fun([0.005,50,0.005,50]); % 基础参数取值(学习率,隐藏层节点,正则化系数,训练次数)
predict_value1=res1.predict_value1;
predict_value2=res1.predict_value2;
true_value1=res1.true_value1;
true_value2=res1.true_value2;
i=1;
disp('-------------------------------------------------------------')
disp('LSTM结果:')
rmse1=sqrt(mean((true_value1(i,:)-predict_value1(i,:)).^2));
disp(['LSTM训练集根均方差(RMSE):',num2str(rmse1)])
mae1=mean(abs(true_value1(i,:)-predict_value1(i,:)));
disp(['LSTM训练集平均绝对误差(MAE):',num2str(mae1)])
mape1=mean(abs((true_value1(i,:)-predict_value1(i,:))./true_value1(i,:)));
disp(['LSTM训练集平均相对百分误差(MAPE):',num2str(mape1*100),'%'])
r2_1=R2(true_value1(i,:),predict_value1(i,:));
disp(['LSTM训练集R-square决定系数(R2):',num2str(r2_1)])
rmse2=sqrt(mean((true_value2(i,:)-predict_value2(i,:)).^2));
disp(['LSTM测试集根均方差(RMSE):',num2str(rmse2)])
mae2=mean(abs(true_value2(i,:)-predict_value2(i,:)));
disp(['LSTM测试集平均绝对误差(MAE):',num2str(mae2)])
mape2=mean(abs((true_value2(i,:)-predict_value2(i,:))./true_value2(i,:)));
disp(['LSTM测试集平均相对百分误差(MAPE):',num2str(mape2*100),'%'])
r2_2=R2(true_value2(i,:),predict_value2(i,:));
disp(['LSTM测试集R-square决定系数(R2):',num2str(r2_2)])


%% 13. 绘图

%% 14.优化后BOA-LSTM运行结果  
[fitness2,net2,res2,info2] =  fun(Best_X); % 基础参数取值(学习率,隐藏层节点,正则化系数,训练次数)

i=1;
disp('-------------------------------------------------------------')
disp('BOA-LSTM结果:')
disp('BOA-LSTM优化得到的最优参数为:')
disp(['BOA-LSTM优化得到的隐藏单元数目为:',num2str(round(Best_X(2)))]);
disp(['BOA-LSTM优化得到的最大训练周期为:',num2str(round(Best_X(4)))]);
disp(['BOA-LSTM优化得到的InitialLearnRate为:',num2str((Best_X(1)))]);
disp(['BOA-LSTM优化得到的L2Regularization为:',num2str((Best_X(3)))]);
op_rmse1=sqrt(mean((op_true_value1(i,:)-op_predict_value1(i,:)).^2));
disp(['BOA-LSTM训练集根均方差(RMSE):',num2str(op_rmse1)])
op_mae1=mean(abs(op_true_value1(i,:)-op_predict_value1(i,:)));
disp(['BOA-LSTM训练集平均绝对误差(MAE):',num2str(op_mae1)])
op_mape1=mean(abs((op_true_value1(i,:)-op_predict_value1(i,:))./op_true_value1(i,:)));
disp(['BOA-LSTM训练集平均相对百分误差(MAPE):',num2str(op_mape1*100),'%'])
op_r2_1=R2(op_true_value1(i,:),op_predict_value1(i,:));
disp(['BOA-LSTM训练集R-square决定系数(R2):',num2str(op_r2_1)])
op_rmse2=sqrt(mean((op_true_value2(i,:)-op_predict_value2(i,:)).^2));
disp(['BOA-LSTM测试集根均方差(RMSE):',num2str(op_rmse2)])
op_mae2=mean(abs(op_true_value2(i,:)-op_predict_value2(i,:)));
disp(['BOA-LSTM测试集平均绝对误差(MAE):',num2str(op_mae2)])
op_mape2=mean(abs((op_true_value2(i,:)-op_predict_value2(i,:))./op_true_value2(i,:)));
disp(['BOA-LSTM测试集平均相对百分误差(MAPE):',num2str(op_mape2*100),'%'])
op_r2_2=R2(op_true_value2(i,:),op_predict_value2(i,:));
disp(['BOA-LSTM测试集R-square决定系数(R2):',num2str(op_r2_2)])

%% 15.BOA-LSTM绘图

四、运行结果



LSTM结果:
LSTM训练集根均方差(RMSE):0.023407
LSTM训练集平均绝对误差(MAE):0.01781
LSTM训练集平均相对百分误差(MAPE):2.9834%
LSTM训练集R-square决定系数(R2):0.95768
LSTM测试集根均方差(RMSE):0.024046
LSTM测试集平均绝对误差(MAE):0.01902
LSTM测试集平均相对百分误差(MAPE):3.2605%
LSTM测试集R-square决定系数(R2):0.78619


BOA-LSTM结果:
BOA-LSTM优化得到的最优参数为:
BOA-LSTM优化得到的隐藏单元数目为:30
BOA-LSTM优化得到的最大训练周期为:59
BOA-LSTM优化得到的InitialLearnRate为:0.0060983
BOA-LSTM优化得到的L2Regularization为:0.00035327
BOA-LSTM训练集根均方差(RMSE):0.012984
BOA-LSTM训练集平均绝对误差(MAE):0.009747
BOA-LSTM训练集平均相对百分误差(MAPE):1.6228%
BOA-LSTM训练集R-square决定系数(R2):0.98596
BOA-LSTM测试集根均方差(RMSE):0.015044
BOA-LSTM测试集平均绝对误差(MAE):0.011762
BOA-LSTM测试集平均相对百分误差(MAPE):1.9885%
BOA-LSTM测试集R-square决定系数(R2):0.9183

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、代码获取

后台私信回复“34期”即可获取下载链接。

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

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

相关文章

chatgpt赋能Python-python_numpy倒序

Python Numpy倒序:简介、使用和优势 简介 Python是一门功能强大的编程语言,提供了众多开源库,其中Numpy是其中最流行的之一。Numpy是Python中的一个数值计算库,提供了一个高效的数组对象和相应的数学函数。它是数据科学家和机器…

Thonny-适合初学者小白的开箱即用的轻量级 Python IDE

如果你是一位Python初学者小白,那最适合Thonny它了,如果不是初学者,请选择PyDev和Pycharm。 Thonny是一款面向初学者小白的轻量级 IDE,可以让初学者更好更快的入门上手 Python,而不致于在环境上浪费过多的时间。 取之 Python&…

chatgpt赋能Python-python_purple

Python Purple: 一个高效的Python IDE Python Purple是Python程序员们最需要的工具之一。它是一款高效的Python IDE,允许用户轻松地创建,编辑和协作开发Python代码。本文将涉及Python Purple的一些重要特点以及它如何提高编码质量和提高生产力。 介绍P…

【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力

I. TypeScript 简介 TypeScript 的起源 TypeScript 的起源是由微软公司开发,其首席架构师是 Anders Hejlsberg。Anders 是 Delphi 和 C# 语言的创始人,于2012年从微软发布了 TypeScript。 TypeScript 诞生的原因是为了解决 JavaScript 的一些缺点&…

Nginx(四)

部署LNMP架构动态网站WordPress LNMPLinuxNginxMySQLPhp 环境 192.168.29.141centos8Nginx1.24.0192.168.29.142centos8MySQL8.0.33192.168.29.143centos8Php7.2.24 关闭firewalld systemctl stop firewalld systemctl disable firewalld 关闭selinux setenforce 0 sed -ir…

网络原理(六):http 协议(上)

目录 HTTP 协议是什么 抓包工具 Fiddler 的下载 使用Fiddler HTTP 请求 (Request) HTTP 请求格式 首行 请求头(Header) Cookie HTTP 协议是什么 还是老样子,在讲解http 之前我们先来了解以下什么叫做 http 。 HTTP(Hyp…

使用百度 PaddleOCR对身份证识别的简单处理

一:引言 本文才用百度的PaddleOCR对身份证进行识别的处理,由于直接使用并未进行对跟多数据集进行训练,当前的效果是对非少数民族的身份证识别率可以达到85%以上,同时要求身份证图片是正面且相对清晰。否则效果不理想,本…

基于java的时间管理系统的设计与实现

背景 要设计一个时间管理系统,通过这个系统能够满足时间管理的管理功能。系统的主要功能包括首页,个人中心,系统公告管理,用户管理,时间分类管理,事件数据管理,目标数据管理,用户日…

【系统软件】源码编译安装ZLIB——Could NOT find ZLIB(missing:ZLIB_LIBRARY ZLIB_INCLUDE_DIR

【系统软件】源码编译安装ZLIB——Could NOT find ZLIB(missing:ZLIB_LIBRARY ZLIB_INCLUDE_DIR 前言一、简介二、源码下载三、解压、构建四、编译五、安装六、安装成功后如下图七、如何使用zlib中的include 前言 今天原本打算源码编译安装protobuf,但是在构建项目…

图神经网络GNN GCN AlphaFold2 虚拟药物筛选和新药设计

文章目录 图神经网络1. Geometric Deep LearningRepresentation learning 表征学习机器学习的数据类型:序列、网格、图引出GNN 2. Graph Neural NetworksMachine Learning Lifecyclelearning graph is hardFeature Learning in GraphsWays to Analyze NetworksA Nai…

chatgpt赋能Python-python_plot标题

Python Plot 标题:如何让你的数据可视化更加引人注目 Python是数据科学和可视化领域中最受欢迎的编程语言之一。Python的可视化库让数据可视化变得非常容易、灵活和美观。 在创建一个数据可视化时,最重要的是让图表或图形作品的标题尽可能引人注目。这…

chatgpt赋能Python-python_plt_标题

Python plt:用Python创建出色的可视化图表 Python是一种广泛使用的高级编程语言,它被用于各种不同的领域,包括Web开发、数据科学、人工智能和计算机视觉等。Python拥有一个强大的生态系统,其中包括了大量的第三方库和工具&#x…

chatgpt赋能Python-python_property描述符

Python Property描述符:什么是Property? 介绍 在Python中,属性是一种非常强大的方式,在代码中隐藏数据并将其保护起来。我们可以使用属性来让代码更可读,更易于维护,并降低代码中的错误风险。 Python中&a…

一、服务端渲染技术NUXT

文章目录 一、服务端渲染技术NUXT1.1 什么是服务端渲染1.2 什么是NUXT 2、NUXT环境初始化2.1 下载压缩包2.2解压2.3修改package.json2.4修改nuxt.config.js2.5终端中进入项目目录安装依赖2.6 引入element-ui2.7 测试运行2.8 NUXT目录结构 3、封装axios3.1 安装axios3.2 封装axi…

抖音矩阵系统开发分析(附代码部分)

简介 本文档旨在介绍抖音SEO源码开发相关内容,包括技术架构、关键模块、实现原理等方面的内容。 技术架构 抖音SEO源码采用的是分布式架构。整个系统可以分为以下几个模块: 数据抓取模块:负责从抖音服务器抓取数据,并进行去重和…

一个公司,一个机器视觉工程师

​一个公司,一个机器视觉工程师。 大家觉得这种公司,这种情况可能很难,很尴尬。 其实一个公司,一个机器视觉工程师,公司业务上是有需求的,多数选择有经验的机器视觉工程师,我遇到的视觉人机器视觉粉丝里面还是比较多的。这样子的公司大多数是选择有经验的机器视觉工程师…

【22-23春】AI作业10-经典卷积网络

1.LeNet & MNIST LeNet是一种神经网络的模型,用于图像识别和分类。他包含 3 个卷积层,2 个池化层,1 个全连接层。其中所有卷积层的所有卷积核都为 5x5,步长 strid1,池化方法都为全局 pooling,激活函数…

一元函数的凹性concavity以及二阶导数

凹性(concavity)与函数导数的变化率有关。一个函数f是上凹(即抛物线方向开口向上),其导数f是增函数,也意味着f的导数(即f)是正数;类似的一个函数f是下凹(即抛物线方向开口向下),其导…

chatgpt赋能Python-python_plot_标题

Python Plot: 如何更好地可视化你的数据 如果你需要更好地理解你的数据,Python Plot是一个非常好的工具。在这篇文章里,我将向你介绍如何使用Python Plot来可视化你的数据。我们将讨论如何使用Python Plot创建各种不同类型的图形,以及如何使…

chatgpt赋能Python-python_os_system_隐藏cmd窗口

Python os.system函数 在Python中,os.system函数是一个非常常用的系统调用函数。它的作用是执行一个命令行语句。不过,使用os.system函数有时候会出现一个问题,就是会弹出一个命令行窗口。而在一些特殊场合下,我们可能希望这个命…