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

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

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

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

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

目录

💥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.rhkb.cn/news/130163.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业追踪,2023-09-11

自动复盘 2023-09-11 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

(高阶)Redis 7 第10讲 单线程 与 多线程 入门篇

面试题 1.Redis 是单线程还是多线程 最早的版本3.x是单线程。 版本4.x,严格意义不是单线程。负责处理客户端请求的线程是单线程,开始加入异步删除。 6.0.x版本后明确使用全新的多线程来解决问题 2.说说IO多路复用3.Redis 为什么快IO多路复用+epoll函…

【2023年11月第四版教材】第12章《质量管理》(第二部分)

第12章《质量管理》(第二部分) 4 规划质量管理4.1 数据收集★★★4.2 数据分析★★★4.3 数据表现★★★4.4 质量管理计划★★★4.5 质量测量指标★★★ (22下35) 4 规划质量管理 组过程输入工具和技术输出计划1.规划质量管理1.项…

学习 [Spring MVC] 的JSR 303和拦截器,提高开发效率

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《推荐】Spring与Mybatis集成整合》 ⛺️ 生活的理想,不断更新自己 ! 1.JSR303 1.1JSR303是什么 JSR 303是Java规范请求(Java Specification Request)…

索引失效有哪些?

在工作中,如果我们想要提高一条语句的查询速度,通常都会想对字段建立索引。 但是索引不是万能的。建立了索引,并不意味着任何查询语句都能走索引扫描。 稍不注意,可能查询语句就会导致索引失效,从而走了全表扫描&…

Python 变量的定义和数据类型的转换

变量 变量的定义 基本语法:变量名 值 变量名是给对象贴一个用于访问的标签,给对象绑定名字的过程也称为赋值,赋值符号 “” 变量名自定义,要满足标识符命名规则。 Python中,不需要事先声明变量名及其类型&#xff…

localStorage是什么?有哪些特点?

localStorage的主要作用是本地存储,它可以将数据按照键值对的方式保存在浏览器中,直到用户或者脚本主动清除数据,否则该数据会一直存在。也就是说,使用了本地存储的数据将被持久化保存。 localStorage与sessionStorage的区别是存…

春秋云镜 CVE-2015-9331

春秋云镜 CVE-2015-9331 wordpress插件 WordPress WP All Import plugin v3.2.3 任意文件上传 靶标介绍 wordpress插件 WordPress WP All Import plugin v3.2.3 存在任意文件上传,可以上传shell。 启动场景 漏洞利用 exp #/usr/local/bin/python3 # -*-coding:…

IDEA中debug调试模拟时显示不全(不显示null)的解决

IDEA中debug调试模拟时显示不全(不显示null)的解决 1、在IDEA中找到File(文件)->Settings(设置) 2、依次找到以下内容进行设置(原版、汉化版): 打开Build, Executio…

taro vue3 ts nut-ui 项目

# 使用 npm 安装 CLI $ npm install -g tarojs/cli 查看 Taro 全部版本信息​ 可以使用 npm info 查看 Taro 版本信息,在这里你可以看到当前最新版本 npm info tarojs/cli 项目初始化​ 使用命令创建模板项目: taro init 项目名 taro init myApp …

使用Puppeteer进行游戏数据可视化

导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化,以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开…

MySQL之视图

概念 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变 化会影响到基表,基表的数据变化也会影响到视图。 基本使用 创建视图 create view 视图名 as select语句; 示例&am…

纯小白安卓刷机1

文章目录 常见的英文意思刷机是什么?为什么要刷机?什么是BL锁(BootLoader锁)?我的机能够刷机吗?什么是Boot镜像/分区?什么是Recovery镜像/分区(缩写为rec)?什…

iisfastchi漏洞复现

1.查看版本 2.在路径中写入 php脚本 发现使用不了 3.环境搭建 结局打开 把限制打开

C#,数值计算——指数微分(exponential deviates)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 指数偏差 /// Structure for exponential deviates. /// </summary> public class Expondev : Ran { private double beta { get; set; } /// <s…

说完 Java 的 Abstract 后再来说说接口 (interface )

如你对 Abstract 修饰的抽象类不是非常了解的话&#xff0c;请自行先考古下。 这篇文章需要对 Java 定义过的抽象类有一些基本的了解才可以。 抽象类和抽象方法 用 Abstract 修饰的类&#xff0c;叫做抽象类&#xff0c;那么用 Abstract 修饰的方法叫做抽象方法。 在 Java 中…

Python从零到一构建项目

随着互联网的发展&#xff0c;网络上的信息量急剧增长&#xff0c;而获取、整理和分析这些信息对于很多人来说是一项艰巨的任务。而Python作为一种功能强大的编程语言&#xff0c;它的爬虫能力使得我们能够自动化地从网页中获取数据&#xff0c;大大提高了效率。本文将分享如何…

SpringMvc--CRUD

目录 一.什么是SpringMvc--CRUD 二.前期准备 公共页面跳转(专门用来处理页面跳转) 三.ssm之CRUD后端实现 配置pom.xml 双击mybatis-generator:generate自动生成mapper 编写generatorConfig.xml 项目结构 编写PagerAspect切面类 编写hpjyBiz接口类 编写hpjyBizImpl接…

《DevOps实践指南》- 读书笔记(二)

DevOps实践指南 Part 2 从何处开始5. 选择合适的价值流作为切入点5.1 绿地项目与棕地项目5.2 兼顾记录型系统和交互型系统5.3 从最乐于创新的团队开始5.4 扩大 DevOps 的范围5.5 小结 6. 理解、可视化和运用价值流6.1 确定创造客户价值所需的团队6.2 针对团队工作绘制价值流图6…

一起学数据结构(6)——栈和队列

上篇文章中&#xff0c;对栈的概念及特点进行了解释&#xff0c;并且给出了栈实现的具体代码。本篇文章将给出队列的基本概念及特点。并给出相应的代码。 1. 队列的概念及结构&#xff1a; 在给出队列的概念之前&#xff0c;先给出上篇文章中提到的栈的概念&#xff1a;一种只…