【LSTM回归预测】基于matlab布谷鸟算法优化LSTM回归预测【含Matlab源码 2037期】

article/2025/10/5 7:51:04

⛄一、布谷鸟算法优化LSTM预测

1 布谷鸟搜索算法
布谷鸟算法是一种新型的群智能搜索算法,布谷鸟算法具有参数数目少、鲁棒性强、通用性好和全局寻优能力突出等多方面综合优势。布谷鸟算法以寻得全局最优鸟窝为目标,采用如式(3)所示的方法进行鸟窝位置更新:
在这里插入图片描述
从位置更新式(3)可以发现,布谷鸟鸟窝位置更新受到搜索步长α影响,如对搜索步长α进行有效扰动,可以对CS的前后期搜索能力进行强化和调整。本文采用引入步长扰动因子的方式进行步长扰动,步长扰动因子公式如式(4)所示,步长扰动因子可以对步长进行动态扰动,使算法搜索前期的步长较大,从而扩大搜索范围,避免陷入局部最优。后期步长较小,则可增加算法的局部探索能力,更精准的获得最优值。
在这里插入图片描述
式中:m表示步长扰动因子,T为设置的最大迭代次数,t为当前迭代次数。增加步长扰动后的CS的鸟窝路径及位置更新式(3)此时为:
在这里插入图片描述

2 LSTM
LSTM在RNN的框架基础通过增加遗忘、输入和输出3个门限,很好的解决了RNN的长期依赖问题,避免了梯度消失或梯度爆炸。LSTM的结构如图1所示。
在这里插入图片描述
图1 LSTM模块内部结构
LSTM的各门的计算过程如下:
在这里插入图片描述
式(6)~(10)中,W表示各类输入循环权重,b表示偏置项;it为遗忘门,ft为输入门,ot为输出门,ct为记忆单元的向量值,σ表示范围在(0,1)之间的sigmoid函数。

LSTM 的回归拟合能力受到其网络中关键参数(如时间窗宽和隐藏层神经元数目等)影响,靠经验调参存在一定的局限,所以采用智能算法优化LSTM参数受到研究人员的重视。文献[10]和[19]分别LSTM预测模型对股票和变压器油中溶解气体浓度预测进行预测,并分别采用遗传算法(GA)和粒子群算法(PSO)优化模型的关键参数。本文探索采用1.2节所述的ICS来优化LSTM风速预测模型的关键参数。

4 CS优化LSTM过程
采取CS对LSTM的关键参数进行寻优,流程如下:

  1. 种群初始化。设置最大迭代次数T、鸟窝数量和概率参数pa。
  2. 随机化鸟窝位置。以回归均方根误差最小为适应度函数,计算随机鸟窝位置的适应度,得到目前最优鸟窝位置x0b。
  3. 鸟窝位置更新。依据步长扰动后的鸟窝更新公式(5)更新鸟窝的位置,并计算更新后新一代最优鸟窝。随机产生r∈[0,1],并将r与鸟窝主人可发现外来鸟蛋的概率pa比较,如果r<pa,则鸟窝位置不发生变化,反之则鸟窝位置再次随机变化,
  4. 计算新鸟窝的适应度值并更新确定全局最优鸟窝。
  5. 判断算法是否结束。结束则输出最优时间窗宽TS和隐藏层神经元数目Nn神经元数目;否则回到3)继续搜寻。

⛄二、部分源代码

clear
close all
%% 数据读取
geshu=200;%训练集的个数
%读取数据
shuru=xlsread(‘数据的输入.xlsx’);
shuchu=xlsread(‘数据的输出.xlsx’);
nn = randperm(size(shuru,1));%随机排序
% nn=1:size(shuru,1);%正常排序
input_train =shuru(nn(1:geshu)😅;
input_train=input_train’;
output_train=shuchu(nn(1:geshu)😅;
output_train=output_train’;
input_test =shuru(nn((geshu+1):end)😅;
input_test=input_test’;
output_test=shuchu(nn((geshu+1):end)😅;
output_test=output_test’;
%样本输入输出数据归一化
[aa,bb]=mapminmax([input_train input_test]);
[cc,dd]=mapminmax([output_train output_test]);
global inputn outputn shuru_num shuchu_num
[inputn,inputps]=mapminmax(‘apply’,input_train,bb);
[outputn,outputps]=mapminmax(‘apply’,output_train,dd);
shuru_num = size(input_train,1); % 输入维度
shuchu_num = 1; % 输出维度
%% 利用算法选择最佳的BP参数
N = 4; % 巢穴数量(解决方案的规模)
D = 2 ; % 解的维数
T = 30 ; % 迭代次数
% 自变量上下限
ParticleScope(1,:)=[10 200];
ParticleScope(2,:)=[0.01 0.15];
ParticleScope=ParticleScope’;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xv=rand(N,D); %首先,初始化种群个体速度和位置
for d=1:D
xv(:,d)=xv(:,d)*(ParticleScope(2,d)-ParticleScope(1,d))+ParticleScope(1,d);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nest_Pop=xv(:,1:D); % 随机初始解决方案
Pa = 0.25 ; % 建新巢的概率(宿主鸟发现外来鸟蛋后)
for t=1:T
levNestPop = func_levy(Nest_Pop,ParticleScope) ;
% 产生新的解
Nest_Pop = func_bestNestPop(Nest_Pop,levNestPop);
% 在新巢和旧巢中选择一个最好的巢
rand_nestPop = func_newBuildNest(Nest_Pop,Pa,ParticleScope);
% 通过偏好随机游走放弃更糟糕的巢并建立新的巢
Nest_Pop = func_bestNestPop(Nest_Pop,rand_nestPop) ;
% 在新巢和旧巢中选择一个最好的巢
[~,index] = max(func_fitness(Nest_Pop)) ;
% 最好的巢穴
trace(t) = func_objValue(Nest_Pop(index,:)) ;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 参数选择结果赋值
x=Nest_Pop(index,:);
zhongjian1_num = round(x(1));
xue = x(2);
%% 模型建立与训练

options = trainingOptions(‘adam’, … % 梯度下降
‘MaxEpochs’,50, … % 最大迭代次数
‘GradientThreshold’,1, … % 梯度阈值
‘InitialLearnRate’,xue,…
‘Verbose’,0, …
‘Plots’,‘training-progress’); % 学习率
%% 训练LSTM
net = trainNetwork(inputn,outputn,layers,options);
%% 预测
net = resetState(net);% 网络的更新状态可能对分类产生了负面影响。重置网络状态并再次预测序列。
[~,Ytrain]= predictAndUpdateState(net,inputn);
test_simu=mapminmax(‘reverse’,Ytrain,dd);%反归一化
rmse = sqrt(mean((test_simu-output_train).^2)); % 训练集

rmse1 = sqrt(mean((test_simu1-output_test).^2)); % 测试集
%% 画图

%将预测值与测试数据进行比较。
figure
plot(output_train)
hold on
plot(test_simu,‘.-’)
hold off
legend([“真实值” “预测值”])
xlabel(“样本”)
title(“训练集”)

figure
plot(output_test)
hold on
plot(test_simu1,‘.-’)
hold off
legend([“真实值” “预测值”])
xlabel(“样本”)
title(“测试集”)

% 真实数据,行数代表特征数,列数代表样本数output_test = output_test;
T_sim_optimized = test_simu1; % 仿真数据

num=size(output_test,2);%统计样本总数
error=T_sim_optimized-output_test; %计算误差
mae=sum(abs(error))/num; %计算平均绝对误差
me=sum((error))/num; %计算平均绝对误差
mse=sum(error.error)/num; %计算均方误差
rmse=sqrt(mse); %计算均方误差根
% R2=r
r;
tn_sim = T_sim_optimized’;
tn_test =output_test’;
N = size(tn_test,1);
R2=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))2/((N*sum((tn_sim).2)-(sum(tn_sim))2)*(N*sum((tn_test).2)-(sum(tn_test))^2));

disp(’ ‘)
disp(’----------------------------------------------------------')

disp(['平均绝对误差mae为: ',num2str(mae)])
disp(['平均误差me为: ',num2str(me)])
disp(['均方误差根rmse为: ',num2str(rmse)])
disp(['相关系数R2为: ’ ,num2str(R2)])

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 王贺,陈蕻峰,熊敏,刘素梅.融合CEEMDAN和ICS-LSTM的短期风速预测建模[J].电子测量与仪器学报. 2022,36(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除


http://chatgpt.dhexx.cn/article/sEP8tC2G.shtml

相关文章

智能优化算法:布谷鸟搜索算法-附代码

智能优化算法&#xff1a;布谷鸟搜索算法-附代码 文章目录 智能优化算法&#xff1a;布谷鸟搜索算法-附代码1.算法原理2.算法结果3.参考文献4.Matlab代码 摘要&#xff1a;谷鸟搜索算法(cuckoo search ,cs)&#xff0c;是由剑桥大学Yang等提出的一种群智能优化算法&#xff0c;…

python---布谷鸟搜索算法

布谷鸟搜索算法&#xff08;Cuckoo Search&#xff0c;CS&#xff09; 布谷鸟算法的启发当然来自于布谷鸟&#xff0c;因为布谷鸟这种鸟很有意思&#xff0c;生出来的孩子自己不养&#xff0c;直接被扔到其他鸟的鸟巢中去了&#xff0c;但有时候&#xff0c;这些布谷鸟蛋会被被…

通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)

1 从布谷鸟的育雏到布谷鸟算法2 布谷鸟算法3 萊维飞行与公式(1)的深层含义4 附&#xff1a;CS算法求解函数最小值代码5 源码下载6 参考文献 1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝&#xff0c;也不会育雏&#xff0c;在春末夏初&#xff0c;向北飞&#xff0c;趁别的鸟(…

布谷鸟算法(C++实现)

算法思想 布谷鸟鸟群最终只有最健康的蛋才能孵化出来。 布谷鸟群每只鸟都在拼命寻找好巢穴以达到下最健康的蛋的母的。 算法步骤 步骤一 初始化 初始化布谷鸟种群数量&#xff08;鸟窝个数&#xff09;&#xff0c;计算各个鸟窝&#xff08;解&#xff09;的函数适应值&…

Python优化算法07——布谷鸟搜索算法

和前面的系列不同&#xff0c;布谷鸟这里没有现成的Python的包&#xff0c;使用我们需要自己写各种源码模块进行组合&#xff0c;达到布谷鸟搜索算法&#xff08;CS&#xff09;的功能。 这里的CS算法是面向过程的编程&#xff0c;都是自定义函数&#xff0c;不涉及类与对象。…

一个例子入坑布谷鸟算法(附完整py代码)

布谷鸟是比较新的启发式最优化算法,但其与传统的遗传算法,退火算法等相比,被证明收敛速度更快,计算效率更高! 文章目录 本文诞生的缘由布谷鸟算法思想简介更新位置的方式莱维飞行局部随机行走 抛出个栗子一些参数的建议完整的python实现运行结果参考文献 本文诞生的缘由 由于布…

基于布谷鸟搜索算法的函数寻优算法

文章目录 一、理论基础1、算法原理2、算法流程图 二、Matlab代码三、参考文献 一、理论基础 1、算法原理 布谷鸟采用一种特殊的寄生宿主巢穴的方式孕育繁殖,它将孵育的蛋置入寄生宿主的巢穴&#xff0c;让寄生宿主孵化布谷鸟蛋。由于布谷鸟幼雏能发出比寄生宿主幼雏更闪亮的叫…

布谷鸟算法(Cuckoo Search,CS)MATLAB案例详细解析

目录 一、布谷鸟算法理论二、CS算法应用于函数优化1.流程图3.代码解析3.1 主函数 Csmain.m3.2 Levy飞行 func_levy.m3.3 与上一代比较&#xff0c;返回较优的鸟巢 func_bestNestPop.m3.4 根据发现概率&#xff0c;舍弃一个鸟巢并建立一个新鸟巢 func_newBuildNest.m3.5 目标函数…

智能优化算法——布谷鸟搜索算法原理(附代码)

目录 基本概念 算法具体流程 算法流程图 测试函数 优化结果 visual studio2017C代码 基本概念 布谷鸟搜索算法&#xff08;Cuckoo Search&#xff0c;缩写 CS&#xff09;是由剑桥大学杨新社教授和S.戴布于2009年提出的一种新兴启发算法。根据昆虫学家的长期观察研究发现&#…

布谷鸟算法

布谷鸟算法是将布谷鸟育雏行为与Levy飞行算法相结合的一种算法。 在布谷鸟算法中&#xff0c;有两个算法或者说两个位置更新是关键&#xff1a; 第一个是布谷鸟寻找最优解时的算法&#xff1a; 一个是布谷鸟寻找鸟窝下蛋的寻找路径是采用早已就有的萊维飞行3&#xff0c;如上…

布谷鸟算法浅谈与简单应用

简介 布谷鸟算法是由剑桥大学Xin-She Yang教授和S.Deb于2009年提出的一种新兴的启发算法&#xff0c;是一种通过模拟自然界当中布谷鸟&#xff08;也就是杜鹃&#xff0c;故该算法也称为杜鹃算法&#xff09;在繁育后代的行为而提出的一种搜索算法。 本文章将以在工程实践当中…

布谷鸟搜索算法学习

0、引言 布谷鸟搜索算法&#xff08;Cuckoo Search, CS&#xff09;是2009年Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出的一种优化算法。布谷鸟算法是一种集合了布谷鸟巢寄生性和莱维飞行&#xff08;Levy Flights&#xff09;模式的群体智能搜索…

布谷鸟搜索算法

布谷鸟搜索&#xff08;Cuckoo Search&#xff0c;缩写 CS&#xff09;&#xff0c;也叫杜鹃搜索&#xff0c;是由剑桥大学杨新社&#xff08;音译自&#xff1a;Xin-She Yang&#xff09;教授和S.戴布&#xff08;S.Deb&#xff09;于2009年提出的一种新兴启发算法。 1.定义 …

优化算法|布谷鸟算法原理及实现

布谷鸟算法 一、布谷鸟算法背景知识二、布谷鸟算法思想简介三、布谷鸟算法流程四、布谷鸟算法的Python实现五、布谷鸟算法matlab实现 一、布谷鸟算法背景知识 2009年&#xff0c;Xin-She Yang 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出了布谷鸟算法(简称CS)…

CS_2022_01

2022-1-3 08:33:52 用OBS录完之后的视频是mkv格式的&#xff0c;PR不支持mkv格式的视频&#xff0c;于是需要转码&#xff0c;一开始用FFmpeg&#xff0c;有点不方便&#xff0c;但是也能用。后来一看OBS原本自带转码工具。 发现过程&#xff1a; 打开OBS&#xff0c;点击左下角…

CSP-S 2020

[CSP-S2020] 动物园 题目描述 动物园里饲养了很多动物&#xff0c;饲养员小 A 会根据饲养动物的情况&#xff0c;按照《饲养指南》购买不同种类的饲料&#xff0c;并将购买清单发给采购员小 B。 具体而言&#xff0c;动物世界里存在 2 k 2^k 2k 种不同的动物&#xff0c;它…

cs231n(1)

图像分类 目标&#xff1a;已有固定的分类标签集合&#xff0c;然后对于输入的图像&#xff0c;从分类标签集合中找出一个分类标签&#xff0c;最后把分类标签分配给该输入图像。 图像分类流程 输入&#xff1a;输入是包含N个图像的集合&#xff0c;每个图像的标签是K种分类标…

CS61A 02

Control Expressions evaluate to values Statements perform actions print(print(1), print(2))1 2 None None Boolean Expressions T and F False values: False, None, 0, ‘’ True values: everything else Operators and, or, not True and 5 2 and 88 False …

CS224N 2019 Assignment 2

Written: Understanding word2vec Let’s have a quick refresher on the word2vec algorithm. The key insight behind word2vec is that ‘a word is known by the company it keeps’. Concretely, suppose we have a ‘center’ word c c c and a contextual window surr…

【CS231N】

损失函数和后向传播 铰链损失函数&#xff1a;SVM常用&#xff0c;打击和正确结果相似度高的错误答案 正则化&#xff1a;获得更简单的模型&#xff0c;获得更平均的模型&#xff0c;避免过拟合&#xff08;绿色线&#xff09; Softmax&#xff1a;先指数计算&#xff08;去除负…