教程用人工蜂群算法求解k分区聚类问题

群体智能算法是一类受生物群体智能行为的启发而发展出来的算法,社会性动物例如蚂蚁、蜜蜂、鱼等,个体的简单、非直接目标指向的行为常常能在群体层面上涌现出惊人的高效实现目标的模式。本文介绍了如何使用人工蜂群算法(ABC)算法实现真实数据的聚类。

聚类问题

聚类问题是一类NP-hard问题,其基本思想是发现数据中的隐藏模式。聚类没有正式的定义,但它与元素分组的思想有关:通过分组我们可以区分元素为不同的组。

不同的算法族以不同的方式定义聚类问题。一种常见的经典聚类方法如下:它将问题简化为一个数学问题,即找到原始数据的一个k分区。

找到集合S的k分区等价于找到S的k个子集,其遵循以下两个规则:

1.不同子集的交集等于空集。

2.k个子集的并集为S。

在分区聚类过程结束时,我们希望找到原始数据集的一组子集,使得一个实例只属于一个子集。具体如下图所示:

左边是原始数据,右边是k=2分区处理后的数据。

如何划分数据以达到上图所示的分区效果?聚类过程的输出是一组质心。质心是每个分组的代表实体,所以如果数据有k个分区,那么它有k个质心。

k=2数据分区的质心演示示例。

质心也可理解为由数据定义的搜索空间上的点,由于每个质心定义了一个分组,每个数据点将被分配到距离它最近的质心。

人工蜂群算法的聚类应用

如何修改原始的ABC算法使其得以执行聚类任务?实际上,此处ABC算法没作任何改动。唯一要做的就是将聚类问题转化为优化问题。如何做到这一点?

一个明确定义的优化问题需要一个搜索空间:一组d维决策变量输入和一个目标函数。如果将人工集群中的每一个点(蜂)视为聚类问题的一个划分,那么每一个点可以代表一整组候选质心。如果对d维空间上的数据集执行k分区,那么每个点都将是一个k·d维向量。

上文定义了如何表示输入决策变量,接下来只需要弄清楚如何定义搜索空间的边界以及选用什么目标函数。

搜索空间边界的定义很容易,用[0,1]区间对整个数据集进行归一化,并将目标函数的值域定义为0到1。麻烦的是如何定义目标函数。

分区聚类方法希望最大化两个不同组之间的距离,并最小化组内的距离。文献中提到了几个目标函数,但是最为人熟知的方法是所谓的平方误差和(SumofSquaredErrors,SSE)。

平方误差和的公式。

这个公式是什么意思?平方误差和(SSE)是一种聚类度量指标,其思想非常简单。它是一个计算数据中每个实例到其最接近质心的平方距离的值。算法优化的目标是尽量减小这个值的大小。

可以使用之前的目标函数框架来实现平方误差和,具体如下:

处理真实数据

现在开始尝试处理一些真实的数据,并测试ABC算法处理聚类问题的能力。此处我们使用著名的Iris数据集进行测试。

初始的四维数据集包含了从三种植物身上提取得到的特征。为了便于可视化,此处只使用该数据集的两个维度。观察该数据集第二维和第四维之间的关系:

importmatplotlib.pyplotaspltfromabcimportABCfromobjection_functionimportSumOfSquaredErrorsfromsklearn.datasetsimportload_irisfromsklearn.preprocessingimportMinMaxScalerdata=MinMaxScaler().fit_transform(load_iris()['data'][:,[1,3]])plt.figure(figsize=(9,8))plt.scatter(data[:,0],data[:,1],s=50,edgecolor='w',alpha=0.5)plt.title('OriginalData')

上述代码的输出结果如下:

原始数据分布。

由于使用这些数据作为基准进行测试,因此其最佳划分已知,它是由这三种花的原始分布给出的。我们可以用下面的Python代码可视化Iris数据集的原始优化分区:

colors=['r','g','y']target=load_iris()['target']plt.figure(figsize=(9,8))forinstance,tgtinzip(data,target):plt.scatter(instance[0],instance[1],s=50,edgecolor='w',alpha=0.5,color=colors[tgt])plt.title('OriginalGroups')

它显示了如下分布:

数据集的初始划分。

由于已经知道这个样本数据的原始最优分区是什么,接下来的实验将测试ABC算法能否找到一个接近最优解的解决方案。使用平方误差和作为目标函数,并将分区数设置为3。

由于随机初始化,生成的质心的顺序可能与类的顺序不匹配。因此在ABC算法的输出图像中,组的颜色可能会不匹配。不过这并不重要,因为人们更关心的是对应分组的外观。

objective_function=SumOfSquaredErrors(dim=6,n_clusters=3,data=data)optimizer=ABC(obj_function=objective_function,colony_size=30,n_iter=300,max_trials=100)optimizer.optimize()defdecode_centroids(centroids,n_clusters,data):returncentroids.reshape(n_clusters,data.shape[1])centroids=dict(enumerate(decode_centroids(optimizer.optimal_solution.pos,n_clusters=3,data=data)))defassign_centroid(centroids,point):distances=[np.linalg.norm(point-centroids[idx])foridxincentroids]returnnp.argmin(distances)custom_tgt=[]forinstanceindata:custom_tgt.append(assign_centroid(centroids,instance))colors=['r','g','y']plt.figure(figsize=(9,8))forinstance,tgtinzip(data,custom_tgt):plt.scatter(instance[0],instance[1],s=50,edgecolor='w',alpha=0.5,color=colors[tgt])forcentroidincentroids:plt.scatter(centroids[centroid][0],centroids[centroid][1],color='k',marker='x',lw=5,s=500)plt.title('PartitionedDatafoundbyABC')

代码的输出如下:

ABC算法生成的分区

仔细观察原始分区和ABC算法生成的分区,可以看到ABC算法能够找到一个十分接近最优解的分区方法。这证明了用于聚类的ABC算法到底有多强大。还可以查看ABC算法的优化曲线来看看优化过程是如何进行的:

itr=range(len(optimizer.optimality_tracking))val=optimizer.optimality_trackingplt.figure(figsize=(10,9))plt.plot(itr,val)plt.title('SumofSquaredErrors')plt.ylabel('Fitness')plt.xlabel('Iteration')

正如所料,ABC算法能有效地最小化SSE目标函数。可以看到,集群智能拥有一些强大的机制来处理优化问题。只要能将现实世界的问题简化为优化问题,就能很好地利用这些算法。

参考文献:

未来展望

本文通过实现人工蜂群算法简要介绍了集群智能,以及如何利用它来解决一些有趣的问题:例如优化实际函数、修改ABC算法解决聚类问题。

THE END
1.优化覆盖基于matlab人工蜂群算法求解无线网络传感覆盖优化问题人工蜂群算法 (Artificial Bee Colony Algorithm, ABC) 属于一种元启发式智能算法, 是一种非数值计算的组合优化算法。人工蜂群算法虽然算法简单, 但易陷入局部极值点, 优化的后期收敛速率慢。由于混沌运动具有遍历性、对初始条件的敏感性、随机性等特点, 为了提高蜂群搜索的遍历性和种群的多样性, 本文将混沌思想加入https://blog.csdn.net/TIQCmatlab/article/details/124577738
2.abc换成数字是什么在数字世界里,123这样的数字序列有着广泛的应用。比如在密码设置、编号标识等领域,123可以作为特定信息的标识或编码。123作为数字序列,也可以通过不同的方式被解读。例如,在某些情境下,123可能代表一个特定的含义,如电话区号、日期格式等。此外,123还可能与一些特定的文化符号相关联。在一些文化中,https://zhidao.baidu.com/question/931885571828786899.html
3.基于ABCLS的传感器节点定位算法【摘要】:为了减少无线传感器网络节点的定位误差,提出一种人工蜂群算法(ABC)修正最小二乘(LS)定位误差的传感器节点定位算法(ABC-LS)。首先估计未知传感器节点与信标节点间距离,然后采用LS算法初步确定未知传感器节点位置,最后采用ABC算法对LS算法的节点定位误差进行修正,并采用仿真实验测试ABC-LS与其他节点定位算法的优劣https://www.cnki.com.cn/Article/CJFDTotal-JYRJ201505064.htm
4.离散人工蜂群算法求解资源时变的项目调度问题AETABC算法中候选食物源的生成方式是优化效果和效率好坏的关键。本文基于任务排列的食物源位置编码对应了项目调度方案,生成候选食物源时既要保持食物源编码的离散性又要保持食物源编码对应的调度方案的可行性,为此本文采用了一种新的候选食物源生成方法。 仍以图1所示项目为例来说明候选食物源的生成方法,设食物源xi=(1,http://www.chinaaet.com/article/181261
5.基于自适应邻域搜索和高斯扰动的人工蜂群算法(ABCNG)然而,ABC也存在一些局限性,如开发能力弱、收敛速度慢等。为了克服这些缺点,本文提出了一种新的基于自适应邻域搜索和高斯扰动的ABC算法。首先,采用自适应方法动态调整邻域大小。然后,基于邻域结构构造了一种改进的全局最优解引导搜索策略。最后,设计了一种新的具有进化速率的高斯扰动来进化每次迭代中不变的解。在两个https://www.cnblogs.com/ycy1273984518/p/15201124.html
6.优化求解基于人工蜂群算法ABC求解最优目标matlab源码人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发的算法,在2005年由Karaboga小组为优化代数问题而提出。 2 部分代码 clc; 1. clear; 1. close all; 1. %% Problem Definition 1. CostFunction=@(x) Sphere(x); % Cost Function https://blog.51cto.com/u_15287693/4315555
7.人工蜂群(ABC)算法伪代码Artificial Bee Colony(ABC) Algorithm伪代码: 初始化人工蜂群和问题参数 初始化食物源记忆 cycle=1 重复 雇佣蜂(employed https://www.jianshu.com/p/243bdf4567ec
8.ABCCBA从1到9不同数字组成算法php教程也就是能算出用 (0-9组成) 的所有 ABCCBA 不重复的 6位数。 可能会比较麻烦!希望高手能帮我解决一下。非常感谢。 本人不懂程序。能直接给出数字也行。当然最好能付上代码。 回复讨论(解决方案) $a = Combination(range(0, 9), 3);foreach($a as $v) $r[] = join('', array_merge($v, https://m.php.cn/faq/232447.html
9.均值方差模型范文7篇(全文)如,B.S.Jason 用启发式算法研究了三种具有非凸交易成本的均值-方差投资组合模型[3]。H.Konno运用线性规划的分枝定界法求解具有分段线性交易成本的不允许卖空情况下均值-绝对偏差投资组合模型的最优解[4]。李仲飞和汪寿阳运用交互式方法研究了具有线性交易成本的不允许卖空情况下的投资组合模型的最优解[5]。张忠桢https://www.99xueshu.com/w/ikeysr02n5wh.html
10.数据结构和算法字符串的最大公因子gcd 算法:const gcd = (a, b) => (0 === b ? a : gcd(b, a % b)) 如果它们有公因子 abc,那么 str1 就是 m 个 abc 的重复,str2 是 n 个 abc 的重复,连起来就是 m+n个 abc,好像 m+n 个 abc 跟 n+m 个 abc 是一样的。 https://open.alipay.com/portal/forum/post/158701039
11.Python实现人工蜂群算法的示例代码pythonABC,即人工蜂群算法(Artificial Bee Colony Algorithm),由Karaboga等人提出,这篇文章主要介绍了人工蜂群算法的概念与Python实现,感兴趣的可以了解一下+ 目录 算法简介 ABC,即人工蜂群算法(Artificial Bee Colony Algorithm),由Karaboga等人提出。 在ABC中,有三种不同的蜜蜂,即雇佣蜂、跟随蜂和侦察蜂,这三种蜜蜂的https://www.jb51.net/python/2938461r5.htm
12.基于合成似然的近似贝叶斯计算方法近似贝叶斯计算(Approximate Bayesian Computation,ABC)方法是近年来发展起来的一种基于数据模拟的贝叶斯推断方法。基于经验似然的近似贝叶斯计算方法(Bayesian Computation with empirical likelihood,BCel)可以克服 ABC 方法难以校准等问题,是一类改良的ABC算法。稳定分布(stable distribution)是一类可以刻画"尖峰厚尾"的金融数据https://wap.cnki.net/lunwen-1017151355.html
13.求解TSP的离散人工蜂群算法1 人工蜂群算法及其离散化定义 ABC算法的寻优过程模拟蜜蜂寻找优质花蜜源的行为,按分工将人工蜂群分为引领蜂、跟随蜂和侦查蜂三种角色,角色之间基于一定条件进行转变.每个蜜源对应问题的一个可能解,蜜源的收益度代表问题解的质量,每个引领蜂对应一个确定的蜜源,并在迭代中对其邻域进行搜索.引领蜂完成搜索后将所搜索到https://xuebao.neu.edu.cn/natural/article/html/2015-8-1074.htm
14.abc,通过算法运算,得到licensekeyxxxxxxxxx实现一套app授权license的算法,license交互可以参照windows序列号,输入用户账号 abc,通过算法运算,得到license key xxx-xxx-xxx-xxx,其中key的长度建议在20位左右,构成为全大写字符+数字,生成的算法要求必须使用 哈希算法(SHA1/256/512任选), RSA(KeySize 2048), 编码技术(HEX编码、字母表编码、BASE64编码任选),生https://github.com/YeYanhui/LicenseApp
15.一类基于蜜蜂采集模型智能算法.pdf一类基于蜜蜂采集模型智能算法.pdf,绑珊琉按娜元兆忠国丑跳怜驻笆洪奎翰畜肛怎籍俗槛软堕寅侈屁挛黄阎昼兵宴唯驾北浦吼薛莱煌邮盂孺铃幌茬辐排瞅报露增场匈啥宗晃沿钡担守皆挫靠妓滓洞班琵内灶肠https://max.book118.com/html/2017/0630/119155680.shtm
16.A*算法求解15数码问题算法简介 人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发【每日安全资讯】卡巴斯基发现软件漏洞 可在线访问全球1000多个加油站控制器 据外媒Cnet报道,卡巴斯基实验室的研究人员上个月发布了关于加油站漏洞的研究报告,指出从美国到印度的1000多个加油站可能面临网络攻击。这些问题来自https://www.pianshen.com/article/1936924994/
17.一种基于蜂群遗传混合算法的AUV系统任务分配方法6.步骤1:初始化iabc算法参数与nga算法参数,设定任务集合;7.步骤2:利用iabc算法得到每只蜜蜂满足约束条件的任务分配矩阵;8.步骤2-1:为每只蜜蜂从任务集合中随机选择一个任务,然后依据iabc算法的概率公式选择执行任务的auv;9.定义任务约束为:[0010][0011][0012][0013][0014]式中,n表示auv数量,m表示任务总数;https://www.xjishu.com/zhuanli/55/202210273979.html/