【matlab】LSTM/GRU网络回归/分类预测改进与优化合集(持续更新)_lstm调参matlab-程序员宅基地

技术标签: LSTM神经网络改进及优化  matlab  lstm  分类算法  gru  回归  

目录

一、进化算法-LSTM

概述:
1.原理:通过进化算法寻找LSTM网络最优超参数。
2.本文测试数据为12输入单输出,解决回归问题。
3.评价指标:测试集实际值与预测值对比,目标函数为rmse,另外附MAE、MAPE、R2计算值
4.优化LSTM三个参数,即隐含层神经元数,学习率,训练次数
5.本代码进化算法为测试参数,为了提高运算速度,迭代次数为3,种群数量为5,可自行修改

1.金枪鱼算法TSO-LSTM

%TSO_LSTM
clear all;
close all;
clc;
Particles_no = 10; % 种群数量 50
Function_name=‘LSTM_MIN’;
Max_iter = 3; % 迭代次数 10
Low = [10 0.001 10 ];%三个参数的下限
Up = [200 0.02 200 ];%三个参数的上限
Dim = 3;%待优化参数数量
fobj = @(x)LSTM_MIN(x);
train_x=input(:,1:n);
train_y=output(:,1:n);
test_x=input(:,n+1:end);
test_y=output(:,n+1:end);
method=@mapminmax;
% method=@mapstd;
[train_x,train_ps]=method(train_x);
test_x=method(‘apply’,test_x,train_ps);
[train_y,output_ps]=method(train_y);
test_y=method(‘apply’,test_y,output_ps);
XTrain = double(train_x) ;
XTest = double(test_x) ;
YTrain = double(train_y);
YTest = double(test_y);
numFeatures = size(XTrain,1); %输入特征维数
numResponses = size(YTrain,1);%输出特征维数
layers = [ …
sequenceInputLayer(numFeatures)%输入层,参数是输入特征维数
lstmLayer(Tuna1(1,1))%lstm层,如果想要构建多层lstm,改几个参数就行了
fullyConnectedLayer(numResponses)%全连接层,也就是输出的维数
regressionLayer];%该参数说明是在进行回归问题,而不是分类问题
options = trainingOptions(‘adam’, …%求解器设置为’adam’
‘MaxEpochs’,Tuna1(1,3), …%这个参数是最大迭代次数,即进行200次训练,每次训练后更新神经网络参数
‘MiniBatchSize’,16, …%用于每次训练迭代的最小批次的大小。
‘InitialLearnRate’,Tuna1(1,2), …%学习率
‘GradientThreshold’,1, …%设置梯度阀值为1 ,防止梯度爆炸
‘Verbose’,false, …%如果将其设置为true,则有关训练进度的信息将被打印到命令窗口中。
‘Plots’,‘training-progress’);%构建曲线图
%对每个时间步进行预测,对于每次预测,使用前一时间步的观测值预测下一个时间步。
net = trainNetwork(XTrain,YTrain,layers,options);
numTimeStepsTest = size(XTest,2);
for i = 1:numTimeStepsTest
[net,YPred(:,i)] = predictAndUpdateState(net,XTest(:,i),‘ExecutionEnvironment’,‘cpu’);
end
% 结果
% 反归一化
predict_value=method(‘reverse’,YPred,output_ps);
predict_value=double(predict_value);
true_value=method(‘reverse’,YTest,output_ps);
true_value=double(true_value);
for i=1
figure
plot(true_value(i,:),‘-‘,‘linewidth’,2)
hold on
plot(predict_value(i,:),’-s’,‘linewidth’,2)
legend(‘实际值’,‘预测值’)
grid on
title(‘TSO-LSTM预测结果’)
ylim([-500 500])
rmse=sqrt(mean((true_value(i,:)-predict_value(i,:)).^2));
disp([‘-----------’,num2str(i),‘------------’])
disp([‘均方根误差(RMSE):’,num2str(rmse)])
mae=mean(abs(true_value(i,:)-predict_value(i,:)));
disp([‘平均绝对误差(MAE):’,num2str(mae)])
mape=mean(abs((true_value(i,:)-predict_value(i,:))./true_value(i,:)));
disp([‘平均相对百分误差(MAPE):’,num2str(mape
100),’%'])
r2=R2(true_value(i,:),predict_value(i,:));
disp([‘R-square决定系数(R2):’,num2str(r2)])
end
在这里插入图片描述
在这里插入图片描述
实际效果以自己的数据为准,本文测试结果并不代表算法最终效果。不同数据,数据处理方式,待优化参数等均不同。

2.孔雀优化算法(POA)-LSTM

与上文同数据、同进化算法设置参数。效果仅供参考
在这里插入图片描述

3.猎人优化算法(HPO)-LSTM

1.2021年Iraj Naruei等人提出的猎人优化算法,Hunter–prey optimization, 与LSTM网络结合,优化LSTM超参数。
2.该算法的灵感来自狮子、豹子和狼等捕食性动物以及雄鹿和瞪羚等猎物的行为。动物狩猎行为的场景有很多,其中一些已经转化为优化算法。本文使用的场景与之前算法的场景不同。在提议的方法中,猎物和捕食者种群以及捕食者攻击远离猎物种群的猎物。猎人向着这个远处的猎物调整自己的位置,而猎物则向着安全的地方调整自己的位置。作为适应度函数最佳值的搜索代理的位置被认为是安全的位置。在几个测试函数上实现的 HPO 算法以评估其性能。此外,对于性能验证,所提出的算法被应用于几个工程问题。结果表明,所提出的算法在解决测试功能和工程问题方面表现良好。
3.本文为测试数据,12输入,单输出,回归问题。与上文同数据、同进化算法设置参数。效果仅供参考

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

4.人工大猩猩部队优化算法(GTO)-LSTM

本文为测试数据,12输入,单输出,回归问题。与上文同数据、同进化算法设置参数。效果仅供参考
在这里插入图片描述
在这里插入图片描述

二、进化算法(改进)-LSTM

1.混沌映射Tent

2.收敛因子

3.多算法组合

4.基于levy飞行

本文将Levy飞行应用于鲸鱼的位置更新中,在算法进行更新后再进行一次Levy飞行更新个体位置,可以实现跳出局部最优解,扩大搜索能力的效果。位置更新的方式为:
X(t+1)=X(t)+α⊕Levy(λ)
其中,α \alphaα为步长缩放因子,本文取值为1;
Levy飞行的具体机制:
“莱维Levy飞行”以法国数学家保罗·莱维命名,指的是步长的概率分布为重尾分布的随机行走,也就是说在随机行走的过程中有相对较高的概率出现大跨步。莱维飞行的名称来源于本华·曼德博(Benoît Mandelbrot,莱维的学生)。他用“柯西飞行”来指代步长分布是柯西分布的随机行走,用“瑞利飞行”指代步长分布是正态分布(尽管正态分布没有重尾)的随机行走(瑞利分布是二维独立同方差正态变量模长的分布)。后来学者还进一步将莱维飞行的概念从连续空间推广到分立格点上的随机运动。

三、LSTM-CNN(提取特征)

1.LSTM-CNN

2.QR(分位数回归)-LSTM-CNN

3.Attention-QR-LSTM-CNN

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29736627/article/details/121863379

智能推荐

History隐藏历史记录_centos history不记录-程序员宅基地

文章浏览阅读1.7k次。今天翻看之前做的蚂蚁笔记,看到了几篇去年写的笔记,摘录过来,以前使用的博客太多,很多笔记散落到网上的各大博客,我将陆续把那些也整理过来汇总一下.三十而立,我早已经过了而立的年龄,正在奔向四十不惑的路上,把曾经付出过心血的东西都陆续汇总到这里,留个痕迹,让世界知道我曾经来过.时隔多年再看自己曾经稚嫩的文字,还真是有一种故地重游的感觉.言归正传,有时候为了服务器安全,防止别人窥探我们输入的命令,我们可_centos history不记录

高斯消元法的c语言编程,列主元高斯消元法的C语言编程-程序员宅基地

文章浏览阅读899次。列主元高斯消元法的C语言编程列主元高斯消元法基本思想:用高斯消元法求解线性方程组时,为避免小的主元,在进行第k步消元前,应该在第k列(k)元素aik(i k,(k)(k)例如|aikk| max|aik|,再把第ik个方程与第k,n)中找出第一个出现的绝对值最大者,k≤i≤n个方程进行交换,使ai(kk)成为主元。我们称这个过程为选主元。由于只在第k列元素中选主元,通常也称k为按列选主元。列主元高..._c语言下面程序按公式σk+k2+k int k,for(k=1;k<=100;k++) s+=k

安装XAMPP端口冲突问题_xampp 查看端口-程序员宅基地

文章浏览阅读782次。从官网下载安装成功后打开显示如下界面此时点击Apache--start出现闪退报错可以点击logs选择error.log打开报错日志查看详细报错我这次出现的问题是端口冲突,Apache默认端口是80和443,有两种方法查看被占用的端口。第一种,打开XAMPP面板中的Netstat,可以看到端口80被占用了,443没有被占用第二种方法,可以打开cmd,输入以下命令查询端口80和443是否被占用netstat -ano ..._xampp 查看端口

史上最强最完全版vim配置文件_gvim完美配置版-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏10次。转载自:小马哥的博客园很早以前就开始使用这个vim配置文件了,很好用,但是经过众多人的传播,各种翻版也就出现了,都声称是最强,打广告成分大于实用成分,所以我还是赶紧保留一份最原始的吧。大家搜最强的vim配置博客园就行了。1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括..._gvim完美配置版

Linux查看服务器硬件网卡cpu型号内存BIOS、主板型号信息_linux查看主板型号-程序员宅基地

文章浏览阅读1.4w次,点赞6次,收藏43次。Linux查看服务器硬件网卡cpu型号内存BIOS、主板型号信息,查看服务器硬件信息CPU,内存等_linux查看主板型号

easyUI的datebox赋值以及取值,赋值不生效问题_easyui datebox取值-程序员宅基地

文章浏览阅读2.7k次。easyUI的datebox设定值以及取值1、时间戳格式化2、把格式化后的时间放入datebox中1、时间戳格式化时间格式处理按照下面时间框图片中显示的格式进行处理function parsedate(value) { var date = new Date(value).format("yyyy-MM-dd"); return date;..._easyui datebox取值

随便推点

风云四号圆盘数据转等经纬工具_风云卫星数据读取nc文件-程序员宅基地

文章浏览阅读1.8k次。FY4A 圆盘转等经纬工具_风云卫星数据读取nc文件

pip使用教程-程序员宅基地

文章浏览阅读359次,点赞5次,收藏8次。时,您已经正确配置了 Python 环境,并有权访问必要的网络资源。根据需要结合上述命令与选项,您应该能够有效地管理 Python 项目的依赖关系。如有特定需求或遇到问题,查阅。是 Python 的包管理工具,用于安装、升级、卸载和管理 Python 包及其依赖。的官方文档或寻求社区支持可以获得更详细的帮助。这将把当前环境中所有已安装包及其版本写入。文件中列出的所有包及其版本。这将在指定环境中安装。

Apktool回编时Invalid register. Must be between v0 and v15, inclusive..的解决办法-程序员宅基地

文章浏览阅读9k次,点赞3次,收藏4次。一般我们在自定义修改apk时,难免会对smali代码进行增减删改,再回编的时候可能会遇到如下错误:Invalid register: vx. Must be between v0 and v15, inclusive.其中vx>15,导致回编译错误。错误原因可能有以下几种情况:1.引用了不存在的方法参数。参数个数很容易识别,但是一定要注意传入的方法参数是从p0,还是从p1开始的。根

UE4-4.26视口界面导航以及部分视口播放的方式_ue4显示导航在是视口中显示在哪-程序员宅基地

文章浏览阅读1k次。视口内的一些鼠标移动方式运行中的一些选项说明,移动设备就是模拟手机,新建窗口就是在虚幻引擎下新建,虚拟就是VR,独立窗口就是跳出UE4引擎像平时开启游戏一样进行独立的窗口播放,模拟就是先不获得控制权获得上帝视角来查看关卡,高级设置如下↓能更改视口播放的分辨率等等..._ue4显示导航在是视口中显示在哪

java中getinputstream_Java Connection.getInputStream方法代码示例-程序员宅基地

文章浏览阅读1.1k次。import sun.rmi.transport.Connection; //导入方法依赖的package包/类/*** handleMessages decodes transport operations and handles messages* appropriately. If an exception occurs during message handling,* the sock..._conn.getinputstream()

深入理解Android中的Drawable类_自定义的png图片为什么要放到drawable中android-程序员宅基地

文章浏览阅读1.5k次。Drawable对于Android开发工程师来说非常熟悉,最常用的用法是在drawable目录里放入png或其他格式的图片,然后在代码里就可以用resources访问到如:// 访问test图片资源getResources().getDrawable(R.drwable.test);这里不是要讲Drawable资源怎么使用,而是来看一下这个类实现的一些原理以及它相关的一些子类的实现原理。..._自定义的png图片为什么要放到drawable中android

推荐文章

热门文章

相关标签