首页 > 编程语言 >分类预测|基于HHO-CNN-BiLSTM-Attention的数据分类预测Matlab程序 多特征输入多类别输出

分类预测|基于HHO-CNN-BiLSTM-Attention的数据分类预测Matlab程序 多特征输入多类别输出

时间:2024-07-10 22:58:14浏览次数:12  
标签:Attention num Name BiLSTM 分类 train CNN HHO

分类预测|基于HHO-CNN-BiLSTM-Attention的数据分类预测Matlab程序 多特征输入多类别输出

文章目录


前言:HHO-CNN-BiLSTM-Attention流程

HHO-CNN-BiLSTM-Attention是一个结合了多种神经网络结构和注意力机制的模型,下面简述其流程和各部分的作用:

  1. 数据预处理

    • 首先,对输入数据进行预处理,包括标准化、归一化等操作,确保数据处于适合网络处理的状态。
  2. 卷积神经网络(CNN)

    • CNN用于提取输入数据中的空间特征,比如图像数据中的边缘、纹理等特征。通常,CNN的前几层会捕捉低级别的特征,而后续层则捕捉更高级别的抽象特征。
  3. 双向长短期记忆网络(BiLSTM)

    • BiLSTM用于处理数据中的时间序列特征或文本序列特征。它能够捕捉序列数据中的长期依赖关系,并且由于是双向的,可以同时考虑过去和未来的信息。
  4. 注意力机制(Attention)

    • 注意力机制用于增强模型对输入的关注能力,使得模型能够在处理长序列或大数据集时更加精确和高效。在这个结构中,注意力机制可以帮助模型集中注意力在最相关的部分,提高模型的准确性和效率。
  5. HHO优化算法应用

    • HHO优化算法被应用于整个模型的训练过程中,用于优化模型中的参数或超参数。HHO算法通过模拟哈里斯鹰的捕食行为来更新模型中的权重和偏差,以最小化损失函数或其他评价指标。
  6. 训练和优化

    • 模型在训练过程中通过反向传播算法更新参数,同时HHO算法可以用来优化学习率、层次结构等超参数,以提高模型的收敛速度和效果。
  7. 模型输出

    • 经过训练和优化后,模型可以用来进行预测、分类或其他任务,输出结果可以是预测标签、概率分布等。

总结来说,HHO-CNN-BiLSTM-Attention模型结合了多种神经网络结构和优化方法,利用CNN提取空间特征、BiLSTM处理序列特征,并通过注意力机制增强模型性能,最终通过HHO算法优化整体模型,使其在给定任务中达到更好的性能和效果。

一、哈里斯鹰优化HHO

哈里斯鹰优化算法(Harris’ Hawks Optimization,简称HHO)是一种基于自然界中哈里斯鹰捕食行为启发的优化算法,由Xin-She Yang于2019年提出。以下是关于HHO的详细介绍:

  • 发表时间和期刊
    HHO算法最早由Xin-She Yang在2019年发表在期刊《Advances in Engineering Software》上。这篇文章的标题是《Harris hawks optimization: Algorithm and applications》。

  • 基本原理
    HHO算法基于哈里斯鹰在捕食过程中的行为策略,通过模拟这些策略来进行优化问题的求解。其基本原理可以概括如下:

    1. 探索与开发:算法中的个体被分为两种角色,即探索者和开发者。探索者类似于哈里斯鹰群体中的一部分成员,负责在解空间中探索潜在解。开发者则代表那些已经找到较好解的个体,它们会被用来引导其他个体朝着更优解的方向移动。

    2. 哈里斯鹰的行为策略:HHO算法中模仿了哈里斯鹰的三种主要捕食行为:

      • 突袭(Surrounding Effect):较强的个体(代表优秀的解)会引导其他个体向其周围聚集,增加全局最优解的可能性。
      • 展翅(Flocking Effect):群体中个体相互之间的交流和合作,使得整体搜索更加高效。
      • 寻找(Explore and Exploit):算法在探索和利用潜在解之间保持平衡,以避免早熟收敛或过度探索。
    3. 优化过程:HHO通过迭代更新个体的位置(解)来优化问题,具体的步骤包括位置更新、评估适应度和选择个体的角色(探索者或开发者)等。

HHO算法在模拟捕食行为方面与其他启发式优化算法有所不同,其灵感来源于自然界中的鸟类行为,通过这些策略提高了全局优化问题的解决效率和准确性。

二、数据展示

在这里插入图片描述
结果展示
在这里插入图片描述

三、核心代码

读取数据

%% 导入数据
res = xlsread('数据集.xlsx');
rng(42,'twister');                           %随机种子

%% 数据分析
num_size = 0.7;                              % 训练集占数据集比例
outdim = 1;                                  % 最后一列为输出
num_class = length(unique(res(:,end)));      % 计算类别数 
num_samples = size(res, 1);                  % 样本个数
res = res(randperm(num_samples), :);         % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度

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

%%  数据归一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax('apply', P_test, ps_input);

t_train = categorical(T_train)';
t_test  = categorical(T_test )';

%%  数据平铺
P_train =  double(reshape(P_train, f_, 1, 1, M));
P_test  =  double(reshape(P_test , f_, 1, 1, N));

CNN-BiLSTM核心代码

%% 建立模型
lgraph = layerGraph();                                                   % 建立空白网络结构
tempLayers = [
    sequenceInputLayer([f_, 1, 1], "Name", "sequence")                   % 建立输入层,输入数据结构为[num_dim, 1, 1]
    sequenceFoldingLayer("Name", "seqfold")];                            % 建立序列折叠层
lgraph = addLayers(lgraph, tempLayers);                                  % 将上述网络结构加入空白结构中

tempLayers = [
    convolution2dLayer([3, 1], 16, "Name", "conv_1", "Padding", "same")  % 建立卷积层,卷积核大小[3, 1],16个特征图
    reluLayer("Name", "relu_1")                                          % Relu 激活层
    convolution2dLayer([3, 1], 32, "Name", "conv_2", "Padding", "same")  % 建立卷积层,卷积核大小[3, 1],16个特征图
    reluLayer("Name", "relu_2") ];                                       

tempLayers = [
    sequenceUnfoldingLayer("Name", "sequnfold")                          % 建立序列反折叠层
    flattenLayer("Name", "flatten")                                      % 网络铺平层
    bilstmLayer(best_hd, "Name", "bilstm", "OutputMode","last")          % BiLSTM层
    selfAttentionLayer(1,32,"Name","selfattention")                      % 注意力层
    fullyConnectedLayer(num_class, "Name", "fc")                         % 全连接层
    softmaxLayer( "Name", "softmax")                                     % 损失函数层
    classificationLayer( "Name", "classificationLayer")];                % 分类层

HHO核心代码

%%
% 机器不会学习 
% 面包多主页:https://mbd.pub/o/curry/work
%%
function [Rabbit_Energy,Rabbit_Location,CNVG]=HHO(N,T,lb,ub,dim,fobj)


tic
% initialize the location and Energy of the rabbit
Rabbit_Location=zeros(1,dim);
Rabbit_Energy=inf;

%Initialize the locations of Harris' hawks
X=initialization(N,dim,ub,lb);

CNVG=zeros(1,T);

t=0; % Loop counter

while t<T
    for i=1:size(X,1)
        % Check boundries
        FU=X(i,:)>ub;FL=X(i,:)<lb;X(i,:)=(X(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;
        % fitness of locations
  
        fitness=fobj(X(i,:));
        % Update the location of Rabbit
        if fitness<Rabbit_Energy
            Rabbit_Energy=fitness;
            Rabbit_Location=X(i,:);
        end
    end
    
    E1=2*(1-(t/T)); % factor to show the decreaing energy of rabbit
    % Update the location of Harris' hawks
    for i=1:size(X,1)
        E0=2*rand()-1; %-1<E0<1
        Escaping_Energy=E1*(E0);  % escaping energy of rabbit
        
        if abs(Escaping_Energy)>=1
            %% Exploration:
            % Harris' hawks perch randomly based on 2 strategy:
            
            q=rand();
            rand_Hawk_index = floor(N*rand()+1);
            X_rand = X(rand_Hawk_index, :);
            if q<0.5
                % perch based on other family members
                X(i,:)=X_rand-rand()*abs(X_rand-2*rand()*X(i,:));
            elseif q>=0.5
                % perch on a random tall tree (random site inside group's home range)
                X(i,:)=(Rabbit_Location(1,:)-mean(X))-rand()*((ub-lb)*rand+lb);
            end
            
        elseif abs(Escaping_Energy)<1
            %% Exploitation:
            % Attacking the rabbit using 4 strategies regarding the behavior of the rabbit
            
            %% phase 1: surprise pounce (seven kills)
            % surprise pounce (seven kills): multiple, short rapid dives by different hawks
            
            r=rand(); % probablity of each event
             
            if r>=0.5 && abs(Escaping_Energy)<0.5 % Hard besiege
                X(i,:)=(Rabbit_Location)-Escaping_Energy*abs(Rabbit_Location-X(i,:));
            end
            
            if r>=0.5 && abs(Escaping_Energy)>=0.5  % Soft besiege
                Jump_strength=2*(1-rand()); % random jump strength of the rabbit
                X(i,:)=(Rabbit_Location-X(i,:))-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));
            end
            
            %% phase 2: performing team rapid dives (leapfrog movements)
            if r<0.5 && abs(Escaping_Energy)>=0.5 % Soft besiege % rabbit try to escape by many zigzag deceptive motions
                
                Jump_strength=2*(1-rand());
                X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));
                FU=X1>ub;FL=X1<lb;X1=(X1.*(~(FU+FL)))+ub.*FU+lb.*FL;
                % X1=abs(X1);
                
                if fobj(X1)<fobj(X(i,:)) % improved move?
                    X(i,:)=X1;
                else % hawks perform levy-based short rapid dives around the rabbit
                    X2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:))+rand(1,dim).*Levy(dim);
                    FU=X2>ub;FL=X2<lb;X2=(X2.*(~(FU+FL)))+ub.*FU+lb.*FL;
                    % X2=abs(X2);
                    if (fobj(X2)<fobj(X(i,:))) % improved move?
                        X(i,:)=X2;
                    end
                end
            end
            
            if r<0.5 && abs(Escaping_Energy)<0.5 % Hard besiege % rabbit try to escape by many zigzag deceptive motions
                % hawks try to decrease their average location with the rabbit
                Jump_strength=2*(1-rand());
                X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X));
                FU=X1>ub;FL=X1<lb;X1=(X1.*(~(FU+FL)))+ub.*FU+lb.*FL;
                % X1=abs(X1); 
                if fobj(X1)<fobj(X(i,:)) % improved move?
                    X(i,:)=X1;
                else % Perform levy-based short rapid dives around the rabbit
                    X2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X))+rand(1,dim).*Levy(dim);
                    FU=X2>ub;FL=X2<lb;X2=(X2.*(~(FU+FL)))+ub.*FU+lb.*FL;
                    % X2=abs(X2);
                    if (fobj(X2)<fobj(X(i,:))) % improved move?
                        X(i,:)=X2;
                    end
                end
            end
            %%
        end
    end
    t=t+1;
    CNVG(t)=Rabbit_Energy;
    disp(['第',num2str(t),'次迭代'])
    display(['At iteration ', num2str(t), ' the best fitness is ', num2str(Rabbit_Energy)]);

end
toc
end

% ___________________________________
function o=Levy(d)
beta=1.5;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u=randn(1,d)*sigma;v=randn(1,d);step=u./abs(v).^(1/beta);
o=step;
end

总结

本文介绍了一种基于HHO-CNN-BiLSTM-Attention的数据分类预测Matlab程序。该程序能够实现多特征输入、多类别输出的数据分类预测,并且在实验中呈现出良好的表现。通过将HHO算法、CNN卷积神经网络、BiLSTM双向长短期记忆网络和Attention机制相结合,能够有效提取数据中的特征信息,并从中挖掘出有用的信息以进行分类预测。在实验中,该程序实现了对不同种类数据的分类预测,并且在预测准确度方面取得了优秀的成绩。因此,该程序具有很大的应用价值,可以在各行各业中应用于数据分类预测领域。

标签:Attention,num,Name,BiLSTM,分类,train,CNN,HHO
From: https://blog.csdn.net/2401_86241083/article/details/140335618

相关文章

  • 网络安全的分类
    网络安全的分类系统安全定义:运行系统安全即保证信息处理和传输系统的安全,侧重于保证系统正常运行。内容:避免因为系统的崩溃和损坏而对系统存储、处理和传输的消息造成破坏和损失。同时,避免由于电磁泄露产生信息泄露,干扰他人或受他人干扰。网络的安全定义:网络上系统信息的安全......
  • 【C语言学习】2.常量的分类及使用
    C语言中的常量有以下几种:·字面常量·const修饰的常变量·#define定义的标识符常量·枚举常量1.字面常量如数字(整型、浮点型),字符串等2.const修饰的常变量对于a这一变量,可以多次赋值而使用const修饰后变量被锁定,变更为常变量仍为变量的证明:创建数组后运行,报错显示其......
  • 昇思25天学习打卡营第12天|ShuffleNet图像分类
    ShuffleNet网络介绍        ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet,SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作:PointwiseGroupConvolution......
  • 【机器学习】使用决策树分类器预测汽车安全性的研究与分析
    文章目录一、决策树算法简介决策树的结构分类和回归树(CART)决策树算法术语决策树算法直觉二、属性选择度量信息增益熵基尼指数计算分割基尼指数的步骤三、决策树算法中的过度拟合避免过度拟合的方法四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总......
  • ELF文件的四种分类
    可重定位文件(RelocatableFile):文件类型:.o文件用途:包含代码和数据段,供链接器(Linker)在链接过程中使用。这种文件并不能直接执行,而是需要与其他可重定位文件和库链接,生成可执行文件或共享库。标识:文件头中的e_type字段值为ET_REL。可执行文件(ExecutableFile):文件类型:实际的二进......
  • 【TCN-BiGRU-Attention回归预测】基于被囊群优化算法TSA优化时间卷积双向门控循环单元
        ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【TCN-BiGRU-Attention回归预测】基于斑马优化算法ZOA优化时间卷积双向门控循环单元融
        ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • ML.NET-模型生成器工具(一)-图片分类教程
    1、创建一个图片分类模型2、配置训练环境  可以是CPU或者GPU3、添加训练数据  有个博主训练了一个检测奥特曼的模型,我找资料时参考了他的文章;所以这里和他保持一致,也训练一个识别奥特曼的模型验证一样。 注意事项:注意文件夹结构要求;注意每种数据的图片个数最好保持......
  • 分类模型的算法性能评价
    一、概述  分类模型是机器学习中一种最常见的问题模型,在许多问题场景中有着广泛的运用,是模式识别问题中一种主要的实现手段。分类问题概况起来就是,对一堆高度抽象了的样本,由经验标定了每个样本所属的实际类别,由特定算法训练得到一个分类器,输入样本属性即自动计算出其所属类别,从......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【前缀和/固定滑窗】2
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明解题思路贪心思想......