时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测

news2024/7/6 20:04:41

时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测

目录

    • 时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测
      • 预测效果
      • 基本介绍
      • 程序设计
      • 参考资料

预测效果

1
2
3

基本介绍

MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测
基于鲸鱼算法优化长短期记忆网络(WOA-LSTM)的时间序列预测。
优化参数为学习率,隐藏层节点个数,正则化参数,要求2018b及以上版本,matlab代码。
评价指标包括:MAE、MSE、RMSE等,代码质量极高,方便学习和替换数据。

程序设计

  • 完整程序和数据下载方式1(资源处直接下载):MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测
  • 完整程序和数据下载方式2(订阅《LSTM长短期记忆神经网络》专栏,同时可阅读《LSTM长短期记忆神经网络》专栏收录的所有内容,数据订阅后私信我获取):MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测
  • 完整程序和数据下载方式3(订阅《智能学习》专栏,同时获取《智能学习》专栏收录程序6份,数据订阅后私信我获取):MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测
% 预设鲸鱼优化算法的参数 
popsize = 5; %种群数量
maxgen = 20;  % WOA最大的迭代次数
dim = 3; % 优化的自变量个数 ,依次为LSTM的第一和第二隐含层节点数,最大训练代数,初始学习率

   %输入输出数据
    L = size(output, 1); %样本总数
    %     testNumber = round(L*0.2); %设置四个样本测试
    testNumber =20; %设置四个样本测试
    trainNumber = L - testNumber; %训练样本数量
 
    % 划分训练集和测试集
    p_train = input(1:trainNumber, :)';
    t_train = output(1:trainNumber, :)';
    % 测试集 
    p_test = input(trainNumber+1:trainNumber+testNumber,:)';
    t_test = output(trainNumber+1:trainNumber+testNumber,:)';
        %% 归一化和元胞数组处理
    [pn_train ,ps]= mapminmax(p_train);
    [tn_train, ts] = mapminmax(t_train);
    %测试集的归一化
    pn_test = mapminmax('apply', p_test, ps);
    tn_test = mapminmax('apply', t_test, ts);

     for i = 1:length(t_train)
        P_train{i,1} =  pn_train(:,i);
    end
    for i = 1:length(t_test)
        P_test{i,1} =  pn_test(:,i);
    end

    %% 归一化和元胞数组处理p 4; % 优化的自变量个数 ,依次为LSTM的第一和第二隐含层节点数,最大训练代数,初始学习率
    lb = [1, 1, 0.001]; % 下限
    ub = [10,20, 0.01]; % 上限

    % initialize position vector and score for the leader,初始化位置向量和领导者得分
    Leader_pos=zeros(1,dim);
    Leader_score=inf; %change this to -inf for maximization problems,将此更改为-inf以获得最大化问题,Inf无穷大


    %Initialize the positions of search agents
    Positions=initialization(popsize,dim,ub,lb);%Positions,存放数个个体的多维位置。

    Convergence_curve=zeros(1,maxgen);%Convergence_curve收敛曲线

    t=1;% Loop counter

    % Main loop
    while t<maxgen+1   % 首先  迭代次数的while循环   为2  也就是鲸鱼群体会进化2disp(['current iteration is: ', num2str(t)])
        

        for i=1:size(Positions,1)%对每个个体一个一个检查是否越界  % 种群规模是2  所以嵌套了2次训练

            % Return back the search agents that go beyond the boundaries of
            % the search space,返回超出搜索空间边界的搜索代理
            Flag4ub=Positions(i,:)>ub;
            Flag4lb=Positions(i,:)<lb;
            Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;%超过最大值的设置成最大值,超过最小值的设置成最小值


            % 评估个体适应度,会调用func.m子函数,把个体位置坐标赋给LSTM参数中,执行的训练
            % Calculate objective function for each search agent,目标函数值的计算
            [fitness,net]=func(Positions(i,:),p_train,P_train,P_test, tn_train,ts,t_train,t_test);
            if fitness<Leader_score % Change this to > for maximization problem
                Leader_score=fitness; % Update alpha
                Leader_pos=Positions(i,:);
                net1 = net;
            end

        end
        a=2-t*((2)/maxgen); % a decreases linearly fron 2 to 0 in Eq. (2.3)
        % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12),有疑问?
        a2=-1+t*((-1)/maxgen);

        % Update the Position of search agents,参数更新
        for i=1:size(Positions,1)
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]

            A=2*a*r1-a;  % Eq. (2.3) in the paper 
            C=2*r2;      % Eq. (2.4) in the paper

            b=1;               %  parameters in Eq. (2.5)
            l=(a2-1)*rand+1;   %  parameters in Eq. (2.5)

            p = rand();        % p in Eq. (2.6)
            for j=1:size(Positions,2)%对每一个个体地多维度进行循环运算

                if p<0.5%收缩包围机制
                    if abs(A)>=1
                        rand_leader_index = floor(popsize*rand()+1);%floor将 X 的每个元素四舍五入到小于或等于该元素的最接近整数
                        X_rand = Positions(rand_leader_index, :);
                        D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)
                        Positions(i,j)=X_rand(j)-A*D_X_rand;      % Eq. (2.8)

                    elseif abs(A)<1
                        D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)
                        Positions(i,j)=Leader_pos(j)-A*D_Leader;      % Eq. (2.2)
                    end

                elseif p>=0.5%螺旋更新位置

                    distance2Leader=abs(Leader_pos(j)-Positions(i,j));
                    % Eq. (2.5)
                    Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);

                end

            end
        end

        Convergence_curve(t)=Leader_score;
        t=t+1;
        disp(t)
    end

    figure;
    plot(Convergence_curve,'b-','LineWidth',1.0)
    grid on
    xlabel('进化代数')
    ylabel('最佳适应度')
    title('WOA优化过程曲线')

    disp('WOA优化LSTM的结果:')
    disp(strcat('最优参数: ', num2str([round(Leader_pos(1:2)),Leader_pos(3)])))
    disp(strcat('最佳适应度: ', num2str(Leader_score)))

    %% 将WOA优化后的参数赋给LSTM神经网络 while循环结束之后  优化完的最佳参数付给LSTM 再次训练
    % 参数设置
    numFeatures = size(p_train, 1);   %输入层节点
    numHiddenUnits1 = round(Leader_pos(1));  % 第一隐含层节点
    numResponses = 1; %全连接层节点(等于标签的数量)

参考资料

[1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502
[3] https://blog.csdn.net/article/details/126043107?spm=1001.2014.3001.5502

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

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

相关文章

图论-匈牙利算法学习

本文讲述的是匈牙利算法&#xff0c;即图论中寻找最大匹配的算法。解决的问题是从二分图中找到尽量多的匹配。 原题-华为-HJ28 素数伴侣 描述 题目描述 若两个正整数的和为素数&#xff0c;则这两个正整数称之为“素数伴侣”&#xff0c;如2和5、6和13&#xff0c;它们能应用…

【Vue】学习笔记-初始化脚手架

初始化脚手架 初始化脚手架说明具体步骤脚手架文件结构 初始化脚手架 说明 Vue脚手架是vue官方提供的标准化开发工具&#xff08;开发平台&#xff09;最新版本是4.x文档Vue CLI 具体步骤 如果下载缓慢请配置npm淘宝镜像 npm config set registry http://registry.npm.taoba…

有关态势感知(SA)的卷积思考

卷积是一种数学运算&#xff0c;其本质是将两个函数进行操作&#xff0c;其中一个函数是被称为卷积核或滤波器的小型矩阵&#xff0c;它在另一个函数上滑动并产生新的输出。在计算机视觉中&#xff0c;卷积通常用于图像处理和特征提取&#xff0c;它可以通过滤波器对输入图像进…

《Spring MVC》 第六章 MVC类型转换器、格式化器

前言 介绍MVC类型转换器、格式化器 1、使用场景 <form th:action"{/user/register}" method"post">用户名&#xff1a;<input type"text" name"userName"/><br/>密码&#xff1a;<input type"password&q…

对于Ubuntu服务器杀毒的一次记录

概述&#xff1a;叮咚&#xff01;您的主机有异常登录地&#xff0c;登录ip来自人类文明的标杆美丽国的加利福尼亚州&#xff0c;请注意排查。可恶的老美啊&#xff0c;又来入侵我华夏主机了&#xff0c;美帝亡我之心不死啊&#xff08;当然也有可能是境内中国人通过VPN操作境外…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&…

让chatgpt给我做个项目预算,感觉这样的项目预算才有的赚

访问入口来自于以下网站&#xff1a; 无极低码-三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生https://wheart.cn/ …

分享几个国内免费的ChatGPT镜像网址(亲测有效-4月25日更新)

最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力&#xff0c;那么今天就分享几个ChatGPT国内的镜像网址&#xff0c;大家可以直接使用&#xff01;记得点赞收藏一下呦&#xff01; 1、AQ Bot&#xff0c;网址&#xff1a;点我 https://su.askaiw.com/aq 缺点&…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、BtreeB+Tree、赫夫曼树、堆树)

数论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…

服务(第十一篇)LVS-NAT模式

什么是群集&#xff1f; 多台主机组成的一个整体&#xff0c;提供一个ip访问通道&#xff0c;所有的主机干一件事 提供同样的服务。 群集有哪些类型&#xff1f; ①负载均衡群集&#xff08;LB&#xff09;&#xff1a; 提高系统的响应能力&#xff0c;处理更多的访问请求&a…

VideoPose3D:基于视频的3D人体关键点检测

1. 概述 Dario Pavllo等人于2019年提出了VideoPose3D模型&#xff0c;旨在把输入视频转换成人体各关键点相对于根关节的相对三维位置。为了实现这一目的&#xff0c;作者采取的是两步走的策略。首先要利用现成的2D姿态检测算法提取出视频各帧里人体各关键点的2D坐标&#xff0…

Bilibili 网页版下载视频 B站下载MP4格式视频(不用下载工具)

博主是为了给家里老人下载戏曲&#xff0c;一开始是单个单个解析然后下载&#xff0c;想多下载一些&#xff0c;然后用了批量方法下载很好用 通过网页版解析工具 解析单个视频 获得下载地址 复制视播放地址&#xff0c;如&#xff0c;复制播放视频时&#xff0c;上方的地址 然…

校园最热微信小程序——校园表白墙之我想对你说(青春感人系列)

校园最热微信小程序——校园表白墙之我想对你说&#xff08;青春感人系列&#xff09; 注&#xff1a;想要快速了解可以直接跳转到小程序视频展示&#xff08;手机用户可能打不开视频&#xff0c;电脑用户是可以打开视频的&#xff09;&#xff0c;手机用户可以打开我的主页里面…

系统运维(Kubernetes篇)

Kubernetes(k8s) 前言 ​ 在学习过程中&#xff0c;我们经常会遇到遗忘的问题。为了避免忘记&#xff0c;多复习是非常必要的。复习可以帮助我们巩固知识&#xff0c;加深记忆&#xff0c;提高学习效率。因此&#xff0c;我们应该养成良好的复习习惯&#xff0c;定期回顾所学…

猿创征文|“云“创新展望:数据之浩瀚

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; AWS–全球云计算领导者 AWS亚马逊云科技提供全球覆盖广泛、服务深入的云平台&#xff0c;全球数据中心提供超过 200 项功能齐全的服务 连续 11 年被 Gartner 评为&quo…

【JUC高并发编程】—— 了解JUC

一、集合的线程安全 ArrayList 线程不安全 通过代码演示 ArrayList 集合的线程不安全问题 package com.atguigu.lock;import java.util.ArrayList; import java.util.List; import java.util.UUID;/*** author Bonbons* version 1.0* 演示List集合线程不安全问题*/ public cl…

队列的定义、基本操作、案例

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 队列队列的基本操作定义队列enqueue&#xff1a;向队列添加元素dequeue&am…

dockerfile镜像实战

dockerfile镜像实战 部署SSH镜像部署Systemctl镜像部署Nginx镜像部署tomcat 镜像部署mysql镜像在客户端连接mysql容器 部署SSH镜像 [rootdocker01 ~]# mkdir /opt/sshd [rootdocker01 ~]# cd /opt/sshd [rootdocker01 sshd]# vim Dockerfile#第一行必须指明基于的基础镜像 FRO…

【C语言】指针进阶[上] (字符、数组指针、指针数组、数组传参和指针传参)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 字符指针 面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名 VS 数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二…