基于遗传算法的聚类方法研究
基于遗传算法的聚类算法研究
基于遗传算法的聚类算法研究随着数据量不断增长,聚类这种数据挖掘技术也越来越受到人们的关注。
聚类是将相似的样本划分到同一簇,不相似的样本划分到不同簇的过程。
聚类算法是实现这一过程的数学模型。
目前,聚类算法有很多种,其中基于遗传算法的聚类算法是较为先进的一种。
一、遗传算法基础遗传算法是模拟自然界生物进化过程计算最优解的一种计算机算法。
在遗传算法中,每个解都有一定的适应值(也称为适应性),适应性高的解在演化中具有更高的选择概率。
按照类比,适应度就相当于生物进化中适应环境的能力。
新一代解的产生通过变异、交叉和选择等操作完成,进而实现求解过程。
二、遗传算法聚类算法遗传算法聚类算法就是将遗传算法与聚类算法结合起来。
由于传统聚类算法存在着诸如局部极小值、初始化对最终结果影响大等缺点,导致其在某些情况下精度和效率都无法满足需求。
而遗传算法的快速收敛速度、全局优化能力等特点,使其在一定程度上弥补了传统聚类算法的不足。
因此,基于遗传算法的聚类算法在聚类领域备受瞩目。
在遗传算法聚类算法中,样本在选择过程中通过适应性来体现其在聚类中的相似度。
距离(distance)是样本之间的相似度度量标准,通常采用欧氏距离;适应度(fitness)是样本在进化中的重要性度量标准,适应度高的被优先选择。
基于遗传算法的聚类算法通常包括以下步骤:1.随机初始化一组种群,每个个体代表一个聚类簇。
2.计算每个聚类簇的适应度值,并按照适应度值选择一定数量的优秀个体参与下一代群体的生成。
3.使用遗传算法的交叉、变异机制对优秀个体进行操作,生成下一代群体。
4.计算新群体的适应度值并筛选出优秀个体,参与下一代群体的生成。
5.重复第3、4步,直到满足结束条件(如达到最大迭代次数)。
6.输出聚类结果。
三、基于遗传算法的聚类算法优缺点基于遗传算法的聚类算法具有以下优点:1.全局搜索能力强:基于遗传算法的聚类算法可以对搜索空间进行全面的探索,在全局范围内寻找最优解。
基于遗传算法模拟退火算法的聚类算法
基于遗传算法模拟退火算法的聚类算法聚类是一种无监督学习算法,用于将数据集分成不同的组或簇,使相似的数据点在同一组中。
聚类算法旨在找到数据集内的隐藏模式和结构。
遗传算法和模拟退火算法是两种常用的全局优化算法,可以帮助我们找到最优的聚类方案。
遗传算法(Genetic Algorithm, GA)是一种模拟自然界中生物遗传机制的优化算法。
它模拟了生物进化过程中的选择、交叉和变异等操作。
遗传算法的基本思想是通过不断迭代的方式,保留适应度(优良解)高的个体,并以此为基础进行选择、交叉和变异操作,最终找到全局最优解。
模拟退火算法(Simulated Annealing, SA)是一种基于物理退火过程的全局优化算法。
它模拟了物质冷却的退火过程,通过允许一定概率的“错误移动”以跳出局部最优解,最终找到全局最优解。
将遗传算法和模拟退火算法结合起来,可以得到一个更强大的聚类算法。
这种算法首先使用遗传算法对初始的聚类方案进行初始化,并通过适应度函数对每个个体进行评估。
然后,算法使用模拟退火算法对聚类方案进行迭代优化。
在每个温度阶段,通过改变个体之间的距离以及聚类之间的距离,尝试将方案从当前聚类状态迁移到下一个更优状态。
模拟退火算法中的退火过程可以通过控制温度参数来实现。
1.初始化种群:使用遗传算法随机生成初始的聚类方案。
每个个体表示一种可能的聚类方案。
2.计算适应度:对每个个体使用适应度函数进行评估。
适应度函数可以根据聚类方案的内聚性和分离性来定义,以及其他适应度指标。
3.遗传操作:使用遗传算法的选择、交叉和变异操作对个体进行优化。
4.模拟退火:使用模拟退火算法对个体进行迭代优化。
通过改变个体之间的距离以及聚类之间的距离,尝试将方案从当前聚类状态迁移到下一个更优状态。
退火过程可以通过控制温度参数来实现。
5.终止条件:当达到迭代次数的上限或找到满足适应度要求的聚类方案时,停止迭代。
6.输出最优解:返回适应度最高的聚类方案作为最优解。
基于遗传算法的动态聚类方法
1999年10月系统工程理论与实践第10期 基于遗传算法的动态聚类方法α戴晓晖,李敏强,寇纪淞(天津大学系统工程研究所,天津300072)摘要: 针对常规动态聚类方法对初始聚类中心的敏感性以及聚类结果与样本输入次序有关等问题,本文另辟蹊径,提出了一种基于GA的动态聚类方法,并将它应用到数据库的数据分析中.计算结果表明,该方法是一个具有全局最优解的动态聚类方法,其结果明显好于K2均值聚类算法.关键词: 遗传算法;动态聚类;全局优化;数据分析A D ynam ic C lustering M ethod Based on Genetic A lgo rithm sDA I X iao2hu i,L IM in2qiang,KOU J i2song(In stitu te of System s Engineering,T ian jin U n iversity,T ian jin300072) Abstract: To so lve the p rob lem of sen sitivity w ith the o riginal clu stering cen ter andclu stering resu lts depended on the o rder of the inpu t examp le in common dynam icclu stering algo rithm,a new dynam ic clu stering m ethod based on genetic algo rithm s isp resen ted in th is paper and is app lied to data analysis in pu ting resu ltsindicate that the m ethod is a dynam ic clu stering algo rithm w ith global op ti m izati on andis superi o r to K2m ean s algo rithm.Keywords: genetic algo rithm s;dynam ic clu stering;global op ti m izati on;data analysis1 引言聚类分析就是通过无监督训练将样本按相似性分类,把相似性大的样本归为一类,占据特征空间的一个局部区域,而每个局部区域的聚合中心又起着相应类型的代表的作用.聚类分析一方面可以作为一种有效的信息压缩与提取手段,另一方面又往往是其它模式识别的基础.在各类聚类分析中,动态聚类方法是较普遍采用的方法.现有的各种动态聚类方法都是先根据一定的经验准则选取某些聚类参数,诸如希望的聚类数、最小标准差、初始聚类中心、聚类中心间的最小距离等,然后根据距离最近的原则对各样本进行依次训练调节,直至目标函数即各样本到相应聚类中心距离平方和收敛到最小为止.这些算法的计算结果与这些参数的设置是否得当至关重要,因此在设置这些参数之前往往需要对样本数据进行必要的分析研究.这在数据量较大,特别是在高维情况下,要得到合理的参数尤为困难,只能通过多次实验[1].由于在聚类算法中自变量(待聚类点的坐标值)与目标函数都是离散量,存在着许多局部极值,而通常的方法又没有相应接受劣解的机制,因此初始聚类中心和样本输入次序对最终结果有着很大的影响.经常采用的对策是用若干不同的初始中心分别进行聚类,然后选择最满意的一个作为最终聚类结果.这种方法应用在大型数据库的数据分析中,不仅工作量巨大,而且不能保证聚类结果的最优性.遗传算法(Genetic A lgo rithm—GA)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国M ich igan大学的Ho lland教授于1975年首次提出的[2],这是一种新的全局优化搜索算法,其简单通用,鲁棒性强,适于并行处理,已经广泛地应用在计算机科学[3]、优化调度[4]、运输问题[5]、组合优α收稿日期:1997210226资助项目:国家自然科学基金资助项目(79400013,69574022)化[6]等领域.针对动态聚类算法的离散性及局部极值特征,本文运用GA 来解决动态聚类的全局优化问题.2 GA 动态聚类方法2.1 聚类分析的数学模型设目标函数 J =m in6Pr =16m ri =1‖X(r )i-C r ‖2其中:聚类中心C r =1mr 6m ri =1X(r )i (i =1,2,…,m r ,;r =1,2,…,P )6Pr =1m r =Nm r 为属于r 类的样本(记录)个数;X (r )i表示样本X i 属于第r 类;N 为样本(记录)数;P 为聚类中心数(2ΦP ΦN -1).2.2 染色体的构造通过对模型的分析,我们采用自然数编码,具体如下:用X {=(S 1,S 2,…,S N )表示GA 的染色体结构,X {为1×N 维行向量,S l 为第l 位的基因,则染色体要求如下:S l ∈{1,2,…,P }, l =1,2,…,N2.3 适应度的选择选择f =C m ax -m in 6Pr =16m ri =1‖X(r )i-C r ‖2作为适应度函数,其中,C m ax =6N i =16Nj =1‖X i -X j ‖2,把求最小极值问题转化为求最大极值问题,这样在选择规则中就可以使用赌轮策略.2.4 遗传算子遗传算子包括选择、交叉、变异和进化逆转等过程.1)选择规则按照2.3选定的适应度函数,使用赌轮策略进行选择,并且保留上一代M 个较优的个体做为下一代的样本,来保证算法的收敛.2)交叉规则交叉按照OX 规则进行[3].3)变异规则由于在选择机制中采用了保留最佳样本方式,以及引入了“进化逆转”操作技术,为保持群体内个体的多样性,我们采用连续多次对换的变异技术,使可行解有较大顺序排列上的变化,以抑制“进化逆转”的同化作用.若发生变异,则用随机方法产生交换次数K ,对所需变异操作的染色体进行K 次对换(对换的两码位也是随机产生的).4)“进化逆转”规则引进“进化逆转”操作的主要目的是改善遗传算法的局部搜索能力.在遗传算法中,“逆转”是一种常见的“变异”技术.我们使用的“进化逆转”是一种单方向的(朝着改进的方向)和连续多次的“逆转”操作,即对于给定的串,若“逆转”使串(可行解)的适应度提高,则执行逆转操作,如此反复,直至不存在这样的逆转操作为止.这一操作实际上使给定的串改良到它的局部极点,这种局部爬山能力与基本遗传算法的全局搜索能力相结合在实验中显示了良好的效果.2.5 基于GA 的动态聚类方法的具体迭代步骤1)输入P ,pop size ,P c ,P m 及gen 2m ax ;2)置G =0(G 为代数);901第10期基于遗传算法的动态聚类方法3)生成初始群体;4)评价各初始母体的适应度;5)选择母体,进行交叉、变异、进化逆转等操作,生成新一代母体群;6)计算新的聚类中心和累积类内距离平方和;7)评价新一代母体群的适应度;8)若迭代次数已达最大迭代次数,则输出结果;否则G=G+1转入第5)步.输入的控制参数:聚类中心数P、群体规模pop size、交叉概率P c、变异概率P m和最大迭代次数gen2 m ax.3 数据聚类研究为了验证上述算法的有效性,我们以某一数据库中的记录(记录值为:(0,1)、(1,0)、(1,1)、(2,2)、(2, 3)、(3,2)、(5,6)、(6,5)、(6,6)、(7,7)、(7,8)、(8,7)等12个记录)为例,采用K2均值聚类算法(以前4个样本为初始聚类中心)和遗传算法分别进行计算,计算结果如表1:表1 K2均值聚类算法基于GA的动态聚类算法样本样本类别样本类别样本类别样本类别117411732284218332943193431044210453114521146312462124目标函数:12.833目标函数:5.333 遗传算法的运行设置参数如下:P=4,pop size=30,P c=0.7,P m=0.001和gen2m ax=1000.运行50次,平均收敛代数为156代.由仿真结果表明,常规聚类方法因不能有效地处理局部极值问题,因此当初始聚类中心在整个样本空间不平衡时,它很难将这种不平衡纠正过来,从而导致聚类结果对初始聚类中心的选取有着很大的敏感性;而基于GA的动态聚类方法因具有很好的处理局部极值能力,因此对初始聚类中心的选取以及样本的输入次序没有任何要求.另一方面,从它们各自的收敛速度上来看,基于GA的动态聚类方法的收敛速度较慢,但是这显然比用常规方法对不同初始聚类中心进行聚类来获取全局最优解要有效的多.4 结论本文提出了一种基于GA的动态聚类方法,它可以得到全局最优解,从而很好地解决了其它动态聚类方法中普遍存在的初始聚类中心敏感性以及聚类结果与样本的输入次序有关等问题,为聚类分析提供了一个新的思路.计算结果表明,该方法不仅可以用于分析大型数据库中的数据,而且可以辅助指导决策.对于如何提高GA的收敛效率等问题尚需进一步研究.参考文献:[1] 黄振华,吴成一.模式识别原理.杭州:浙江大学出版社.1989.[2] Ho lland T H.A dap tati on in natu ral and artificial system.A nn A rbo r:T he U n iversity of M ich iganP ress,1975.(下转第116页)A1 A2 … A mZ T=Z11Z21…Z m1Z12Z22…Z m2Z1k Z2k…Z m kS1S2S k 因S i为效益型指标,对每一个属性S i(i=1,2,…,k),A j(j=1,2,…,m)可按其大小排序: 1 2 … mA11A12 (1)A21A22 (2)A k1A k2…A km S1 S2…S k其中S i:A i1,A i2,…,A i m,A ij∈A(i=1,2,…,k;j=1,2,…,m)是按第i个属性对m个方案的排序.如果把S i看成E i(i=1,2,…,k),即k个专家,并且再假设E i有序(可按S i(i=1,2,…,k)的重要性决定),这样就转化为前文中的排序矩阵EA,于是可以利用n维足码选择定位法解决多目标决策问题.6 结束语本文给出了一种专家数据信息后处理的群排序方法[3],具有简洁、易于操作等特点.它避开了确定专家权重的困难,采用了较为容易的确定专家顺序的方法,具有客观实用性.对于专家和方案均较多的情形,可以利用计算机进行排序.参考文献:[1] 陈明琴,何湘藩.二维足码选择定位法.系统工程理论与实践,1997,17(2):83~87.[2] 王应明,傅国伟.关于专家最优综合评价模型的改进和完善.系统工程,1992,(6):51~57.[3] 张四维,刘进生.专家数据信息后处理的群排序方法.系统工程理论与实践,1995,15(2):46~50.[4] H e X iangfan,Chen M ingqin.A new m ethod of group o rdering:info rm ati on flow ed m ethod.M CDM:T heo ry and A pp licati on,SC I2T ECH Info rm ati on Services,A ugu st,1995:203~205.(上接第110页)[3] Go ldberg D E.Genetic algo rithm s in search,op ti m izati on and m ach ine learn ing.M A:A ddisonW elsey,1989.[4] 马光文,王黎,W alters G A.水电站优化调度的FP遗传算法.系统工程理论与实践.1996,16(11):77~81.[5] V ignaux G A,M ichalew icz Z.A genetic algo rithm fo r the linear tran spo rtati on p rob lem,IEEET ran s Syst.M an Cybern,1994,21(2)[6] Karo ly F pal.Genetic algo rithm s fo r the traveling sales m an p rob lem based on a heu ristic cro ssoveroperati on.B i o l Cybern,1993,69:539~546.[7] Tou J T.D YNOC——a dynam ic op ti m al clu stering seek ing techn ique,In pu ter Info rm ati onScience,1979,8(6):43~50.[8] 方开泰,潘恩沛.聚类分析.北京:地质出版社.1982.。
基于遗传算法的聚类分析
遗传算法[1, 2]是一种借鉴生物界自然选择和进化机制发展起来的具有自适应性和自组织能力的搜索算法,被广泛应用于求解复杂的优化问题。
遗传算法首先随机生成优化问题的一组可能解,并对每个可能解进行编码,这组可能解的集合被称为种群,种群中的每个可能解被称为个体。
每个个体都有一个与之相应的适应度值,用来衡量该个体代表的问题的解的“好坏”。
模仿生物界“适者生存”原理,根据适应度的大小,从初始种群中选择若干个较好的个体参与交叉和变异操作。
交叉操作通过交换重组两个个体的编码的一部分生成新的个体,类似于子代继承父代的基因。
变异操作通过随机改变某个个体的编码位来生成新的个体,从而增加了种群的多样性。
选择、交叉和变异操作迭代执行若干次或一直执行到满足特定的终止规则,最后得到的种群中适应度最高的个体即为优化问题的近似最优解。
遗传算法近年来在模式识别、机器学习、图像处理、智能控制等方面获得了成功的 应用[4]。
聚类分析是模式识别中的一个重要问题,是非监督学习的重要方法。
聚类分析的目的是将若干特征模式按照它们之间的“相似度”划分为若干个集合,每个集合中的特征模式之间按照某种度量来说“相似”,而不同集合中的特征模式之间按相同的度量来说“不相似”。
目前已有很多种聚类算法,如均值算法、最大似然估计算法和基于图论的方K- 法[3]。
均值算法是一种简单常用的方法,该方法首先选定K-某种距离度量作为模式间相似性度量,然后确定某个评价聚类划分结果质量的准则函数,在给出初始聚类中心点后,用迭代法找出使准则函数取极值的最好聚类划分结果。
该方法的缺点是可能受初始选定的聚类中心的影响而过早地收敛于次优 解[5]。
最大似然估计法首先假设代分类数据符合某种先验概率分布,然后根据计算出的后验概率进行数据的分类。
基于图论的方法首先估计每个点的密度梯度值,生成方向树,然后通过查找密度函数的谷点来实现数据的分类。
最近有学者提出了基于遗传算法的聚类方法[6],这种方法采用了均值算法的基本思想,所不同的是它使用遗传算法而不K-是一般的迭代来进行聚类划分的优化。
一种基于遗传算法的聚类集成方法
o n Ge n e t i c Al g o r i t h m( CE GA) , wh i c h d o e s n o t n e e d t o c o n s i d e r t h e d i f f e r e n c e s b e t we e n c l u s t e r i n g c o mp o n e n t s , b u t t r a n s l a t e s
上 海海事 大学 信 息工程 学 院 , 上海 2 0 1 3 0 6
Co l l e g e o f I n f o r ma t i o n En g i n e e r i n g , S h a n g h a i Ma r i t i me Un i v e r s i t y , S h a n g h a i 2 0 1 3 0 6 , Ch i n a
WANG B i n g j i n g , GAO Ma o t i n g . Ne w mo d e l f o r c l u s t e r i n g e n s e mb l e b a s e d o n g e n e t i c a l g o r i t h ms . Co mp u t e r E n g i n e e r i n g
a n d Ap p l i c a t i o n s , 2 0 1 3 , 4 9 ( 8 ) : 1 6 4 — 1 6 8 .
Ab s t r a c t :Cl u s t e r i n g e n s e mb l e a l g o r i t h ms r e q u i r e h i g h e r d i f f e r e n c e s a mo n g c l u s t e r i n g c o mp o n e n t s , wh i c h i n d u c e h i g h e r c o m—
基于遗传算法的K均值聚类分析
基于遗传算法的K均值聚类分析¨计算机科学2003Voi.3DN9,2王敞陈增强袁著祉(南开大学信息技术科学学院天津300071)K-MeansClusteringBasedollGeneticAlgorithmWANGChangCHENZeng—QiangYUANZhu。
Zhi(CollegeoIInformationScienceandTechnology·NankaiUniversity·Tianjin·300071)AbstractThispaperproposesK—Meansclusteringmethodbasedgeneticalgorithm.WecomparemethodwiththetraditionalK—Meansmethodandclusteringmethodbasedonsimplegeneticalgorithm·Thecomparisonprovesthatmethodachievesbetterresultthantheothertwo-Thedrawbackofthismethodiscomparablyslowerspeedinclustering.KeywordsDatamining.Clustering,Geneticalgorithm,K—Meansclustering1前言聚类分析就是将数据对象分组成为多个类或簇.在同一个簇中的对象之问具有较高的相似度,而不同的簇中的对象差别较大.聚类分析目前应用广泛.已经成为数据挖掘主要的研究领域.通过聚类.人们能够识别密集的和稀疏的区域,从而发现数据的整体分布模式,还能找到数据间的有趣的相互关系.关于聚类分析目前已经有K均值,CURE等很多算法,而且在实践中得到了应用.在这里,我们针对应用最为广泛的K均值方法的缺点.提出了基于遗传算法的K均值聚类分析方法.实验表明.新方法在聚类问题中得到的结果全面要优于传统K均值聚类方法,也好于单纯的遗传算法聚类.只是由于用到了遗传操作.聚类速度相对K均值方法要慢一些.2K均值方法的一般描述K均值方法是基于划分的聚类方法.它在目前的聚类分析中应用最为广泛.其基本思想为:对于给定的聚类数目K.首先随机创建一个初始划分.然后采用选代方法通过将聚类中心不断移动来尝试着改进划分.为了达到最优.这种K均值方法理论上应该穷举所有可能的划分.但实际上,这里采用了启发式方法.用每类的平均值来表示诙类.这大大降低了计算的复杂性.提高了运算速度,使处理大规模数据集成为可能。
基于遗传算法的高维数据聚类技术研究
基于遗传算法的高维数据聚类技术研究一、引言随着科技的飞速发展,数据的积累也逐渐变得海量起来。
而大数据中的高维数据因其数据量大、耗时长、难以解释等优势,已经成为了各个领域中的一个热点问题。
在这个背景下,高维数据聚类技术成为了研究的重点之一。
然而,由于维数的增加,传统的聚类方法在效率和准确性上面临着挑战。
为了克服这些问题,研究人员开始尝试利用遗传算法来解决高维数据聚类问题。
二、高维数据聚类技术高维数据聚类技术是数据挖掘领域中的一个重要分支,其目的是将给定的数据集划分为若干个具有相似特征的簇。
聚类算法的效果直接影响着后续的数据处理结果质量,因此如何选择合适的聚类算法成为了研究人员探讨的问题。
传统的聚类算法,如K均值、层次聚类等,其基本思想是将数据集中的对象划分为若干个组,使得组内之间的距离较小,而组间之间的距离较大。
然而,这些方法在处理高维数据时,由于“维数灾难”问题的存在,其效率和准确性急剧下降。
因此,研究人员开始探索利用遗传算法来解决高维数据聚类问题。
三、遗传算法遗传算法是一种模拟自然选择和遗传机制的计算机算法。
它模拟了生物进化过程中的“适者生存,不适者淘汰”的规则,可以用于解决复杂的优化问题。
遗传算法通常包括以下步骤:1.初始化种群2.选择操作3.交叉操作4.变异操作5.重复2-4步骤,直到达到预设终止条件四、基于遗传算法的高维数据聚类技术在基于遗传算法的高维数据聚类技术中,每个染色体代表一个簇划分方案,其中每个基因代表数据点在该簇中的类别。
遗传算法的目的是通过基因的组合和变异,找到一组最优的簇划分方案。
通过遗传算法对高维数据进行聚类,可以实现以下优点:1. 不需要事先指定聚类个数传统的聚类算法需要事先指定聚类个数,但是这个数字很难确定,也可能导致聚类结果不够准确。
而遗传算法不需要指定聚类个数,可以自动选择合适的聚类个数。
2. 可以降低“维数灾难”遗传算法通过初始种群、交叉、变异等操作,可以优化聚类结果,降低“维数灾难”的影响。
基于遗传算法模拟退火算法的聚类算法
基于遗传算法模拟退火算法的聚类算法1. 引言聚类算法是一种将数据分为不同组的常见方法,其主要应用领域包括数据挖掘、模式识别、图像分析等。
常用的聚类算法包括k-means,层次聚类(Hierarchical Clustering)和DBSCAN等。
然而,由于这些算法寻找的是全局最优解,所以在大量数据中具有较高的计算成本和缺乏鲁棒性。
遗传算法(Genetic Algorithm)和模拟退火算法(Simulated Annealing)是两个优化算法。
因此,结合这两种算法的特点,发展了一种基于遗传算法模拟退火算法的聚类算法,用于降低计算成本和提高鲁棒性。
2. 遗传算法遗传算法是一种基于自然界进化过程的优化算法。
该算法利用交叉、突变等操作,对一组可行解进行迭代,以找到满足特定目标的最优解。
在遗传算法中,每个可行解被称为个体(individual),而一个个体由一组适应度函数和一组基因(genotype)组成。
适应度函数描述了个体在解问题方面的能力,并决定了它们如何与其他竞争的个体相比较。
基因用于描述个体的不同特征。
接下来,遗传算法通过选择、交叉和突变等操作,从父代中产生后代,以进一步改进适应度函数。
这个过程迭代进行,直到达到预定的终止条件。
3. 模拟退火算法模拟退火算法是一种基于统计力学的优化算法。
该算法通过一定的概率放大方案,实现从局部最优解到全局最优解的跳跃。
模拟退火算法有三个重要的步骤:初始化状态、状态转移和接受准则。
在此过程中,与温度参数相关的接受准则是关键因素。
此参数会在迭代过程中逐渐降低,直到达到预定的终止条件。
4. 基于遗传算法模拟退火的聚类算法基于遗传算法模拟退火的聚类算法包括以下步骤:a) 定义适应度函数,对比不同局部和全局信息b) 将初始种群分配到不同的簇中,并将每个个体的簇分配向量作为基因描述c) 对于每个个体,使用模拟退火算法来进行内部优化,使得其为局部最优状态d) 基于适应度函数,使用遗传算法对个体之间进行竞争,并从种群中选择出最优的个体来进行繁殖操作e) 通过遗传算法操作,将父代种群中不同的基因进行重组操作,产生后代种群f) 对生成的后代使用模拟退火算法得到全局最优簇,该过程也被称为整合或多样性度量g) 重复步骤d-g,直到达到预定的终止条件5. 结论基于遗传算法模拟退火的聚类算法利用了两种不同的优化算法的优势,具有更好的全局搜索能力和更快的计算速度。
一种基于遗传算法的用户聚类模型的研究
类方 法 , 并给 出详 细介 绍和 实验 数 据 分 析. 因其 具 有 很好 的处 理 局 部极 值 能 力 , 初 始 聚 类 中心 的 选 取 对 以及 样本 的输 人次 序没 有任 何要 求.
( =1 … , . i , Ⅳ) 聚类 的最终 目的是 把 数 据集 划 分
为 K个分 割 C ( =1 … , , 可 能有 些对 象不 属 m , K) 也
Ab ta t sr c :A s rcu t r g c lu ai g mo e a e n g n t l o t m sp t o w r n t i p p r wh c o i i ga a u e l se n ac lt d lb s d o e ei a g r h i u r a d i s a e , ih c mbn n n — i n c i f h ls ft p lg fwe on .T i a e r s n s t e d s n o h o s me n o i g a d g n t p rt n t .i h y e o o oo o b p it h s p p rp e e t h e i f c r mo o s e c dn n e ei o e ai s ec n t e y g c o p o e s o p i z t n r c s fo t miai .T e ag r h s le h r be h t o ma l s rn lo t m a o e lw t h c l x r — o h o t m ov s t ep o lmst a r lcu ti g ag r h c n n t a i t e l a te l i n e i d h o e mu e e t e y a d cu t r g r s l g e t a e n te s lci n o h r i a l s r g c n e s p o e n t i e p f— m f ci l n l se n e u t r al b s d o h ee t ft e o g n lcu ti e tr i r v d i h s x e v i y o i en i me t I i a p a t a g r h n . t s r c i la o i m. c l t Ke r s aa mi i g s rcu trn ;g n t g r h y wo d :d t n n ;u e l s i g e ei a o t m e cl i
基于遗传算法的模糊聚类算法
End for
输出最后一代的最优个体
End
首先,在算法中使用了把聚类中心作为染色体的浮点数编码方式,这样既能使大数据集的编码过程得到简化,又能减少整个算法的运算量;为了保证每一代的进化过程中当前最优个体不会被遗传操作所破坏,所以在进行选择时采用了最优保存策略与比例法相结合的选择算子;在下面的交叉操作中,为了减少无意义个体的产生,先对配对个体进行了基于最短距离的基因匹配,然后再运用算术交叉来增强遗传算法的局部搜索能力;最后,为了提高收敛速度,在每一代遗传操作结束之前对要进入下一代的群体进行了FCM优化,使搜索最优解的速度明显加快。
基于遗传算法的模糊聚类算法
FCM是解决聚类问题的一种方法,它具有很强的代表性及灵敏性,不仅被用于模糊工程的研究中,而且也广泛地应用于其它一些学科的分支。但是该算法在聚类初始化过程中,采用随机方式得到初始聚类中心点,另外还需要人为指定聚类块数c等参数,从而导致了该算法对聚类初始中心点十分敏感,聚类块数需人为指定等缺陷。
我们把改进后的混合算法记为GFGA,其具体的流程如下:
Begin
Initialize
输入样本X,聚类c
设定种群大小N,交叉概率 ,变异概率 ,最大代数maxgen;
编码并随机初始化种群P(0);
fori=1 tomaxgendo
计算群体P(i-1)中各个体的适应度;
对,(i-1)进行选择,交叉,变异,优化,产生下一代种群,P(i);
遗传算法是以自然选择和遗传进化理论为基础,将生物进化过程中适者生存规则与群体内部染色体的随机信息交换机制相结合的搜索法。遗传算法主要包括选择,交叉和变异三个算子,它通过交叉和变异这一对相互配合又相互竞争的操作而使其具备兼顾全局和局部力。与传统的优化算法相比,遗传算法由于能从多个点构成的群体开始搜索,并且不易陷入局部最优点,从而使得它在人工智能、神经网络、机器人等很多领域得到了广泛的应用。利用遗传算法思想对初始聚类中心进行优化选择,来代替FCM算法中随机找到初始点集的方法,克服了FCM算法对聚类中心十分敏感的缺陷。把遗传算法与FCM相结合,既可以发挥遗传算法的全局寻优能力,又可以兼顾FCM的局部寻优能力,同时提高了收敛速度,从而更好地解决聚类问题。
基于遗传算法的聚类分析
遗传 算法是 借鉴 生物 的 自然 选择 和遗 传进 化机 制
殊 知识 , 因此用 遗传 算法求 解 问题 的流程 基本 相 同。
而 开发 出的一种 全局 优化 自适应 概率搜 索 算法 。遗 传 算法 使用 群体搜 索技 术 , 过对 当前群 体施 加选 择 、 通 交 叉 、 异 等 一 系列 遗 传 操 作 , 而 产 生 出新 一 代 的群 变 从 体, 并逐 步使群 体进化 到包含 或 接近最 优解 的状 态 。 由 于其 具有思 想简单 、 实现 、 用 效果 明显 等优点 而被 易 应 众多 应用 领域所 接受 , 在 自适应 控 制 、组合 优化 、 并 模 式识 别 、 管理 决策 等领 域得 到 了广 泛 的应用 。 遗传 算法
苏 良昱 苏 良碧 。
( 许 昌 学院电 气信 息 工程 学院 河 南许 昌
4 1 O )。内蒙古 大学 电子信 息工程 学 院 呼和 浩 特 6 00 (
0 02 ) 1 0 1
遗传算法在数据聚类分析中的应用研究
遗传算法在数据聚类分析中的应用研究随着互联网的发展和大数据时代的到来,数据聚类分析作为一种重要的数据挖掘技术,被广泛应用于各个领域。
而遗传算法作为一种经典的优化算法,具有全局搜索能力和自适应性,在数据聚类分析中也得到了广泛的研究和应用。
遗传算法是一种模拟自然生物遗传和进化机制的优化算法,通过模拟基因的变异、交叉和选择等操作来搜索问题的最优解。
在数据聚类分析中,遗传算法可以被用于选择最优的聚类中心,寻找最佳的聚类划分。
首先,遗传算法可以用于聚类中心的选择。
聚类算法的核心是寻找合适的聚类中心,而传统的方法需要预先指定聚类中心的个数和初始位置。
但在实际应用中,往往很难提前确定好这些参数,尤其是对于复杂的数据集。
而遗传算法可以通过适应度函数来评估聚类效果,通过不断地进化和优化,找到最优的聚类中心。
其次,遗传算法可以用于聚类划分的优化。
在传统的聚类算法中,通常采用距离度量来计算样本之间的相似性,然后根据相似性来进行划分。
而遗传算法可以通过自适应地调整聚类划分的参数,来寻找最佳的聚类结果。
通过不断地优化聚类划分,可以提高聚类的准确性和稳定性。
此外,遗传算法还可以用于聚类结果的后处理。
在聚类分析中,常常会遇到一些噪声和异常点,这些点可能对聚类结果造成影响。
而遗传算法可以通过将噪声点和异常点进行剔除或重新分配,提高聚类结果的鲁棒性和稳定性。
同时,遗传算法还可以根据具体的应用需求,对聚类结果进行进一步的优化和调整,提高聚类的效果和可解释性。
然而,遗传算法在数据聚类分析中也存在一些挑战和问题。
首先,遗传算法的计算复杂度较高,需要较长的计算时间和计算资源。
尤其是在处理大规模数据集时,计算效率有限。
其次,遗传算法的参数设置较为复杂,需要经验和实践的积累。
不同的数据集和问题需要不同的参数设置,这增加了算法的调试和调整难度。
最后,遗传算法的收敛性和稳定性也需要进一步的研究和改进,以提高算法的性能和效果。
综上所述,遗传算法在数据聚类分析中具有重要的应用价值。
论文实战之基于遗传算法的聚类
论⽂实战之基于遗传算法的聚类Genetic algorithm-based clustering technique2015.3.27 使⽤pyevolve数据产⽣%matplotlib inlinefrom scipy.stats import multivariate_normalimport matplotlib.pyplot as pltimport numpy as npmean1 = [10,10]cov1= [[1,0],[0,1]]mean2 = [15,15]cov2= [[1,0],[0,1]]nm1=multivariate_normal(mean1,cov1)nm2=multivariate_normal(mean2,cov2)data1_1=nm1.rvs(5)data1_2=nm2.rvs(5)plt.scatter(data1_1[:,0],data1_1[:,1],c='r')plt.scatter(data1_2[:,0],data1_2[:,1],c='b')data=np.r_[data1_1,data1_2]遗传算法部分⼀开始程序⽼是出错,原因在于初始化的时候是随意的有时候某⼀个类是空的,改进版如下from pyevolve import G1DListfrom pyevolve import GSimpleGAfrom pyevolve import Crossovers,Mutators,Initializators,Selectors,Constsdef form_clusters(x):#extract centers for the genome x#从染⾊体提取各个类的中⼼,例如,4维两个mean1 = [10,10]centers=[np.array([x[i*N+j] for j in range(N)]) for i in range(K)]#create empty clustersclusters=[[] for i in range(K)]#cacluate score values respect to each center for each data#距离矩阵,数据个数*类数,即每个数据相对于每⼀个类的距离clustMatrix=np.zeros((len(data),K))#data得是array!for i,d in enumerate(data):for j,c in enumerate(centers):#print i,j,'d',d,d.shape,'\n','c',c,c.shape#print 'd%d'%i,d,'\n','c%d'%j,cclustMatrix[i,j]=np.linalg.norm(d-c)#print clustMatrix#the index of the minumum for each column#最近的中⼼:⼀个array,长度等于数据个数closestIndex=np.argmin(clustMatrix,axis=1)#print closestIndex#根据最近中⼼,将数据分类for i,d in enumerate(data):clusters[closestIndex[i]].append(d)#重新计算聚类中⼼:N*Knew_centers=[np.average(np.array(clusters[i]),axis=0) for i in range(K)]#print '0',new_centersfor i,c in enumerate(new_centers):if np.isnan(c).any():new_centers[i]=centers[i]#print '1',new_centersreturn new_centers,clusterspF=0def eval_func(x):global pF;if pF==0:pF=1for i in range(K):for j in range(N):tmp=data[np.random.randint(0,len(data))]x[i*N+j]=tmp[j]#将数据重新分类centers,clusters=form_clusters(x)#将聚类中⼼赋给染⾊体xfor i,c in enumerate(np.array(centers).ravel()):x[i]=c#计算fitnesss=0for i in range(K):#print 'clusters[%d]'%i,np.array(clusters[i])#print 'centers[%d]'%i,np.array(centers[i])if clusters[i]!=[]:#print 'clusters[i]',clusters[i]#print np.isnull(clusters[i]).any()s=s+np.linalg.norm(np.array(clusters[i])-np.array(centers[i])).sum()#使⽤了broadcast return 1./sN=2#num of dimensionsK=2#num of clustersConsts.CDefGACrossoverRate=0.8Consts.CDefGAMutationRate=0.001Consts.CDefGAPopulationSize=2Consts.CDefGAGenerations=100genome=G1DList.G1DList(N*K)#data in genome:N values for each cluster Kgenome.initializator.set(Initializators.G1DListInitializatorReal)genome.evaluator.set(eval_func)#genome.mutator.set(Mutators.G1DListMutatorRealRange)genome.mutator.set(Mutators.G1DListMutatorRealGaussian)genome.crossover.set(Crossovers.G1DListCrossoverSinglePoint)ga = GSimpleGA.GSimpleGA(genome)ga.selector.set(Selectors.GRouletteWheel)ga.evolve(20)输出:Gen. 0 (0.00%): Max/Min/Avg Fitness(Raw) [0.13(0.13)/0.09(0.09)/0.11(0.11)]Gen. 20 (20.00%): Max/Min/Avg Fitness(Raw) [0.21(0.21)/0.21(0.21)/0.21(0.21)]Gen. 40 (40.00%): Max/Min/Avg Fitness(Raw) [0.21(0.21)/0.21(0.21)/0.21(0.21)]Gen. 60 (60.00%): Max/Min/Avg Fitness(Raw) [0.21(0.21)/0.21(0.21)/0.21(0.21)]Gen. 80 (80.00%): Max/Min/Avg Fitness(Raw) [0.21(0.21)/0.21(0.21)/0.21(0.21)]Gen. 100 (100.00%): Max/Min/Avg Fitness(Raw) [0.21(0.21)/0.21(0.21)/0.21(0.21)]Total time elapsed: 1.062 seconds.1/0.21⼤概是4.761904761904762,与论⽂⾥提到的误差2.22差的太远了2015.3.29 使⽤deap%matplotlib inlinefrom scipy.stats import multivariate_normalimport matplotlib.pyplot as pltimport numpy as npfrom deap import base,creator,toolsimport randommean1 = [10,10]cov1= [[1,0],[0,1]]mean2 = [15,15]cov2= [[1,0],[0,1]]nm1=multivariate_normal(mean1,cov1)nm2=multivariate_normal(mean2,cov2)data1_1=nm1.rvs(5)data1_2=nm2.rvs(5)data=np.r_[data1_1,data1_2]plt.scatter(data1_1[:,0],data1_1[:,1],c='r')plt.scatter(data1_2[:,0],data1_2[:,1],c='b')N=2#num of dimensionsK=2#num of clustersdata=datatoolbox=base.Toolbox()creator.create('maxFit',base.Fitness,weights=(-1,))creator.create('Individual',list,fitness=creator.maxFit)def initCenter():return data[random.sample(range(len(data)),1),:].ravel()toolbox.register('individual',tools.initRepeat,creator.Individual,initCenter,K)toolbox.register("population", tools.initRepeat, list, toolbox.individual)def form_clusters(x):#染⾊体由K个聚类中⼼组成centers=toolbox.clone(x)#create empty clustersclusters=[[] for i in range(K)]#cacluate score values respect to each center for each data#距离矩阵,数据个数*类数,即每个数据相对于每⼀个类的距离clustMatrix=np.zeros((len(data),K))#data得是array!for i,d in enumerate(data):for j,c in enumerate(centers):clustMatrix[i,j]=np.linalg.norm(d-c)#print clustMatrix#the index of the minumum for each column#最近的中⼼:⼀个array,长度等于数据个数closestIndex=np.argmin(clustMatrix,axis=1)#print closestIndex#根据最近中⼼,将数据分类for i,d in enumerate(data):clusters[closestIndex[i]].append(d)#重新计算聚类中⼼:N*Knew_centers=[np.average(np.array(clusters[i]),axis=0) for i in range(K)]#print '0',new_centers#下⾯是处理某⼀类为空的情况,将其变成上⼀次的值for i,c in enumerate(new_centers):if np.isnan(c).any():new_centers[i]=centers[i]#print '1',new_centersreturn new_centers,clustersdef evaluate(x):#将数据重新分类centers,clusters=form_clusters(x)#将聚类中⼼赋给染⾊体xx=toolbox.clone(centers)#计算fitnesss=0for i in range(K):if clusters[i]!=[]:s=s+np.linalg.norm(np.array(clusters[i])-np.array(centers[i])).sum()#使⽤了broadcastreturn s,toolbox.register("evaluate", evaluate)toolbox.register("mate", tools.cxOnePoint)toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.1)toolbox.register("select", tools.selTournament, tournsize=2)def test():pop=toolbox.population(n=10)CXPB, MUTPB, NGEN = 0.8, 0.001, 100fitness=map(toolbox.evaluate,pop)for p,f in zip(pop,fitness):p.fitness.values=ffor g in range(NGEN):offspring=map(toolbox.clone,toolbox.select(pop,len(pop)))for child1,child2 in zip(offspring[::2],offspring[1::2]):if random.random() < CXPB:toolbox.mate(child1,child2)del child1.fitness.valuesdel child2.fitness.valuesfor mutant in offspring:if random.random() < MUTPB:toolbox.mutate(mutant)del mutant.fitness.valuesinvalid_ind = [ind for ind in offspring if not ind.fitness.valid]fitnesses = map(toolbox.evaluate, invalid_ind)for ind, fit in zip(invalid_ind, fitnesses):ind.fitness.values = fitpop[:] = offspringreturn poppop=test()map(toolbox.evaluate,pop)选择⽅法tools.selTournament,fitness返回的是误差之和s,权值为-1,输出:[(6.2601100607661895,),⽐pyevolve的⼤奇怪的是,⽆论初始总体是1还是10,误差都是这么⼤选择⽅法换为toolbox.register("select", tools.selRoulette),fitness返回的是误差之和s,权值为-1,最终误差不太稳定,⼀般为10.56807481420261选择⽅法:toolbox.register("select", tools.selRoulette)更改权值creator.create('maxFit',base.Fitness,weights=(1,))变为+1,前两种情况,权值为-1,fitness返回的是误差之和s 现在权值为1,fitness返回return 1./s输出变为0.15974160043403576,倒数(误差)为6.2601100607661895,可见selRoulette的时候要⼩⼼啊2015.3.29更新:>>> import numpy>>> a = numpy.array([1,2,3,4])>>> b = numpy.array([5,6,7,8])>>> a[1:3], b[1:3] = b[1:3].copy(), a[1:3].copy()>>> print(a)[1 6 7 4]>>> print(b)[5 2 3 8]将相应部分的代码变为def cxOnePoint(ind1, ind2):size = len(ind1)cxpoint = 1ind1[cxpoint],ind2[cxpoint]=ind2[cxpoint].copy(),ind1[cxpoint].copy()toolbox.register("mate", cxOnePoint)因为我现在只有两个聚类中⼼,即每⼀个个体其实只有俩元素,每⼀个都是np的array,因此我就直接交换后⼀个array,即后⼀个类的聚类中⼼总体有三个个体结果[(0.30239333776854554,1/0.30239333776854554=3.306951162943307很接近paper中的2.225498了2015.3.29继续更新:将变异和paper中的⼀样def mute(ind):for d in ind:delta=random.random()if delta<=0.5:d=d*(1+2*delta)else :d=d*(1-2*delta)print 'I m in mutation!'toolbox.register("mutate", mute)结果还是3.306951162943307现在将遗传算法部分整理如下N=2#num of dimensionsK=2#num of clustersdata=datatoolbox=base.Toolbox()creator.create('maxFit',base.Fitness,weights=(1,))creator.create('Individual',list,fitness=creator.maxFit)def initCenter():return data[random.sample(range(len(data)),1),:].ravel()toolbox.register('individual',tools.initRepeat,creator.Individual,initCenter,K)toolbox.register("population", tools.initRepeat, list, toolbox.individual)def form_clusters(x):#染⾊体由K个聚类中⼼组成centers=toolbox.clone(x)#create empty clustersclusters=[[] for i in range(K)]#cacluate score values respect to each center for each data#距离矩阵,数据个数*类数,即每个数据相对于每⼀个类的距离clustMatrix=np.zeros((len(data),K))#data得是array!for i,d in enumerate(data):for j,c in enumerate(centers):clustMatrix[i,j]=np.linalg.norm(d-c)#print clustMatrix#the index of the minumum for each column#最近的中⼼:⼀个array,长度等于数据个数closestIndex=np.argmin(clustMatrix,axis=1)#print closestIndex#根据最近中⼼,将数据分类for i,d in enumerate(data):clusters[closestIndex[i]].append(d)#重新计算聚类中⼼:N*Knew_centers=[np.average(np.array(clusters[i]),axis=0) for i in range(K)]#print '0',new_centers#下⾯是处理某⼀类为空的情况,将其变成上⼀次的值for i,c in enumerate(new_centers):if np.isnan(c).any():new_centers[i]=centers[i]#print '1',new_centersreturn new_centers,clustersdef evaluate(x):#将数据重新分类centers,clusters=form_clusters(x)#将聚类中⼼赋给染⾊体xx=toolbox.clone(centers)#计算fitnesss=0for i in range(K):if clusters[i]!=[]:s=s+np.linalg.norm(np.array(clusters[i])-np.array(centers[i])).sum()#使⽤了broadcastreturn 1./s,toolbox.register("evaluate", evaluate)def cxOnePoint(ind1, ind2):size = len(ind1)cxpoint = 1ind1[cxpoint],ind2[cxpoint]=ind2[cxpoint].copy(),ind1[cxpoint].copy()toolbox.register("mate", cxOnePoint)def mute(ind):for d in ind:delta=random.random()if delta<=0.5:d=d*(1+2*delta)else :d=d*(1-2*delta)print 'I m in mutation!'toolbox.register("mutate", mute)toolbox.register("select", tools.selRoulette)def test():pop=toolbox.population(n=4)CXPB, MUTPB, NGEN = 0.8, 0.001, 100fitness=map(toolbox.evaluate,pop)for p,f in zip(pop,fitness):p.fitness.values=ffor g in range(NGEN):offspring=map(toolbox.clone,toolbox.select(pop,len(pop)))for child1,child2 in zip(offspring[::2],offspring[1::2]):if random.random() < CXPB:toolbox.mate(child1,child2)del child1.fitness.valuesdel child2.fitness.valuesfor mutant in offspring:if random.random() < MUTPB:toolbox.mutate(mutant)del mutant.fitness.valuesinvalid_ind = [ind for ind in offspring if not ind.fitness.valid]fitnesses = map(toolbox.evaluate, invalid_ind)for ind, fit in zip(invalid_ind, fitnesses):ind.fitness.values = fitpop[:] = offspringreturn poppop=test()map(toolbox.evaluate,pop)2015.3.30更新:3个聚类中⼼的情况,⾼斯分布产⽣的⼆维数据变化点:由于染⾊体中的每⼀个元素其实都是⼀个两元素的array,因此我也不把他们放到list⾥了,⼲脆都放到np的array⾥边creator.create('Individual',np.ndarray,fitness=creator.maxFit)交叉:def cxOnePoint(ind1, ind2):size = len(ind1)cxpoint = random.randint(1,size-1)#Return a random integer N such that a <= N <= bind1[cxpoint:],ind2[cxpoint:]=ind2[cxpoint:].copy(),ind1[cxpoint:].copy()toolbox.register("mate", cxOnePoint)数据部分:%matplotlib inlinefrom scipy.stats import multivariate_normalimport matplotlib.pyplot as pltimport numpy as npfrom deap import base,creator,toolsimport randommean1 = [10,10]cov1= [[1,0],[0,1]]mean2 = [15,15]cov2= [[1,0],[0,1]]mean3 = [20,20]cov3= [[1,0],[0,1]]nm1=multivariate_normal(mean1,cov1)nm2=multivariate_normal(mean2,cov2)nm3=multivariate_normal(mean3,cov3)data1_1=nm1.rvs(25)data1_2=nm2.rvs(35)data1_3=nm3.rvs(10)data=np.r_[data1_1,data1_2,data1_3]plt.scatter(data1_1[:,0],data1_1[:,1],c='r')plt.scatter(data1_2[:,0],data1_2[:,1],c='b')plt.scatter(data1_3[:,0],data1_3[:,1],c='y')遗传算法部分N=2#num of dimensionsK=3#num of clustersdata=datatoolbox=base.Toolbox()creator.create('maxFit',base.Fitness,weights=(1,))creator.create('Individual',np.ndarray,fitness=creator.maxFit)def initCenter():return data[random.sample(range(len(data)),1),:].ravel()toolbox.register('individual',tools.initRepeat,creator.Individual,initCenter,K)toolbox.register("population", tools.initRepeat, list, toolbox.individual)def form_clusters(x):#染⾊体由K个聚类中⼼组成centers=toolbox.clone(x)#create empty clustersclusters=[[] for i in range(K)]#cacluate score values respect to each center for each data#距离矩阵,数据个数*类数,即每个数据相对于每⼀个类的距离clustMatrix=np.zeros((len(data),K))#data得是array!for i,d in enumerate(data):for j,c in enumerate(centers):clustMatrix[i,j]=np.linalg.norm(d-c)#print clustMatrix#the index of the minumum for each column#最近的中⼼:⼀个array,长度等于数据个数closestIndex=np.argmin(clustMatrix,axis=1)#print closestIndex#根据最近中⼼,将数据分类for i,d in enumerate(data):clusters[closestIndex[i]].append(d)#重新计算聚类中⼼:N*Knew_centers=[np.average(np.array(clusters[i]),axis=0) for i in range(K)]#print '0',new_centers#下⾯是处理某⼀类为空的情况,将其变成上⼀次的值for i,c in enumerate(new_centers):if np.isnan(c).any():new_centers[i]=centers[i]#print '1',new_centersreturn new_centers,clustersdef evaluate(x):#将数据重新分类centers,clusters=form_clusters(x)#将聚类中⼼赋给染⾊体xx=toolbox.clone(centers)#计算fitnesss=0for i in range(K):if clusters[i]!=[]:s=s+np.linalg.norm(np.array(clusters[i])-np.array(centers[i])).sum()#使⽤了broadcast return 1./s,toolbox.register("evaluate", evaluate)def cxOnePoint(ind1, ind2):size = len(ind1)cxpoint = random.randint(1,size-1)#Return a random integer N such that a <= N <= bind1[cxpoint:],ind2[cxpoint:]=ind2[cxpoint:].copy(),ind1[cxpoint:].copy()toolbox.register("mate", cxOnePoint)def mute(ind):for d in ind:delta=random.random()if delta<=0.5:d=d*(1+2*delta)else :d=d*(1-2*delta)print 'I m in mutation!'toolbox.register("mutate", mute)toolbox.register("select", tools.selRoulette)def test():pop=toolbox.population(n=10)CXPB, MUTPB, NGEN = 0.8, 0.001, 100fitness=map(toolbox.evaluate,pop)for p,f in zip(pop,fitness):p.fitness.values=ffor g in range(NGEN):offspring=map(toolbox.clone,toolbox.select(pop,len(pop)))for child1,child2 in zip(offspring[::2],offspring[1::2]):if random.random() < CXPB:toolbox.mate(child1,child2)del child1.fitness.valuesdel child2.fitness.valuesfor mutant in offspring:if random.random() < MUTPB:toolbox.mutate(mutant)del mutant.fitness.valuesinvalid_ind = [ind for ind in offspring if not ind.fitness.valid]fitnesses = map(toolbox.evaluate, invalid_ind)for ind, fit in zip(invalid_ind, fitnesses):ind.fitness.values = fitpop[:] = offspringreturn poppop=test()1./np.array(max(map(toolbox.evaluate,pop)))结果array([ 21.98945422])2015.3.30更新:3个聚类中⼼的情况,iris数据集产⽣的4维数据数据部分%matplotlib inlineimport matplotlib.pyplot as pltimport numpy as npfrom deap import base,creator,toolsimport randomfrom sklearn import datasetsiris = datasets.load_iris()遗传算法部分由于和上⼀⼩节2015.3.30更新:3个聚类中⼼的情况⼀样,因此只改动了⼀⾏代码data=iris.data此时总体仍为10个pop=toolbox.population(n=10)结果array([ 15.21805375])总体为5时为array([ 19.4343661])低于paper中的数据97.10077初步猜测性能变好的原因是:paper中的变异部分:If the value at a gene position is v,after mutation it becomes v(1+或-2delta)也就是对于染⾊体中的每⼀个坐标不管是x或y,都是单独变异的,⽽我的是⼀个聚类中⼼⼀起变异的!原算法:def mute(ind):for d in ind:delta=random.random()if delta<=0.5:d=d*(1+2*delta)else :d=d*(1-2*delta)print 'I m in mutation!'def mute(ind):for d in ind:for x in d:delta=random.random()if delta<=0.5:x=x*(1+2*delta)else :x=x*(1-2*delta)print 'I m in mutation!'toolbox.register("mutate", mute)实测两种⽅法下均变异了两次,聚类中⼼’整个‘变异,就是第⼀种情况结果array([ 15.71670705])第⼆种情况,分别变异结果:array([ 15.47171319])我汗,果然还是paper中的⽅法⽜,我再增⼤⼀下变异概率试试,都从0.001变为0.1第⼀种array([ 15.07933766])第⼆种array([ 15.3066149])此时第⼀种⼜略好了!最终版代码:N=4#num of dimensions这个维度信息其实没有⽤到K=3#num of clustersdata=iris.datatoolbox=base.Toolbox()creator.create('maxFit',base.Fitness,weights=(1,))creator.create('Individual',np.ndarray,fitness=creator.maxFit)def initCenter():return data[random.sample(range(len(data)),1),:].ravel()toolbox.register('individual',tools.initRepeat,creator.Individual,initCenter,K)toolbox.register("population", tools.initRepeat, list, toolbox.individual)def form_clusters(x):#染⾊体由K个聚类中⼼组成centers=toolbox.clone(x)#create empty clustersclusters=[[] for i in range(K)]#cacluate score values respect to each center for each data#距离矩阵,数据个数*类数,即每个数据相对于每⼀个类的距离clustMatrix=np.zeros((len(data),K))#data得是array!for i,d in enumerate(data):for j,c in enumerate(centers):clustMatrix[i,j]=np.linalg.norm(d-c)#print clustMatrix#the index of the minumum for each column#最近的中⼼:⼀个array,长度等于数据个数closestIndex=np.argmin(clustMatrix,axis=1)#print closestIndex#根据最近中⼼,将数据分类for i,d in enumerate(data):clusters[closestIndex[i]].append(d)#重新计算聚类中⼼:N*Knew_centers=[np.average(np.array(clusters[i]),axis=0) for i in range(K)]#print '0',new_centers#下⾯是处理某⼀类为空的情况,将其变成上⼀次的值for i,c in enumerate(new_centers):if np.isnan(c).any():new_centers[i]=centers[i]#print '1',new_centersreturn new_centers,clustersdef evaluate(x):#将数据重新分类centers,clusters=form_clusters(x)#将聚类中⼼赋给染⾊体xx=toolbox.clone(centers)#计算fitnesss=0for i in range(K):if clusters[i]!=[]:s=s+np.linalg.norm(np.array(clusters[i])-np.array(centers[i])).sum()#使⽤了broadcastreturn 1./s,toolbox.register("evaluate", evaluate)def cxOnePoint(ind1, ind2):size = len(ind1)cxpoint = random.randint(1,size-1)#Return a random integer N such that a <= N <= bind1[cxpoint:],ind2[cxpoint:]=ind2[cxpoint:].copy(),ind1[cxpoint:].copy()toolbox.register("mate", cxOnePoint)def mute(ind):for d in ind:delta=random.random()if delta<=0.5:x=x*(1+2*delta)else :x=x*(1-2*delta)print 'I m in mutation!'toolbox.register("mutate", mute)toolbox.register("select", tools.selRoulette)def test():pop=toolbox.population(n=10)CXPB, MUTPB, NGEN = 0.8, 0.001, 100fitness=map(toolbox.evaluate,pop)for p,f in zip(pop,fitness):p.fitness.values=ffor g in range(NGEN):offspring=map(toolbox.clone,toolbox.select(pop,len(pop))) for child1,child2 in zip(offspring[::2],offspring[1::2]):if random.random() < CXPB:toolbox.mate(child1,child2)del child1.fitness.valuesdel child2.fitness.valuesfor mutant in offspring:if random.random() < MUTPB:toolbox.mutate(mutant)del mutant.fitness.valuesinvalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = map(toolbox.evaluate, invalid_ind)for ind, fit in zip(invalid_ind, fitnesses):ind.fitness.values = fitpop[:] = offspringreturn poppop=test()1./np.array(max(map(toolbox.evaluate,pop)))。
基于遗传算法的聚类分析
* 2010-11-21收到,2010-12-29改回** 苏良昱,男,1979年生,硕士,研究方向:人工神经网络的应用研究。
文章编号:1003-5850(2011)02-0007-03基于遗传算法的聚类分析Cluster Analysis based on Genetic Algorithm苏良昱1 苏良碧2(1许昌学院电气信息工程学院 河南许昌 461000)(2内蒙古大学电子信息工程学院 呼和浩特 010021)【摘 要】遗传算法是一种模拟自然进化的优化搜索算法,它仅依靠适应度函数就可以搜索最优解。
介绍了一种基于遗传算法的聚类分析方法,采用浮点数编码方式对聚类的中心进行编码,并用特征向量与相应聚类中心的欧氏距离的和来判断聚类划分的质量,通过选择、交叉和变异操作对聚类中心的编码进行优化,得到使聚类划分效果最好的聚类中心。
实验结果显示,该方法的聚类划分能得到比较满意的效果。
【关键词】遗传算法,聚类,适应度函数,GA中图分类号:T P 301.6文献标识码:AABSTRACT G enetic A lgo rit hm is a optimized sea rch appro ach which simulates the natura l evolutio n,it can sear ch the optimal solutio n only by fitness f unctio n.T his pa per int ro duce a cluster analysis alg or ithm w hich base o n GA ,it uses floating-po int enco ding metho d to enco de t he center of the cluster ,and use Euclidean dista nce betw een the feature v ector and the co r responding cluster center to determine the quality of cluster ing,it o pt imizes the enco ding of the cluster center s by selection,cro sso ver and mutation opera tio ns ,it can o btain t he cluster center s w hich can make the best clust er ing .Exper imental r esults sho w that clustering use t his method can r each sa tisfied result s.KEYWORDS g enetic algo rithm,cluster ,fitness functio n,G A 遗传算法是借鉴生物的自然选择和遗传进化机制而开发出的一种全局优化自适应概率搜索算法。
基于遗传算法的模糊聚类研究及其应用的开题报告
基于遗传算法的模糊聚类研究及其应用的开题报告开题报告:一、选题背景随着信息技术和计算机科学的发展,数据处理和分析已成为现代社会中极其重要的一个领域。
在信息时代,数据的规模和复杂性越来越大,传统的数据挖掘和聚类算法难以胜任这个任务,因此需寻找新的方法解决这个问题。
模糊聚类算法是一种基于模糊思想的聚类方法,它在处理模糊信息方面表现出很好的效果。
而遗传算法则是模拟自然界进化而来的一种算法,能够在大规模的搜索问题中快速寻找最优解。
两者结合可以有效地解决大规模模糊聚类问题。
二、研究目的本研究旨在探索基于遗传算法的模糊聚类算法,研究其原理、特点、优化方法及其应用,进一步提高模糊聚类算法的效率和准确性,为实际应用提供支持。
具体目的如下:1.深入了解遗传算法的基本原理和聚类算法的基本原理;2.掌握遗传算法在模糊聚类中的应用方法;3.研究基于遗传算法的模糊聚类算法的特点和优势;4.分析遗传算法的优化技术在基于模糊聚类算法中的应用;5.通过实验验证基于遗传算法的模糊聚类算法的性能。
三、研究内容1. 模糊聚类算法的基本原理及其常见方法;2. 遗传算法的基本原理及其应用方法;3. 基于遗传算法的模糊聚类算法的设计与实现;4. 基于真实数据的实验验证及分析;5. 对研究结果进行总结和评估。
四、预期成果1. 实现基于遗传算法的模糊聚类算法,并比较不同算法在效率和准确性上的差异;2. 对算法性能进行实验分析和评估,验证算法有效性;3. 发表学术论文1-2篇。
五、研究方法及技术路线本研究采用实验研究方法,通过对不同聚类算法的比较和分析,选定适合基于遗传算法的模糊聚类算法,并在真实数据上进行试验验证其性能。
研究的技术路线如下:1. 研究模糊聚类算法的基本原理,比较传统聚类算法的优缺点;2. 研究遗传算法的原理和应用方法,分析其在模糊聚类中的作用;3. 对基于遗传算法的模糊聚类算法进行研究和设计,构建算法模型;4. 使用真实数据进行实验,比较不同算法的性能,评估其优缺点;5. 进行研究总结,并撰写相关学术论文。
基于遗传算法的模糊聚类技术研究及应用的开题报告
基于遗传算法的模糊聚类技术研究及应用的开题报告一、研究背景及意义随着信息技术的发展和产业智能化的推进,大量的数据被不断地产生和积累。
在这样的背景下,数据挖掘技术愈加成为信息处理的核心。
而聚类算法是其中的重要一块。
模糊聚类是一种新兴的聚类方法,与传统的硬聚类不同,它允许数据属于多个簇,更符合实际情况。
但是在实际应用中,模糊聚类算法存在收敛速度慢、易陷入局部最优解的问题。
为了解决这一问题,本文拟研究基于遗传算法的模糊聚类技术。
遗传算法是一种基于自然界的演化规律进行搜索的优化算法,具有自适应、分布式、并行化等特点。
结合模糊聚类算法,可以快速寻找最优解,提高聚类效率和准确度。
本文旨在对基于遗传算法的模糊聚类技术进行深入研究,探究其在数据挖掘领域中的应用,提高数据处理效率和质量,为研究者提供一种有效的数据分析手段。
二、研究内容及方法1、研究内容(1)模糊聚类算法的原理和应用。
(2)遗传算法的原理及模糊聚类中的应用。
(3)基于遗传算法进行模糊聚类技术的研究及改进。
(4)基于实验数据对模糊聚类算法进行模拟和测试。
(5)改进后的模糊聚类算法在实际应用中的验证及效果评估。
2、研究方法(1)文献资料法:对模糊聚类算法和遗传算法的相关文献进行阅读,深入了解它们的基本原理和应用范围。
(2)实验仿真法:利用MATLAB等工具对基于遗传算法的模糊聚类算法进行仿真实验,从数据的角度验证其效果。
(3)比较研究法:将改进后的基于遗传算法的模糊聚类算法与其他聚类算法进行比较,评估其优劣。
三、预期成果及创新点1、预期成果(1)深入研究基于遗传算法的模糊聚类算法,并从理论和实践角度进行探究。
(2)针对模糊聚类算法的收敛速度慢、易陷入局部最优解等问题,提出改进措施,提高算法效率和准确度。
(3)基于实验数据对改进后的算法进行模拟和测试,验证其效果。
(4)将改进后的算法在实际应用中进行验证,并评估其效果。
2、创新点(1)将遗传算法与模糊聚类算法相结合,开创新的算法研究方向。
一种基于遗传算法的Kmeans聚类算法
一种基于遗传算法的K-means聚类算法一种基于遗传算法的K-means聚类算法摘要:传统K-means算法对初始聚类中心的选取和样本的输入顺序非常敏感,容易陷入局部最优。
针对上述问题,提出了一种基于遗传算法的K-means聚类算法GKA,将K-means算法的局部寻优能力与遗传算法的全局寻优能力相结合,通过多次选择、交叉、变异的遗传操作,最终得到最优的聚类数和初始质心集,克服了传统K-means 算法的局部性和对初始聚类中心的敏感性。
关键词:遗传算法;K-means;聚类聚类分析是一个无监督的学习过程,是指按照事物的某些属性将其聚集成类,使得簇间相似性尽量小,簇内相似性尽量大,实现对数据的分类[1]。
聚类分析是数据挖掘技术的重要组成部分,它既可以作为独立的数据挖掘工具来获取数据库中数据的分布情况,也可以作为其他数据挖掘算法的预处理步骤。
聚类分析已成为数据挖掘主要的研究领域,目前已被广泛应用于模式识别、图像处理、数据分析和客户关系管理等领域中。
K-means算法是聚类分析中一种基本的划分方法,因其算法简单、理论可靠、收敛速度快、能有效处理较大数据而被广泛应用,但传统的K-means算法对初始聚类中心敏感,容易受初始选定的聚类中心的影响而过早地收敛于局部最优解,因此亟需一种能克服上述缺点的全局优化算法。
遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化搜索算法。
在进化过程中进行的遗传操作包括编码、选择、交叉、变异和适者生存选择。
它以适应度函数为依据,通过对种群个体不断进行遗传操作实现种群个体一代代地优化并逐渐逼近最优解。
鉴于遗传算法的全局优化性,本文针对应用最为广泛的K-means方法的缺点,提出了一种基于遗传算法的K-means聚类算法GKA(Genetic K-means Algorithm),以克服传统K-means算法的局部性和对初始聚类中心的敏感性。
用遗传算法求解聚类问题,首先要解决三个问题:(1)如何将聚类问题的解编码到个体中;(2)如何构造适应度函数来度量每个个体对聚类问题的适应程度,即如果某个个体的编码代表良好的聚类结果,则其适应度就高;反之,其适应度就低。
基于遗传算法的模糊聚类方法
收稿日期:2004205230.作者简介:许松荣(19792),男,硕士研究生;厦门,厦门大学计算机与信息工程学院(361005).E 2mail:xsr abc@基于遗传算法的模糊聚类方法许松荣(厦门大学计算机与信息工程学院,福建厦门361005)摘要:针对模糊c 2均值算法容易收敛于局部极小点的缺陷,将遗传算法应用于模糊c 2均值算法的优化计算中.算法采用实数编码,提高了试验精度.实验证明基于遗传算法的模糊聚类方法能够在一定程度上克服初值的影响,跳出局部极小点,在大样本的聚类方面有较大的优势.关 键 词:聚类;模糊c 2均值算法;遗传算法中图分类号:TP391 文献标识码:A 文章编号:167124512(2004)S120217203The fuzzy clustering method based on genetic arithmeticXu SongrongAbstr act:This paper applies genetic arithmetic to optimization of the fuzzy c 2mean arithmetic since the fuzzy c 2mean arithmetic has the limitation of converging to the local infinitesimal point.The arithmetic adopts the real code and thus increases the precision of the experiments.The experiments prove that the fuzzy c 2means arithmetic based on genetic arithmetic can overcome the influence of initial values and possess the predominance in the clustering of huge samples.Key words:clustering;fuzzy c 2mean arithmetic;genetic arithmeticXu Songr ong Postgraduate;Computer &Information Engineering College,Xiamen U niversity.Fujian,Xiamen 361005,China. 聚类[1]是根据数据的不同特征,将其划分为不同的数据类.聚类的目的是使得属于同一类别的个体之间的距离尽可能地小,而不同类别上的个体间的距离尽可能地大.聚类方法包括统计方法、机器学习方法、神经网络方法等.模糊聚类方法具有简便易行,聚类效果较好的优点,在实际应用中获得广泛的运用.但是普通的模糊聚类易于陷入局部极小点而不能搜索到全局的聚类中心.而遗传算法作为一种新型的进化优化算法,可以概率地在状态空间搜索最佳点,特别适合于非线性多峰值的函数优化问题.1 普通的模糊聚类方法模糊聚类是将样本空间X ={x 1,x 2,,,x n }的样本点分成c 类,任意一个样本点x i I X 几乎不可能被严格地划分给某一类,定义样本点x i 属于第j (1[j [c)类的程度w ij (0[w i j [1).样本空间X 的模糊聚类用模糊矩阵W =(w ij )描述,元素w ij 是矩阵W 的第i 行第j 列元素,代表第i 个样本点隶属于第j 类的隶属度.W 具有以下性质:w ij I [0,1];(1)E c j=1w ij =1;(2)0<E n i =1w ij <n.(3)为了计算各个样本点相对于聚类中心的隶属度,一般采用FCM 算法.定义目标函数:J m (W ,Z )=E ni =1E cj =1w ij d 2ij (x i ,z j ),Z =(z 1,z 2,,,z c ),其中z j 表示第j 类的聚类中心,d 2ij (x i ,z j )=+x i -z j +是样本点x i 到聚类中心z j 的欧氏距离.聚类即是求目标函数在式(1)~(3)约束下的第32卷增刊 华 中 科 技 大 学 学 报(自然科学版) Vol.32 Sup.2004年 10月J.Huazhong Univ.of Sci.&Tech.(Nature Science Edition)Oct.2004最小值.FCM 算法通过对目标函数的迭代优化来取得对样本集的模糊分类.具体算法参见文献[2].该算法对初值敏感,很大程度上依赖初始聚类中心的选择,当初始聚类中心严重偏离全局最优聚类中心时,用FCM 很可能陷入局部极小值.当聚类数目较大时,该缺点更为明显.2 基于遗传算法的模糊聚类方法遗传算法[3]是基于/优胜劣汰、适者生存0的一种高度并行、随机和自适应的全局优化算法.它从某一随机种群出发,按照一定的操作规则,根据每一个个体的适应度,存优去劣,引导搜索过程向最优解逼近.遗传算法不要求连续、可微等条件,具有较强的鲁棒性.对于所定义的目标函数,聚类问题即是求满足式(1)~(3)的W 和Z ,使得目标函数值最小,这实际上是一个优化的问题.用遗传算法求解,主要考虑以下因素[4]:染色体编码、个体适应度评价、遗传算子(选择算子、交叉算子、变异算子)以及遗传参数设置等.2.1 染色体编码方法设n 个样本被分成c 类:Z 1,Z 2,,,Z c ,模糊分类矩阵W =(w ij )共有n @c 个元素.这里采用实数编码方案[5,6].一个染色体可以被编码成为:[z 1z 2,z c w 11w 12,w 1c w 21w 22,w 2c ,w n 1w n 2,w nc ].2.2 始化群体的生成当聚类个数c 给定时,随机选取聚类中心并随机生成w ij 组成模糊矩阵W .2.3 适应度函数用适应度函数模拟自然选择,评价染色体的相对优劣程度,由此决定各种遗传操作.个体以J m (W ,Z )为目标函数值,J m (W ,Z )越小,个体的适应度就越高.取f i =1/J m (W ,Z )作为第i个个体的适应度,总的适应度为F =E cj =1f i ,平均适应度为 f =f i /F.2.4 选择选择操作建立在对个体的适应度评价的基础上,用来将父代中的优秀个体保存到下一代.常用的选择操作有轮赌盘选择、余数选择法、保留最佳个体等.这里采用期望值选择法.a .计算群体中每个个体在下一代生存的期望数目N i =f i / f .b .若某个个体被选中并要参与配对和交叉,则它在下一代的期望数目减去0.5;若不参与配对和交叉,则该个体的生存期望数目减去1.c .在上面两种情况中,若一个个体的期望值小于0,则该个体不参与选择.2.5 交叉交叉用于组合新个体,使子代继承父代优秀基因.a .对每个个体产生[0,1]的随机数r ,若r <p c ,则该个体参加交叉操作,选出交叉操作的一组染色体后进行随机配对.b .对每一对染色体X 、Y,产生(0,1)之间的随机数e.c .做如下交叉运算:X z e X +(1-e )Y,Y z e Y +(1-e)X.2.6 变异变异用来保持种群的多样性.这里变异操作分为两个部分.首先对染色体的前c 位基因进行变异操作.a .产生随机数r ,若p m <r ,则进行变异操作.b .产生随机正整数h (1[h [c/2).c .产生h 个随机正整数t 1,t 2,,,t h ,对第t i 位基因产生随机数,代替原来的基因.d .若前c 位发生重复,则对重复的基因再进行变异.然后对染色体第c 位后的基因(记做Z )进行变异操作.a .产生(0,1)之间的随机数A .b .产生nc 维随机向量V =[v 1v 2,v nc ],v i I [0,1].c .做变异Z z Z +A V.2.7 合法性检查遗传操作可能产生非法的个体,要对产生的非法个体进行修正.修正的规则如下:a .如果w ij >1或w ij <0,则w ij =0.5.b .如果E cj =1w ij >1,且所有w ij 都相同,则令w ij =1/c,j =1,2,,,c;否则,令w ik =max (w i 1,w i 2,,,w i c ),于是w ik =1-E c j =1,j X kw ij ,j =1,2,,,c.c .如果E cj =1w ij <1,且所有w ij 都相同,则令w ij =1/c,j =1,2,,,c;否则,令w ik =min (w i 1,w i 2,,,w ic ,于是w ik =1-E cj =1,j X kw ij ,218 华 中 科 技 大 学 学 报(自然科学版) 第32卷j =1,2,,,c.d .如果E ni =1w ij \n,则w ij z 0.5,i =1,2,,,n.3 实例应用基于遗传算法的模糊c 2均值算法对二维数据集进行聚类.图1(a)为聚类样本.初始种图1 聚类样本和聚类结果群300,最大进化世代数500,p c =0.2,p m =0.05.运算结果为J =2.619.聚类中心为(0.749,0.218)和(0.234,0.238).图1(b)为聚类结果.参考文献[1]张红云,刘向东,段晓东等.数据挖掘中聚类算法比较研究.计算机应用与软件,2003(2):5~6[2]李洪兴,汪培庄.模糊数学.北京:国防工业出版社,1994.[3]褚蕾蕾,陈绥阳,周 梦.计算智能的数学基础.北京:科学出版社,2002.[4]史忠植.知识发现.北京.清华大学出版社,2002.[5]张 维,潘福铮.一种基于遗传算法的模糊聚类.湖北大学学报,2002(2):101~104[6]王 敞,陈增强,袁著祉.基于遗传算法的K 均值分析.计算机科学,2003(2):162~164219增刊 许松荣:基于遗传算法的模糊聚类方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东师范大学硕士学位论文
图5.3随机产生的l∞个点
第二组数据来源参见http://ftp.ics.uci.edu[pub/machine-leaming-databases/,由于众多文献都参考了此数据信息,因而数据的可信度是较高的。
我们取用其中的Iris(鸢尾草植物)文件夹下的数据信息作为测试数据,经过数据转换而构造数据库iris.mdb。
这些Iris植物样本数据分为三类,分别为:IrisSetosa(第1巧O条记录)、IrisVersicolour(第51~100条记录)、IrisVirginica(第101~150条记录),共150个样本,每个样本由四个属性构成,分别代表该植物的四种特征属性,即sepallength、sepalwidth、petallength以及petalwidth。
该数据表如图5.4所示:
图5.4Iris数据表
针对以上两组数据,分别采用如下算法:K-means算法,基本遗传算法以及本文算法
山东师范大学硕士学位论文
进行实验。
将这些算法分别运行5次,计算它们的目标函数值J,其中,采用基本遗传算法的相关参数设置如下:交叉概率0.5,变异概率0.05;采用本文算法中的不同子种群采用的初始交叉、变异概率不同,相关参数设置如表1。
各子种群独立进化次数S=5,迁移率为3,即当各子种群的遗传次数为5的倍数时,则各子种群进行当前较优解的传播,且每次传播的较优解个数为3个。
表1本文算法中各子种群初始的交叉概率和变异概率
探测子种群开发子种群探测开发子种群f交叉概率Pcl=0.9,P02=0.6Pcl--0.5,P吐==O.2Pcl=o.7,P。
2=0.4
l变异概率P。
1-0.1,Pmz=0.01P。
1=0.01,PⅢ2=0.001P。
l=0.05,Pr02=0.005其中K-means算法和基本遗传算法将按照事先给定的聚类数目k进行实验,对于本文提出的算法,针对第一组数据,我们采用动态确定聚类数目k的算法(5.3节提出的算法),而第二组数据,采用事先给定聚类数目k的算法(5.2节提出的算法)进行实验。
第一组随机生成数据的实验结果如下:
表2第一组随机生成数据的实验结果
本文算法
运行次数SGAK-means
目标函数JK值
156.271256.271256.27124
256.272656.383556.27124
356.558056.672056.27124
456.693157.187256.27124
557.375157.510656.27124K—means算法产生的聚类中心,如图5.5所示:
图5.5K-means算法产生的聚类中心
采用基本遗传算法产生的聚类中心,如图5.6所示:
图5.6基本遗传算法产生的聚类中心
本文算法产生的聚类中心,如图5.7所示:
图s.7本文算法产生的聚类中心
第二组Iris数据的实验结果:
表3第二组Iris数据的实验结果
运行次数SGAK-means本文算法
115.312215.564815.3121
215.865516.021415.3121
316.558016.839115.3121
416.745017.251415.3121
517.054117.331215.3121对于第二组Iris数据三种算法的聚类结果如下(以点在his数据库中的顺序为编号):(1)K均值算法
41。