【特征选择】基于二元多邻域人工蜂群 (BMNABC) 特征选择问题(Matlab代码实现)

news2025/1/13 17:06:39

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

💥1 概述

特征选择(特征子集选择)问题是各个领域重要的预处理阶段之一。在真实的数据集中,存在许多不相关、误导性和冗余的特征,这些特征是无用的。主要特征可以通过特征选择技术提取。特征选择属于 NP 难题类;因此,元启发式算法对于解决问题很有用。引入一种新的二元ABC称为二元多邻域人工蜂群(BMNABC),以增强ABC阶段的勘探和开发能力。BMNABC 在第一阶段和第二阶段使用新的概率函数应用近邻域和远邻域信息。在第三阶段,对那些在前一阶段没有改进的解决方案进行了比标准ABC更有针对性的搜索。该算法可以与包装器方法结合使用,以获得最佳结果。

📚2 运行结果

 部分代码:

function [BestChart,Error,BestFitness,BestPosition]= BMNABC(FoodNumber,maxCycle,D,fobj,Limit)
global SzW
rand('state',sum(100*clock)) %#ok
%reset trial counters
trial=zeros(1,FoodNumber);
rmin=0;rmax=1;
Vmax=6;
BestChart=[];

%%
%/FoodNumber:The number of food sources equals the half of the colony size*/
Foods=initialization(FoodNumber,D,1,0)>0.5;

for i=1:FoodNumber
    ObjVal(i) =feval(fobj,Foods(i,:));
end

BestInd=find(ObjVal==min(ObjVal));
BestInd=BestInd(end);
BestFitness=ObjVal(BestInd);
BestPosition=Foods(BestInd,:);
x=BestPosition;
Acc=(SzW*sum(x)/length(x)-BestFitness)/(1-SzW)+1; % This relation is computed based on FitnessValue=(1-SzW)*(1-cp.CorrectRate)+SzW*sum(x)/(length(x));
% The feature subset is based on two criteria: the maximum classi?cation accuracy (minimum error rate) and the minimal number of selected features. 
%Fitness = a* ClassificationError+ (1-a) NumberOfSelectedFeatures/TotalFeatures

 
Error=1-Acc;
BestChart=[BestChart,Error];
fprintf('Iteration:%3d\tAccuracy:%7.4f\tFitness:%7.4f\t#Selected Features:%d\n',1,((1-Error)*100),BestFitness,(sum(BestPosition,2)));

gindex=BestInd;

pbest=Foods;
pbestval=ObjVal;
iter=2;
while ((iter <=maxCycle)),   
    r= rmax-iter*(rmax-rmin)/maxCycle;
    
    %%
    %%%%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:(FoodNumber)
        neigh=[]; d=[]; dd=[];
        w=0;
        for k=1:FoodNumber
            if k~=i
                w=w+1;
                d(w)=sum(Foods(i,:)~=Foods(k,:)); %Hamming distance.
                dd(w)=k;
            end
        end
        Meand=mean(d);
        Maxd=max(d);
        u=1;
        for z=1:w
            
            if (d(z)<=Maxd && d(z)>=r*Meand)
                
                neigh(u)=dd(z);
                u=u+1;
            end
        end
        
        
        
        fi=rand(length(neigh),D);
        
        FIP=sum(fi.*pbest(neigh,:))./sum(length(neigh));
        sol=Foods(i,:);
        
        V(i,:)=rand(1,D).*(Foods(i,:)-FIP);
        V(i,:)=max(min(V(i,:),Vmax),-Vmax);
        aa=abs(tanh(V(i,:)));
        
        AA=1-exp(-trial(i)/(iter*maxCycle));
        S=AA+aa;
        
        temp=rand(1,D)<S;
        moving=find(temp==1);
        
        sol(moving)=~sol(moving);
        
        
        ObjValSol=feval(fobj,sol);
        
        if (ObjValSol<pbestval(i))
            pbest(i,:)=sol;
            pbestval(i)=ObjValSol;
        end
        
        if (ObjValSol<ObjVal(i))
            Foods(i,:)=sol;
            ObjVal(i)=ObjValSol;
            trial(i)=0;
        else
            trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/
        end;
        
        
    end;
    
    %%
    %%%%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    i=0;
    
    while(i<FoodNumber)
        i=i+1;
        
        neigh=[]; d=[];dd=[];
        w=0;
        for k=1:FoodNumber
            if k~=i
                w=w+1;
                d(w)=sum(Foods(i,:)~=Foods(k,:));
                dd(w)=k;
            end
        end
        Meand=mean(d);
        u=1;
        for z=1:w
            
            if (d(z)<=Meand)
                neigh(u)=dd(z);
                u=u+1;
            end
        end
        
        
        [tmp,tmpid]=min(ObjVal(neigh));
        
        nn=neigh(tmpid);
        
        sol=Foods(i,:);
        
        
        V(i,:)=rand(1,D).*(Foods(i,:)-Foods(nn,:));
        V(i,:)=max(min(V(i,:),Vmax),-Vmax);
        aa=abs(tanh(V(i,:)));
        
        
        AA=1-exp(-trial(i)/(iter*maxCycle));
        S=AA+aa;
        
        temp=rand(1,D)<S;
        moving=find(temp==1);
        
        sol(moving)=~sol(moving);
        
        
        ObjValSol=feval(fobj,sol);
        
        if (ObjValSol<pbestval(i))
            pbest(i,:)=sol;
            pbestval(i)=ObjValSol;
        end
        % /*a greedy selection is applied between the current solution i and its mutant*/
        if (ObjValSol<ObjVal(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
            Foods(i,:)=sol;
            ObjVal(i)=ObjValSol;
            trial(i)=0;
        else
            trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/
        end;
        
        
    end
   %% 
    %/*The best food source is memorized*/
    
    ind=find(ObjVal==min(ObjVal));
    ind=ind(end);
    if (ObjVal(ind)<BestFitness)
        
        BestFitness=ObjVal(ind);
        BestPosition=Foods(ind,:);
        x=BestPosition;
        Acc=(SzW*sum(x)/length(x)-BestFitness)/(1-SzW)+1;
        Error=1-Acc;
        gindex=ind;
        success=1;
    else
        success=0;
    end;
    
   %% 
    %%%%%%%%%%%% SCOUT BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %/*determine the food sources whose trial counter exceeds the "Limit" value.
    %In Basic ABC, only one scout is allowed to occur in each cycle*/
    
    ind=find(trial==max(trial));
    ind=ind(end);
    if (trial(ind)>Limit)
        
        sol=Foods(ind,:);
        b=randi([1 FoodNumber]);
        while ((b==ind)|| (b==gindex))
            b=randi([1 FoodNumber]);
        end
        
        
        if (success==1)
            sol=or(Foods(ind,:),BestPosition) ;
        else
            sol= or (xor(Foods(ind,:),BestPosition) ,or(Foods(ind,:),Foods(b,:)));
        end
        
        ObjValSol=feval(fobj,sol);
        
        if (ObjValSol<pbestval(ind))
            pbest(ind,:)=sol;
            pbestval(ind)=ObjValSol;
        end
        if (ObjValSol<ObjVal(ind)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
            Foods(ind,:)=sol;
            ObjVal(ind)=ObjValSol;
            trial(ind)=0;
        else
            trial(ind)=trial(ind)+1; %/*if the solution i can not be improved, increase its trial counter*/
        end;
    end
    
    BestChart=[BestChart,Error];
    fprintf('Iteration:%3d\tAccuracy:%7.4f\tFitness:%7.4f\t#Selected Features:%d\n',iter,((1-Error)*100),BestFitness,(sum(BestPosition,2)));
    
    iter=iter+1;
end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

Zahra Beheshti(2018), BMNABC: Binary Multi-Neighborhood Artificial Bee Colony for High-Dimensional Discrete  Optimization Problems, Cybernetics and Systems 49 (7-8), 452-474.
 

🌈4 Matlab代码实现

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

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

相关文章

1.EdgeX实战 Ubuntu18.04搭建运行环境

文章目录前言:1、搭建Ubuntu18.04服务器平台2、安装docker和docker-compose3、运行EdgeX4、使用浏览器访问EdgeX前言: 想着把之前arduino和树莓派搭建的物联网平台迁移到EdgeX上来&#xff0c;原因有二&#xff1a; 不想去造轮子&#xff0c;自己从零开始写一个物联网的框架&…

影响 SEO 的排名优化的因素

我们在做网站SEO运营的时候&#xff0c;经常会遇到没有排名的情况。即使我们每天保持原创内容的更新和发布&#xff0c;也没有用。这时候就要马上检查网站存在哪些问题&#xff0c;及时解决&#xff0c;让我们的日常努力尽快盈利。以下因素按米贸搜排序&#xff0c;影响SEO排名…

凡亿教育嘉立创宠粉福利,9.9元秒杀PCB多层板设计实战特训班

层林浸染&#xff0c;秋意渐浓 随着双11活动的落幕 意味着工程师最忙碌的时候即将结束 然而在这多事之秋&#xff0c;还是项目高峰期 想必很多工程师都很少过好双11吧 这可不行&#xff01;&#xff01;&#xff01; 别人家有的&#xff0c;我们家的工程师都要有&#xff01;为…

pytest学习和使用10-Pytest中的测试用例如何跳过执行?

10-Pytest中的测试用例如何跳过执行&#xff1f;1 引入2 Unittest中的用例跳过3 pytest.mark.skip4 pytest.skip()5 pytest.mark.skipif()6 跳过标记7 pytest.importorskip1 引入 有时候我们需要对某些指定的用例进行跳过&#xff0c;或者用例执行中进行跳过&#xff0c;在Uni…

高项 成本管理论文

4个过程 1&#xff0c;规划成本&#xff1a;为规划、管理、花费和控制项口成本而制定政策、程序和文档的过程。 2&#xff0c;估算成本&#xff1a;对完成项目活动所需资金进行近似估算的过程。 3&#xff0c;制定预算&#xff1a;汇总所有单个活动或工作包的估算成本&…

【面试题】JavaScript面试题详细总结(一)

js基础部分 01 值类型与引用类型 1.1 问法 js判断数据类型&#xff1f;js值类型与引用类型有哪些&#xff1f;值类型与引用类型的区别&#xff1f; 1.2 介绍 JavaScript存储数据两个区域&#xff1a;栈和堆 栈&#xff1a;通常空间是固定的&#xff08;占据空间小、大小固定&…

MySQL基础|数据库存储时间段,数字从指定值递增AUTO_INCREMENT【详细版,建议收藏】

今天&#xff0c;在写SQL语句存储时间时遇到了一些问题&#xff0c;最后成功解决了 mysql基础一、时间字段的格式限制&#xff08;一&#xff09;精确到秒的表达1、错误的表达2、解决方式如下3、查看创建的表&#xff08;二&#xff09;存储一个时间段1、错误的表达语句2、解决…

一个优秀的程序员应该养成哪些好的习惯?

文章目录一、写代码前先想好思路&#xff0c;先规划框架&#xff0c;再到局部实现二、注重代码风格三、注重代码执行效率四、掌握一些编码原则五、解决问题时&#xff0c;对于原理性的问题&#xff0c;不要面向搜索引擎编程。六、注重基础知识的学习&#xff0c;不忙碌跟风新技…

分享美容美发会员管理系统功能的特点_分享美容美发会员管理系统的制作

人们越来越关心美发&#xff0c;美发行业发展迅速&#xff0c;小程序可以连接在线场景&#xff0c;许多美发院也开发了会员卡管理系统。那么一个实用的美发会员管理系统怎么制作呢&#xff1f;它有什么功能&#xff1f;我们一起来看看~&#xff08;干货满满&#xff0c;耐心看完…

艾美捷Immunochemistry FAM FLICA Poly Caspase检测方案

Caspases在细胞凋亡和炎症中发挥重要作用。ICT的FLICA检测试剂盒被研究人员用于通过培养的细胞和组织中的胱天蛋白酶活性来定量凋亡。FAM FLICA Poly Caspase探针允许研究人员评估胱天蛋白酶的激活。 用艾美捷Immunochemistry FAM-FLICA Poly caspase检测试剂盒检测活性半胱天冬…

2022年信息学部物联网工程学院学生科协机器学习科普

什么是机器学习 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 它是人…

【安全学习】记一次内网环境渗透

注意&#xff1a; 本文仅用于技术讨论与研究&#xff0c;对于所有笔记中复现的这些终端或者服务器&#xff0c;都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习目的&#xff0c;如果列出的技术用于其他任何目标&#xff…

讲讲 Redis 缓存更新一致性,看了都说好!

当执行写操作后&#xff0c;需要保证从缓存读取到的数据与数据库中持久化的数据是一致的&#xff0c;因此需要对缓存进行更新。 因为涉及到数据库和缓存两步操作&#xff0c;难以保证更新的原子性。 在设计更新策略时&#xff0c;我们需要考虑多个方面的问题: 对系统吞吐量的影…

那些测试行业的细分岗位,你知道多少?薪资又如何?

软件测试是个需求多&#xff0c;就业机会大的职业。目前&#xff0c;我国具备软件测试能力的人员数量和市场需求相差巨大&#xff0c;巨大的市场空缺&#xff0c;使软件测试工程师从初级到高级&#xff0c;只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案

【案例一】 一块西数移动硬盘不小心摔了&#xff0c;插到电脑上就不认盘&#xff0c;之后没在其他的任何操作。这是比较典型的硬盘故障类型&#xff1a;故障原因就是移动硬盘磁头损坏。 北亚数据恢复工程师在用户同意的前提下开盘&#xff0c;对移动硬盘开盘换磁头。&#xff0…

8.5 Spring解决循环依赖的机理(AOP)

8.5 Spring解决循环依赖的机理(AOP) MyAspect Aspect public class MyAspect {After(value "execution(* com.cjf.bean.B.*(..))")public void myAfter(){System.out.println("最终通知的功能.........");} }SpringBean.xml <aop:aspectj-autoproxy&g…

Unity游戏Mod/插件制作教程03 - 插件实例1: HelloWorld

准备工作 作为编程类的教程&#xff0c;果然第一个需要来一个传统项目——HelloWolrd。 在开始之前&#xff0c;我先贴一个链接&#xff0c;这是BepInex官方的开发手册 https://bepinex.github.io/bepinex_docs/v5.0/articles/dev_guide/index.html 有什么问题也可以翻阅官方的…

论文阅读【6】RRN:LSTM论文阅读报告(1)

lstm类似于Simple_RNN,但是又比他复杂很多.我是参考这个视频的老师讲解的,这个老师讲解的非常好.https://www.bilibili.com/video/BV1FP4y1Z7Fj?p4&vd_source0a7fa919fba05ffcb79b57040ef74756 lstm的最重要的设计就是那一条传输带,即为向量CtC_tCt​,过去的信息通过他传送…

跨程序共享数据:Android四大组件之内容提供器

跨程序共享数据&#xff1a;Android四大组件之内容提供器前言七、跨程序共享数据&#xff1a;Android四大组件之内容提供器7.1 内容提供器&#xff08;Content Provider&#xff09;简介7.2 运行时权限&#xff08;软件不能为所欲为&#xff0c;想要什么权限&#xff0c;还得主…

【project 】软件使用

project软件使用 1.如何为某任务或资源创建日历 创建新日历 工具->更改工作时间->新建->定义日历名称&#xff0c;选择“新建基准日历”->根据各承建商的日历创建相应的日历 使用新日历 拷贝各承建商的各项任务到指定的项目计划中&#xff0c;然后&#xff…