使用遗传算法和模拟退火改进的K均值聚类

1.摘要

聚类问题可以转化为对准则函数的最优化求值问题。常见的K均值聚类算法对初值敏感,容易陷入局部最优,特别是对于分界面模糊的样本聚类能力较差。

遗传算法可以在全局上随机搜索最优解,因此将聚类问题转化为最优化求解问题后,可以用遗传算法进行聚类,确保聚类结果能达到全局最优。

标准的遗传算法虽然可以在全局上求解最优值,但迭代次数大,收敛慢。搜索速度和获得最优解往往是互相矛盾的目标。通过引入模拟退火方法,可以提高进化过程中种群的多样性,避免算法陷入局部最优;而根据聚类问题的特点,借鉴K均值思想,在初始阶段的变异操作中采用K均值变异算子,可以加快初始阶段的搜索速度。K均值变异算子和模拟退火两者结合,可以在提高搜索速度的同时,保持种群的多样性,也就是说,可以同时获得快速搜索和全局最优的双重功效。

通过实验模拟,在两类不同特点的数据集上运行以上算法,结果验证了其正确性。

2.聚类的准则函数

聚类是模式识别领域中常用的无监督分类方法,目的是根据样本之间的相似程度聚合成不同的类别。记输入样本集为\(X = \left\{ {{x_1},{\kern 1pt} {x_2}{\kern 1pt} {\kern 1pt}  \cdots {\kern 1pt} {x_n}} \right\}\),其中包含n个独立样本,每个样本是\(l\)维向量;则聚类的目标是将这n个样本按相似度划分为c类。

较好的聚类结果应当是:归属于同一类的样本之间相似度尽可能高,而不同类别之间样本的差异性尽可能大。当以欧氏距离(即两点之间的直线距离)作为衡量“相似”的依据时,以上表述可以转化为以下准则函数:

                  \(\min {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {J_E} = \sum\limits_{j = 1}^c {\sum\limits_{k = 1}^{{n_j}} {\left\| {x_k^j - {m_j}} \right\|} } \)    [1]

                  \(\max {\kern 1pt} {\kern 1pt} {\kern 1pt} {J_B} = \sum\limits_{j = 1}^c {{{\left( {{m_j} - m} \right)}^T}\left( {{m_j} - m} \right)} \) [2]

其中,\(x_k^j\)是归属于类别cj的第k个样本,\({n_j}\)是类j中的样本数,\({m_j} = \frac{1}{{{n_j}}}\sum\limits_{j = 1}^{{n_j}} {x_k^j} \)是类别cj的中心,\(m = \frac{1}{n}\sum\limits_{i = 1}^n {{x_i}} \)是全部样本的中心。

这样,聚类问题转化为求[1]式的最小化问题,或者求[2]式的最大化问题。传统的聚类算法,如K-均值、最大最小算法等,都是从直观上迭代的算法,本质上是求解准则函数的最优化,但算法本身没有直接体现出对准则函数的运用。

适应度:

利用遗传算法求解聚类问题,可以选择

\[fitness = \frac{{{J_B}}}{{{J_E}}} = \frac{{\sum\limits_{j = 1}^c {{{\left( {{m_j} - m} \right)}^T}\left( {{m_j} - m} \right)} }}{{\sum\limits_{j = 1}^c {\sum\limits_{k = 1}^{{n_j}} {\left\| {x_k^j - {m_j}} \right\|} } }}\] [3]

作为个体的适应度,适应度值越大,个体基因进入到下一代的概率越大。

3.遗传算法

遗传算法是一种具有全局搜索能力的随机算法,主要步骤是将待解空间中的可能值编码为染色体,建立初始种群,然后按适应度进行遗传选择,按一定概率进行交叉和变异。循环执行遗传选择、交叉、变异操作,直到满足结束条件。标准遗传算法的程序框图如图所示。

染色体编码

染色体编码方式有二进制编码、浮点数编码、字符编码等。编码的目的是将解空间中的可行值转化为计算机可操作的变量,以模拟遗传进化过程。对于聚类问题,可以有两种显而易见的编码方式,其一是将每个聚类中心编码为浮点数;其二是将每个样本所属的类别编码为符号串。考虑到以准则函数为依据进行聚类的普遍性,本实验直接在n维(n为样本总数)空间中求解最优值,所以采用字符型编码方式。

符号编码:

设样本总数为n,类别数为c,采用符号编码的方法,将单个染色体编码为:\(D = \{ {d_1}{\kern 1pt} ,{\kern 1pt} {d_2},{\kern 1pt} {d_3}{\kern 1pt} {\kern 1pt}  \cdots {\kern 1pt} {\kern 1pt} {d_n}\} \),\({d_i} \in \{ 1,2 \cdots {\kern 1pt} c\} \),\(i = 1,2,3 \cdots n\). 单个染色体的长度为n,每个基因位有c种可能,表示对应样本所属的类别。

交叉和变异

交叉和变异操作产生新的个体,从而保证了遗传算法的全局搜索能力。在本例中,使用随机位置单点交叉的方法。对于两个染色体\({D_1} = \left\{ {{d_{1,1}},{d_{1,2}},{d_{1,3}} \cdots {d_{1,n}}} \right\}\),\({D_2} = \left\{ {{d_{2,1}},{d_{2,2}},{d_{2,3}} \cdots {d_{2,n}}} \right\}\),随机产生位置i,\(i \in (1,150)\),单点交叉后产生新个体\({D_{New}} = \left\{ {{d_{1,1}},{d_{1,2}} \cdots {d_{1,i}},{d_{2,i + 1}} \cdots {d_{2,n}}} \right\}\). 考虑到染色体比较长(150位),可以再生产另一个随机位置后,用相同的方法再进行一次交叉,作为最终的新个体。

变异操作是指改变个体染色体上的某个基因。简单的单点变异是在染色体的随机位置随机改变基因类型。

遗传选择

交叉和变异操作会产生新的个体,但种群规模应当始终控制为固定大小m. 遗传选择操作首先计算当前所有个体的适应度fitness,将适应度按降序进行排序,然后按照以下策略进行遗传选择:

  1. 最优个体保留

适应度前10%的个体直接选入下一代。最优个体的保留确保了在进化过程中种群已得到的最优解不会被淘汰,使得进化不会发生倒退。

  1. 剩余个体轮盘赌

对剩余的个体使用轮盘赌方式的方式决定是否能进入下一代。剩余个体di对应的适应度为fitnessi,对应的轮盘赌概率\({\rho _i} = \frac{{fitnes{s_i}}}{{\sum\limits_i {fitnes{s_i}} }}\).

循环考察剩余个体,产生随机数r,若\({\rho _i} = \frac{{fitnes{s_i}}}{{\sum\limits_i {fitnes{s_i}} }}\),则将个体i选入下一代。如此循环,直到下一代种群的规模达到预设m.

4.算法改进

以上介绍的简单遗传算法(SGA)是一种适用性较广的方法,对于任意优化问题,给定适应度评价,经过遗传进化,总能找到最优解。但SGA所需的迭代次数多,收敛速度慢。针对特定的求解场景,可以具体问题具体分析,在简单遗传算法基础上作一些改进,以增强算法性能。

模拟退火与Metropolis准则

模拟退火(Simulate Anneal)受热处理工艺中金属晶格能下降过程的启发,基本实现是以一定的概率来接受一个比当前解要差的解,而这个概率随着温度的下降而下降。在求解初始时期,温度较高,就有可能会跳出局部的最优解,获得全局的最优解,而随着温度的冷却,不确定性降低,最终获得稳定的解。遗传算法的交叉和变异虽然具有全局搜索的能力,但随后的遗传选择过程会趋向于剔除变异产生的适应度更低的个体。这些在当前看来适应度更低的个体可能实际上更靠近全局最优解,但在遗传选择中,会因为与其他局部最优个体的竞争而被遗弃。在变异操作之后施加一个模拟退火的选择过程,理论上可以减少在局部最优位置的尝试次数,进而加快进化速度。

Metropolis准则描述了模拟退火的执行过程。设新产生的个体为\({d_{new}}\),对应的适应度\(fitnes{s_{new}}\). 设定适应度阈值\(fitnes{s_{thr}}\),对新个体的操作策略是:

\[\left\{ {\begin{array}{*{20}{l}}
{fitnes{s_{new}} > fitnes{s_{thr}}}&{ \Rightarrow {\rm{go on Roulette}}}\\
{fitnes{s_{new}} < fitnes{s_{thr}}}&{ \Rightarrow enter{\kern 1pt} {\kern 1pt} {\kern 1pt} next{\kern 1pt} {\kern 1pt} generation{\kern 1pt} {\kern 1pt} {\kern 1pt} with{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} p = {e^{\frac{{fitnes{s_{thr}} - fitnes{s_{new}}}}{T}}}}
\end{array}} \right.{\kern 1pt} \]

当\(fitnes{s_{new}}\)>\(fitnes{s_{str}}\)时,按传统方法参与轮盘赌;当\(fitnes{s_{new}}\)<\(fitnes{s_{str}}\)时,有概率\(p = {e^{\frac{{fitnes{s_{thr}} - fitnes{s_{new}}}}{T}}}\)直接进入下一代种群,其中T是当前温度,随着迭代的进行,温度T逐渐降低,因此对于相同的\(fitnes{s_{new}}\),直接进入下一代的概率会随着温度的降低而下降,最终趋向于极小的值。这里阈值\(fitnes{s_{str}}\)可以取所有适应度值的平均,即\[fitnes{s_{thr}} = \frac{1}{n}\sum\limits_{i = 1}^n {fitnes{s_i}} \]

K均值变异算子

随机的单点变异本质上是没有目的性的随机尝试,并且一次只发生一个点的基因变异,因此收敛速度慢,耗费运算时间。在聚类问题中,可以借鉴K均值算法中的思想,设计更有针对性的变异算子,称之为K均值变异算子。

K均值变异算子执行的操作是:

  1. 按照当前染色体所含的分类信息,计算各聚类中心;
  2. 计算所有样本到这些中心的距离,将距离最近的样本中心认为是该样本所属的类;
  3. 将染色体对应基因位修改为该样本所归属的类别。

K均值变异与常规的单点变异互为补充。根据SGA迭代过程中表现出来的特性(见表1中普通遗传算法的适应度收敛曲线),初始时样本之间差异性大,耗费了大量时间寻找相对较优的个体,在该阶段使用K均值变异算子,可以大大加快搜索速度。因此,根据文献和实验尝试,在迭代过程中,当(fitnessMax-fitnessEverage)/(fitnessEverage-fitnessMin)>a时,采用K均值变异算子,否则仍旧采用单点变异。参数a的取值在2.5左右时比较合适。值得注意的是,全部使用k均值变异算子是不合理的,因为K均值算法容易陷入局部最优。

5.性能验证

本节通过实验,验证普通遗传算法在求解聚类问题上的适用性,然后说明文中所提出的几个改进方法在实际求解过程中对性能的提升。

数据集说明

实验评价使用了两个数据集:

1. 来自http://archive.ics.uci.edu/ml/的Iris数据集,这是研究聚类算法常用的测试集,包含了150个样本,每个样本为4维向量,类别数为3. 该数据集的特点是:第一类与其他类分界面清楚,第二类与第三类比较靠近,因此可以用来评价无先验概率下的聚类分类能力;

2. 模拟生成的高斯混合模型参数,也是150个样本,每个样本4维,分3类,但类别之间的界限更加模糊。数据1和数据2在平行坐标系中展示如图。

Fig. 2 两个测试数据集在平行坐标系中的分布,数据集1是Iris,类2和类3比较相近;数据集2是从高斯混合模型模拟生成的数据,3类之间没有明显的分界

结果比较

1.K均值算法

K均值算法原理简单,运算量小,但由于初始聚类中心完全随机,很容易陷入局部最优。另一方面,当样本分界面模糊时,聚类效果尤其差,很难达到准则函数的最优值。

对两个数据集各执行10次K均值聚类,适应度统计如下:

数据集

最好适应度

适应度均值

最差适应度

1

25.276

23.2143

15.4663

2

7.2019

3.70814

2.9789

2.遗传算法及其改进算法

测试数据集1

 

4种方法在测试数据集1上的运行结果如下表所示。

表 1 遗传算法及其改进算法对于数据集Iris的分类效果,以及适应度随迭代次数的曲线

所用算法

适应度曲线

分类结果

普通遗传算法

模拟退火遗传算法

K均值变异算子遗传算法

K均值变异算子模拟退火遗传算法

 

在表中,左图是适应度随迭代的次数的变化,右图是最终的分类结果。在测试集1上,各算法的性能总结如下

  1. 遗传算法计算得到的最优解适应度为25.98,这在K均值中是没有出现过的。
  2. 引入模拟退火算法之后,对于数据集1而言,迭代次数并没有明显提升,最优解也与普通遗传算法相同,但种群的多样性明显增多了。
  3. 引入k均值变异算子之后,收敛速度大大提升,从原来的600多次减少到了200多次。代价是最优解的适应度略低于传统遗传算法,但还是比K均值算法好。
  4. K均值变异算子模拟退火遗传算法在数据集1上的性能与算法3相当。

测试数据集2

数据集2中的样本来自于高斯混合模型,彼此之间没有明显的间隔,因此也没有正确的分类,旨在通过适应度函数测试各算法的性能。数据集2的最终分类结果没有实际意义,因此只给出了适应度的变化曲线。如下表所示。

表 2遗传算法及其改进算法对于数据集2的适应度随迭代次数的曲线

普通遗传算法

模拟退火遗传算法

K均值变异算子遗传算法

K均值变异算子模拟退火遗传算法

从测试结果中可以得出以下结论:

  1. 传统遗传算法具有全局搜索能力,获得了很接近最优值的适应度10.42,远高于K均值中最大7.2,平均3.8的适应度。
  2. 引入模拟退火之后,由于样本多样性的增加,使得跳出局部最优的能力加强,最终得到全局最优解10.48的适应度,高于普通遗传算法。并且收敛速度也有一定的提高。
  3. 遗传算法中单引入k均值变异算子可以在初始阶段加快搜索速度,但K均值的缺陷导致了群体的过度早熟,最终陷入了局部最优解,仅得到9.0的适应度。
  4. 同时引入K均值变异算子和模拟退火方法,在加快初始阶段搜索速度的同时,又能保证种群的多样性,最终可以得到全局最优的结果(适应度10.48),同时还减少了迭代次数。

 

6.总结

本文首先将聚类问题描述为对准则函数的最优解搜寻问题。遗传算法能在全局空间上搜索最优解,因此该算法能用于求解聚类问题。实验发现,标准的遗传算法确实能得到最优解,性能胜过K均值聚类方法,但存在迭代次数多,收敛速度慢的缺陷。

针对具体应用场景对简单遗传算法进行改进,根据聚类问题的特点,引入了K均值变异算子,在遗传选择过程中加入了模拟退火实现。前者能加快初始阶段的搜索速度,而后者能维持种群多样性,避免在局部最优解区域浪费搜索次数。实际验证结果表明,对于分界面明显的样本,K均值变异模拟退火遗传算法能较快收敛,求解结果稳定;对于没有明确分界面的样本,能得到全局最优的结果,同时还减少了迭代次数。

参考文献

  1. 耿跃, 任军号, 吉沛琦. 基于K-Means变异算子的混合遗传算法聚类研究[J]. 计算机工程与应用, 2011, 47(29):151-153.
  2. 模拟退火算法, https://www.cnblogs.com/ranjiewen/p/608405html
  3. 徐占洋, 郑克长. 云计算下基于改进遗传算法的聚类融合算法[J]. 计算机应用, 2018, 38(2):458-46

 

所用的全部源程序参见git仓库

所用的全部源程序参见文件夹[Sources].
-------文件说明--------
1.-----------------------
bezdekIris.txt
数据集1,来自UCI的IRIS样本
2.-----------------------
moni.txt
数据集2,高斯混合模型样本,分界面模糊
3.-----------------------
GA_Clustering.m
简单遗传算法聚类
4.-----------------------
GS_SA_Clustering.m
模拟退火遗传算法聚类
5.-----------------------
KM_GA_Clustering.m
引入K均值变异算子的遗传算法聚类
6.-----------------------
KM_GA_Clustering.m
引入K均值变异算子的遗传算法聚类
7.-----------------------
KM_GSA_Clustering.m
引入K均值变异算子的模拟退火遗传算法聚类
8.-----------------------
K_means.m
K均值聚类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值