k均值课程设计K均值聚类(kmeans)优化.doc

上传人:文库蛋蛋多 文档编号:2396477 上传时间:2023-02-17 格式:DOC 页数:7 大小:133.50KB
返回 下载 相关 举报
k均值课程设计K均值聚类(kmeans)优化.doc_第1页
第1页 / 共7页
k均值课程设计K均值聚类(kmeans)优化.doc_第2页
第2页 / 共7页
k均值课程设计K均值聚类(kmeans)优化.doc_第3页
第3页 / 共7页
k均值课程设计K均值聚类(kmeans)优化.doc_第4页
第4页 / 共7页
k均值课程设计K均值聚类(kmeans)优化.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《k均值课程设计K均值聚类(kmeans)优化.doc》由会员分享,可在线阅读,更多相关《k均值课程设计K均值聚类(kmeans)优化.doc(7页珍藏版)》请在三一办公上搜索。

1、模式识别课程设计报告 姓 名: 陈继智 学 号: 20091002205 班级序号: 191094 01 指导老师: 蒋良孝 时 间: 2012年4月 K均值聚类(k-means)优化 基于遗传算法一、 K均值聚类的算法和遗传算法的概述 1、K均值聚类(k-means)就是将对物理或抽象对象的集合分组成为由类似的对象组成的多个簇的过程。聚类分析是指事先不知样本的类别,而利用样本的先验知识来构造分类器(无监督学习),可以用两个准则来做(1)聚类准则函数,(2)误差平方和准则(最常用的)。 2、遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化搜索算法。生物的进化过程主要是通

2、过染色体之间的交叉和变异来完成的,与此相对应,遗传算法中最优解的搜索过程也模仿了生物的进化过程,使用遗传操作数作用于群体进行遗传操作,从而得到新一代群体,其本质是一种求解问题的高效并行全局搜索算法。它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程,从而得到最优解或准最优解。算法以适应度函数为依据,通过对群体个体施加遗传操作实现群体内个体结构重组的迭代处理。在这一过程中,群体个体一代代地优化并逐渐逼近最优解。鉴于遗传算法的全局优化性,本文给出了一种基于遗传算法的K均值聚类算法来克服K均值算法的局部性。二、K均值算法的基本思想 K均值算法是一种使用最广泛的聚类算法。算法以K

3、为参数,把n个对象分为K个簇,使簇内具有较高的相似度,而簇间相似度较低。算法首先随机选择K个对象,每个对象初始地代表了一个簇的平均值或中心,对剩余的每个对象根据其与各个簇中心的距离,将它赋给最近的簇,然后重新计算每个簇的平均值,不断重复该过程,直到准则函数收敛。准则函数如下: 其中,ix为簇C的平均值。iK均值算法的描述如下: (1)任意选择K个记录作为初始的聚类中心。(2)计算每个记录与K个聚类中心的距离,并将距离最近的聚类作为该点所属的类。(3)计算每个聚集的质心(聚集点的均值)以及每个对象与这些中心对象的距离,并根据最小距离重新对相应的对象进行划分。重复该步骤,直到式(1)不再明显地发生

4、变化。三、基于遗传算法的K均值聚类算法 本文将遗传算法应用到聚类分析中,把遗传算法的全局优化能力与聚类分析的局部优化能力相结合来克服聚类算法的局部性,在种群进化过程中,引入K均值操作,同时,为了避免早熟现象,在种群中采用自适应方法动态调节交叉概率和变异概率,使其能够随适应度自动改变。算法具体步骤如下。1 染色体编码 染色体编码有很多种,在聚类分析中较常用的是基于聚类中心的浮点数编码和基于聚类划分的整数编码。由于聚类算法具有多维性、数量大等特点,聚类问题的样本数目一般远大于其聚类数目,因此采用基于聚类中心的浮点数编码,将各个类别的中心编码为染色体。例如对于一个类别为3的聚类问题,假设数据集为2维

5、。初始的3个聚类中心点为(1, 2), (5, 4), (8, 7),则染色体编码为(1, 2, 5, 4, 8, 7)。这种基于聚类中心的编码方式缩短了染色体的长度,提高了遗传算法的速度,对于求解大量数据的复杂聚类问题效果较好。2 初始群体的产生 为了获得全局最优解,初始群体完全随机生成。先将每个样本随机指派为某一类作为最初的聚类划分,并计算各类的聚类中心作为初始个体的染色体编码串,共生成m个初始个体,由此产生第一代种群。3 适应度函数的选取 适应度通常用来度量群体中各个体在优化计算中可能达到或接近于最优解的优良程度。本文采用式(1)构造适应度函数,由于式(1)的值越小说明聚类结果越好,越大

6、说明聚类结果越差,因此选择如下的适应度函数: 其中,b为常数,可以根据具体问题作调整。4 遗传算子 4.1 选择算子 采用适应度比例法与最优保存策略相结合的混合选择算子。首先在每一代开始时,将群体中的最优个体记录下来,然后根据各个体的适应度计算个体被选中的概率,用轮盘赌方法进行个体的选择,最后在每次遗传操作后形成新群体时用当前所记录的最优个体替换新群体中的最差个体,以防止遗传操作破坏当前群体中适应度最好的个体。 4.2 交叉操作 交叉操作是指对2个相互配对的染色体按某种方式相互交换部分基因,从而形成2个新的个体,提高遗传算法的搜索能力。由于本文染色体采用浮点数编码,因此采用适合浮点数编码的算术

7、交叉算子,即其中,a是一个(0, 1)范围内的随机数。 4.3 变异操作 变异是一种局部随机搜索,与选择、交叉重组算子相结合可以保证遗传算法的有效性,使其具有局部随机搜索能力,同时保持种群的多样性,防止非成熟收敛。本文采用均匀变异算子,其具体操作过程是:对于每个变异点,从对应基因位的取值范围内取一随机数代替原有基因值。即其中,r为(0, 1)范围内的随机数;,分别是该基因位的数值上下限。maxU,minU 4.4 交叉率和变异率的自适应调整 标准的遗传算法已经被证明无法收敛到问题的全局最优解,尤其是在种群分布不均匀时易出现未成熟收敛,即“早熟现象”,在进化中后期由于个体竞争减弱而引起的随机搜索

8、趋势还会导致算法收敛速度缓慢,其原因是进化算子在整个进化过程中都采用了固定的概率值。为了避免以上问题,本文采用了自适应遗传算子。自适应遗传参数的选择如下:其中,avgf表示每代群体的平均适应度值;maxf表示群体中的最大适应度值;f表示要交叉的2个个体中较大的适应度值;f表示群体中要变异个体的适应度值。对于适应度大的个体,赋予其相应的交叉和变异概率,而对于适应度小的个体,其交叉概率和变异概率较大,自适应的交叉和变异概率能够提供相对某个解最佳的cp和mp,使自适应遗传算法在保持群体多样性的同时,保证算法收敛。5 K均值操作 先以变异后产生的新群体的编码值为中心,把每个数据点分配到最近的类,形成新

9、的聚类划分。然后按照新的聚类划分,计算新的聚类中心,取代原来的编码值。由于K均值具有较强的局部搜索能力,因此引入K均值操作后,遗传算法的收敛速度可以大大提高。6 循环终止条件 循环代数开始为0,每循环一次,代数加1,若当前循环代数小于预先规定的最大循环代数,则继续循环;否则结束循环。7 算法的设计(1)设置遗传参数:聚类个数c,种群大小m,交叉概率cp,变异概率mp,最大迭代代数T,适应度倍数参数b。(2)随机生成初始群体。(3)计算群体各个体的适应度。(4)进行选择、交叉、变异、K均值操作,产生新一代群体。(5)重复第(3)、第(4)步,直到达到最大迭代代数T。(6)计算新一代群体的适应度,

10、以最大适应度的最佳个体为中心进行K均值聚类。(7)输出聚类结果。四、 实验结果与分析 为了检验算法的有效性,对原始算法和改进算法进行了对比实验。实验数据来自给data的arff格式的文件数据,数据集分别是iris,glass。优化后算法的参数设置如下:种群大小m=30,算法的最大迭代次数T=100,交叉概率1cp=0.9,2cp=0.6,变异概率1mp=0.1,2mp=0.001, b=1 000,所有算法运行20次,运行情况如表1所示。根据表1的实验结果,K均值算法初始聚类中心的选取敏感性很大,容易陷入局部最小值,并不是每次都能得到最优解,特别是对于glass这种较高维度的数据集,没有一次达

11、到全局最优解。而改进的算法对每组数据集的20次实验均能收敛到最优解,聚类效果较好。除数据集iris外,K均值算法每组数据收敛到最优解的平均迭代次数都比本文算法多,所以,本文算法的收敛速度也比较快。表1 K均值算法和优化后算法的比较五、部分代码在代码中主要添加和修改几个部分1、算中心距离private double EuclidDistance(int x,int y,int z)int i;double distance = 0;for(i=0; iNA; i+)distance += pow( (instancex.pi - popz.clustercentery.pi),2 );dista

12、nce = sqrt(distance);return distance;private void CalcuateDistance(int p)int i;int j;for(i=0; iNI; i+)for(j=0; jK; j+)instancei.distancej = EuclidDistance(i,j,p);2、 簇函数private void Cluster(int p)int i;int j;int index;double min;for(i = 0; i K; i+)clusteri.clear();for(i = 0; i NI; i+)index = 0;min =

13、instancei.distance0;for(j = 1; j K; j+)if(instancei.distancej min)min = instancei.distancej;index = j;clusterindex.push_back(i);/*计算种群中个体适应值*/popp.fitness = 0;for(i = 0; iK; i+)for(j=0; jclusteri.size(); j+)popp.fitness += pow(instanceclusterij.distancei,2);3、 交叉函数private void CrossOver()。(略)4、 迭代函数private void NextGeneration()。(略)六、结束语 本文对K均值算法获得最优解的问题进行了研究,发现随机初始化会对该算法性能产生影响,不同的初始化中心会产生不稳定的聚类结果。本文提出的基于遗传算法的K均值聚类算法克服了上述缺陷。大量测试证明其不仅能够得到全局最优解,也能很好地解决K均值聚类方法对初始聚类中心敏感的问题,为聚类分析提供了一个新的思路。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号