Kmeans是最简单的聚类算法之一,应用十分广泛,Kmeans以距离作为相似性的评价指标,其基本思想是按照距离将样本聚成不同的簇,两个点的距离越近,其相似度就越大,以得到紧凑且独立的簇作为聚类目标。本文参考PRML一书,详细讲解Kmeans聚类的原理以及图像分割应用。
1. 基本原理
给定
D
维欧几里得空间的一组数据
我们引入二值变量
rnk∈{0,1}
来表示数据点
xn
对于聚类
k
的归属(其中
该问题的目标就是寻找使得损失函数 J 最小的所有数据点的归属值
第一步,随机选择聚类中心 μk 的初始值,求取使损失函数 J 最小的数据点的归属值
那么 μk 的取值为
如此迭代该两阶段优化问题直至收敛,Kmeans的实现过程大致表示如下:
(1) 随机选取K个初始聚类中心;
(2) 计算每个样本到各聚类中心的距离,将每个样本归到其距离最近的聚类中心;
(3) 对每个簇,以所有样本的均值作为该簇新的聚类中心;
(4) 重复第(2)~(3)步,直到聚类中心不再变化或达到设定的迭代次数。
图1为Kmeans算法的实现过程图示,以二聚类为例,首先随机选择两个聚类中心,根据距离将所有的点聚为两个簇(如图1(2)),然后将两个簇以其均值作为新的聚类中心重新聚类。如此迭代,由图可知,经过4次循环,聚类中心不再变化,便完成对该组数据的聚类。由图1(1)可知,初始聚类中心选在了一个簇中,事实上,如果初始聚类中心选择合适,Kmeans聚类收敛速度会非常快,极端情况是,聚类中心恰巧选在了每个簇的中心,无需迭代该聚类问题就已经完成。
2. 图像分割应用
彩色图像中的每一个像素是三维空间中的一个点,三维对应红、绿、蓝三原色的强度,基于Kmeans聚类算法的图像分割以图像的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。如图2所示,不同的聚类簇数呈现不同的色彩特征。
3. Kmeans聚类的缺点
1) 聚类簇数K没有明确的选取准则,但是在实际应用中K一般不会设置很大,可以通过枚举法,比如令K从2到10。其实很多经典方法的参数都没有明确的选取准则,如PCA的主元个数,可以通过多次实验或者采取一些小技巧来选择,一般都会达到很好的效果。
2) 从Kmeans算法框架可以看出,该算法的每一次迭代都要遍历所有样本,计算每个样本到所有聚类中心的距离,因此当样本规模非常大时,算法的时间开销是非常大的。
3) Kmeans算法是基于距离的划分方法,只适用于分布为凸形的数据集,不适合聚类非凸形状的类簇,如图3所示。