基于改进人工蜂群算法的 K 均值聚类算法(Matlab代码实现)

news/2024/5/20 6:23:12 标签: 算法, 均值算法, 聚类

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章讲解


💥1 概述

复现论文:

 基于以上三点改进提出了 IABC-Kmeans 算法。该算法的基本思想是: 通过 IABC 算法进行一次迭代,将迭代得到的新位置作为 KMC 的初始点并进行一次 K 均值聚类,再用聚类获得的新的中心点更新蜂群; 如此交替执行 IABC 算法和 K均值聚类,直到算法结束。

算法基本步骤描述如下:

步骤 1 设置引领蜂、跟随蜂和侦察蜂的数量( 一般有引领蜂数量 = 跟随蜂数量) ; 最大迭代次数 MCN 以及控制参数Limit; 当前迭代次数Cycle,初始值为1; 聚类类别数 k; 利用最大最小距离积法初始化蜂群,产生 { Z1,Z2,…,ZN } 个初始蜂 群。

步骤 2 对初始蜂群进行一次聚类划分,根据式( 5) 计算每只蜜蜂的适应度,按照适应度大小排序,将前一半作为引领蜂,后一半作为跟随蜂。

步骤 3 引领蜂利用式( 6) 对其邻域进行搜索,得到新的位置,按照贪婪选择原则,如果新的位置的适应度大于原先位置的适应度,则用新的位置更新原位置; 否则,保持原位置不变。当所有引领蜂完成邻域搜索后,根据式( 4) 计算概率 Pi。

步骤 4 跟随蜂利用算得的概率 Pi 并基于轮盘赌原则选择引领蜂,原则上,Pi 越大,表明引领蜂 i 的适应度值越大,被跟随蜂选中的概率也越大。当跟随蜂完成引领蜂选择后,利用式( 7) 对邻域搜索,同样按照贪婪选择原则选择适应度高的位置。

步骤 5 在所有跟随蜂完成搜索后,将得到的位置作为聚类中心,对数据集进行一次 K 均值迭代聚类,根据聚类划分,用每一类的新的聚类中心更新蜂群。

步骤 6 如果某引领蜂在 Limit 次迭代后,结果都没有改变,则由引领蜂变为侦察蜂,并随机产生一个新的位置取代原位置。

步骤 7 如果当前迭代次数大于最大次数 MCN,则迭代结束,算法结束; 否则转向步骤 2,Cycle = Cycle + 1。

📚2 运行结果

 

部分代码:


function [Colony Obj Fit oBas]=GreedySelection(Colony1,Colony2,ObjEmp,ObjEmp2,FitEmp,FitEmp2,fbas,ABCOpts,i)

oBas=fbas;
Obj=ObjEmp;
Fit=FitEmp;
Colony=Colony1;
if (nargin==8)%Inside the body of a user-defined function, NARGIN returns the number of input arguments that were used to call the function. 
for ind=1:size(Colony1,1)%ind=1:5,对所有食物源进行贪婪选择
    if (FitEmp2(ind)>FitEmp(ind))%如果Vi的适应度值大于Xi的,替换,,
        oBas(ind)=0;
         %zj因为这是已经被新的位置更新了,所以其开采度应该置为零,表示这是第一次,没有被开采过
        Fit(ind)=FitEmp2(ind);
        Obj(ind)=ObjEmp2(ind);
        Colony(ind,:)=Colony2(ind,:);
    else%否则不变,并且计数器bas+1
        oBas(ind)=fbas(ind)+1;
         %zj因为新的位置的适应度没有当前的好(大),所以在当前位置上仍保留当前解,表示当前又被开采了一次
        Fit(ind)=FitEmp(ind);
        Obj(ind)=ObjEmp(ind);
        Colony(ind,:)=Colony1(ind,:);
    end;
end; %for
end; %if
if(nargin==9)%第i个引领蜂被跟随,只对第i个食物源进行贪婪选择
    ind=i;
    if (FitEmp2(ind)>FitEmp(ind))
        oBas(ind)=0;
        Fit(ind)=FitEmp2(ind);
        Obj(ind)=ObjEmp2(ind);
        Colony(ind,:)=Colony2(ind,:);
    else
        oBas(ind)=fbas(ind)+1;
        Fit(ind)=FitEmp(ind);
        Obj(ind)=ObjEmp(ind);
        Colony(ind,:)=Colony1(ind,:);
    end;
end; 
 

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]喻金平,郑杰,梅宏标.基于改进人工蜂群算法的K均值聚类算法[J].计算机应用,2014,34(04):1065-1069+1088.

🌈4 Matlab代码、数据、文章讲解


http://www.niftyadmin.cn/n/5021866.html

相关文章

2023最新轻松升级、安装和试用Navicat Premium 16.2.10 教程详解

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

1976~2020年青藏高原典型冰川及冰湖遥感监测数据集

冰川面积是反应气候变化最直接的指标之一。在全球变暖的大背景下,对于评估冰川融化造成的生态、全球气候变化和水资源价值评价等问题十分重要。本文针对受西风和印度洋夏季风影响下的青藏高原冰川及其末端冰湖的变化特征,制作了近44年来时相相对连续的冰…

python-爬虫-urllib

网络爬虫(Web Crawler),又叫网络蜘蛛、网络机器人,是一种自动化数据采集程序 数据采集 → 数据处理 → 数据存储 常见的工作流程如下: 1.定义采集的目标(网站、APP、公众号、小程序)&#xff…

动态修改vxe-table表头border

今天在开发公司的透视表的过程中,遇到很多坑特此记录一下,样式更改这一块除了通过header-cell-style等方法已经无法满足样式修改的问题,最终选择通过通过js操作dom实现样式的更改。 // TODO: 表格边框 需要获取元素并监听const changeTableBorder = () => {const tableEl…

CKA 真题练习(十六)备份还原etcd

题目: 首先,为运行在 https://11.0.1.111:2379 上的现有 etcd 实例创建快照并将快照保存到 /var/lib/backup/etcd-snapshot.db (注意,真实考试中,这里写的是 https://127.0.0.1:2379) 为给定实例创建快照预计能在几秒钟内完成。 …

茶叶的保健作用与有益成分

保健作用 能减低心脑血管发病和死亡风险据研究报道,日本研究者从1994年起对某地4万多名40岁至79岁中老年人进行跟踪调查发现,与一天喝茶不到1杯的人相比,每天喝5杯以上绿茶的男性因脑血管病死亡的平均风险下降了22%,女性下降了31%…

Eclipse 安装串口终端工具

Eclipse已集成串口终端显示,只需要我们自己下载安装即可使用。使用SSH连接也差不多。 查看eclipse版本信息 help->About Eclipse 查看version,我的是4.7.3a,记住代号,我的是“Oxygen”,下面有用。 安装eclipse自带的“Termin…

PCIE2.0/PCIE3.0/PCIE4.0/PCIE5.0接口的带宽、速率计算,nvlink互联

PCIE2.0/PCIE3.0/PCIE4.0/PCIE5.0接口的带宽、速率计算 https://blog.csdn.net/weixin_42229404/article/details/84069859 PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特…