Kmeans聚类及图像分割

  Kmeans是最简单的聚类算法之一,应用十分广泛,Kmeans以距离作为相似性的评价指标,其基本思想是按照距离将样本聚成不同的簇,两个点的距离越近,其相似度就越大,以得到紧凑且独立的簇作为聚类目标。本文参考PRML一书,详细讲解Kmeans聚类的原理以及图像分割应用。

1. 基本原理

  给定 D 维欧几里得空间的一组数据 {x1,...,xN} ,我们的任务是将该组数据聚成 K 个簇(聚类和分类的区别在于分类是有监督的,聚类是无监督的,根据任务设定聚类依据,此处假设聚类个数K是已知的)。不考虑问题背景,单纯从欧几里得空间的角度讲,我们应当将距离较近的点聚为一个簇,不同簇的点之间的距离较远。Kmeans聚类方法就是寻找 K 个聚类中心 μk(k=1,...,K) ,将所有的数据分配到距离最近的聚类中心,使得每个点与其相应的聚类中心距离的平方和最小。
  我们引入二值变量 rnk{0,1} 来表示数据点 xn 对于聚类 k 的归属(其中 n=1,...,N , k=1,...,K ),如果数据点 xn 属于第 k 聚类,则 rnk=1 ,否则为 0 。如此,我们便可定义如下损失函数:

J=n=1Nk=1Krnkxnμk2(1)

该问题的目标就是寻找使得损失函数 J 最小的所有数据点的归属值 {rnk} 和聚类中心 {μk} 。Kmeans算法提供了一种迭代求解方法,在每次迭代中交替优化 rnk μk
  第一步,随机选择聚类中心 μk 的初始值,求取使损失函数 J 最小的数据点的归属值 rnk 。由 (1) 式容易看出,给定 xn μk 的值,损失函数 J rnk 的线性函数,而且,由于 xn 之间是相互独立的,所以对于每一个 n ,我们只需将该点分配到距离最近的聚类中心,即
rnk={10if k=argminjxnμj2otherwise(2)
  第二步,固定已求得的 rnk ,再求取使损失函数 J 最小的聚类中心 μk 。给定 rnk 的值,损失函数 J μk 的二次函数,令 J μk 的导数为 0 ,我们有
n=1Nrnk(xnμk)=0(3)

那么 μk 的取值为
μk=nrnkxnnrnk(4)
对于第 k 个聚类, rnk 取1的个数就是属于该聚类的点的个数,因此, μk 等于属于该聚类的点均值。
 如此迭代该两阶段优化问题直至收敛,Kmeans的实现过程大致表示如下:
(1) 随机选取K个初始聚类中心;
(2) 计算每个样本到各聚类中心的距离,将每个样本归到其距离最近的聚类中心;
(3) 对每个簇,以所有样本的均值作为该簇新的聚类中心;
(4) 重复第(2)~(3)步,直到聚类中心不再变化或达到设定的迭代次数。
  图1为Kmeans算法的实现过程图示,以二聚类为例,首先随机选择两个聚类中心,根据距离将所有的点聚为两个簇(如图1(2)),然后将两个簇以其均值作为新的聚类中心重新聚类。如此迭代,由图可知,经过4次循环,聚类中心不再变化,便完成对该组数据的聚类。由图1(1)可知,初始聚类中心选在了一个簇中,事实上,如果初始聚类中心选择合适,Kmeans聚类收敛速度会非常快,极端情况是,聚类中心恰巧选在了每个簇的中心,无需迭代该聚类问题就已经完成。
Kmeans聚类及图像分割_第1张图片

图1 Kmeans聚类过程图示

2. 图像分割应用

  彩色图像中的每一个像素是三维空间中的一个点,三维对应红、绿、蓝三原色的强度,基于Kmeans聚类算法的图像分割以图像的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。如图2所示,不同的聚类簇数呈现不同的色彩特征。

Kmeans聚类及图像分割_第2张图片

图2 Kmeans用于图像分割

3. Kmeans聚类的缺点

  1) 聚类簇数K没有明确的选取准则,但是在实际应用中K一般不会设置很大,可以通过枚举法,比如令K从2到10。其实很多经典方法的参数都没有明确的选取准则,如PCA的主元个数,可以通过多次实验或者采取一些小技巧来选择,一般都会达到很好的效果。
  2) 从Kmeans算法框架可以看出,该算法的每一次迭代都要遍历所有样本,计算每个样本到所有聚类中心的距离,因此当样本规模非常大时,算法的时间开销是非常大的。
  3) Kmeans算法是基于距离的划分方法,只适用于分布为凸形的数据集,不适合聚类非凸形状的类簇,如图3所示。

Kmeans聚类及图像分割_第3张图片 Kmeans聚类及图像分割_第4张图片 Kmeans聚类及图像分割_第5张图片

图3 Kmeans聚类的缺点

你可能感兴趣的:(机器学习,聚类,Kmeans,图像分割,机器学习)