聚类算法大盘点


最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结.
本文涉及到的聚类算法较多,请允许我慢慢更新.

1 层次聚类 (Agglomerative Clustering)

层次聚类也叫系统聚类,和K-means一起是最常用的聚类方式.
聚类效果如下:

它的实现方法有两种:

  1. 凝聚法
    自下而上.从点作为个体簇开始.迭代时每一步合并两个最接近的簇,直到所有样本合并为一簇.
  2. 分裂法
    自上而下.从包含所有样本点的某个簇开始.迭代时每一步分裂一个个体簇,直到所有簇都为个体簇.

1.1 凝聚层次聚类

凝聚法的关键是合并两个最接近的簇.合并的依据就是簇间的距离.不同的距离通常会得到不同的聚类结果.常用的有如下几种:

  1. 簇间最小距离
  2. 簇间最大距离
  3. 簇间平均距离
  4. 簇间质心距离
  5. Ward方法
    两个簇合的临近度定义为两个簇合并时导致的平方误离差平方和的增量.每次选取增量最小的两簇进行合并.该思想来源于方差分析:若分类正确,同类样平的离差平方和应该小,类与类之间的离差平方和应该大

我们可以看到,除Ward方法之外,簇间距离也依赖于不同簇中的点间距离.
点间距离可以采用欧氏距离,马氏距离,闵氏距离等等.
更多的点间距离可以看这篇文章 传送门

1.2 分裂层次聚类

分裂法与凝聚法刚好相反.每次分裂出一个个体簇.其判断标准有很多,例如”二分-kmeans”,”最小生成树聚类”等等.在这里先放着不讲.感兴趣的不妨转跳到对应位置看(目录有).

2 基于原型的聚类 (Agglomerative Clustering)

基于原型的定义是每个对象到该簇的原型的距离比到其他簇的原型的距离更近。其中,原型指样本空间中具有代表性的点.
通俗地讲,就是对象离哪个簇近,这个对象就属于哪个簇。因此这种聚类的核心是如何确定簇的原型.

2.1 K-均值 (K-means)

取原型为样本均值.即样本质心.K-means中的K指簇的个数.
目标函数函数为:

其中,

是第j个中心质心;是第i个样本
可以认为, 所属簇的特征函数; 也可认为是样本 隶属于簇的隶属度.隶属为1,不隶属为0.

2.2 二分K-均值 (bisecting K-means)

为克服 K-均值 算法收敛于局部最小值的问题,有人提出了另一个称为 二分K-均值 的算法.该算法首先将所有点作为一个簇,然后利用 K-means(K=2) 将该簇一分为二。之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度降低总SSE的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。

2.3 K-中心 (K-mediods)

从K-means中我们可以看到,它对异常点非常敏感.造成这个缺点的原因在于,每轮更新质点的时候是取簇中样本的平均.
要解决这个问题可以改变质点的更新方法.

2.4 模糊C均值 (FCM)

上面提到的K-均值聚类,其实它有另一个名字,C-均值聚类(HCM).要讲模糊C-均值,我们先从C-均值,也就是K-均值这个角度谈起.

3 基于密度的聚类

基于密度的聚类寻找被低密度区域分离的高密度区域.
对密度的不同定义衍生出不同的聚类方式

3.1 DBSCAN

DBSCAN,全称为 Density-Based Spatial Clustering of Applications with Noise.从名字可以看出,它能识别噪声.当然,噪声不属于任何一类.
DBSCAN用基于中心的方法定义密度.基于中心,指根据中心邻域内样点的数量衡量密度.

3.2 OPTICS

讲DBSCAN时,我们说它有一个缺点:当簇具有不同密度时,表现不佳(只能设置一组Eps和Minpts).如下图所示:
图中显示了隐藏在噪声中的4个簇.簇和噪声的密度由明暗度表示.左方框内的噪声密度与簇C,簇D相等.这时候.若设置高密度为阈值,可以识别出簇A与簇B,但簇C与簇D会被认为是噪声.若设置低密度为阈值,可以识别出簇C与簇D,但左方框内所有样本点会被认为是同一簇(包括噪声)

3.3 DENCLUE

DENCLUE (DENsity CLUstering). 它用与每个点相关联的影响函数之和对点集的总密度建模.结果总密度函数将具有局部尖峰(即局部密度最大值),以这些局部尖峰进行定簇.
具体地说,每个尖峰为簇的中心.对于每个样本点,通过爬山过程,寻找其最近的尖峰,认为其与该尖峰相关联,并标记为对应簇.这与K-means有点类似.只不过K-means通过初始化随机中心并迭代得到最后的簇中心.而DENCLUE则根据核函数局部尖峰定义簇中心.
同时,可以对核密度峰值加一个阈值限制.小于阈值的局部尖峰与其相关联的样本点都将认为是噪声,可以丢弃.

4 基于网格的聚类

基于网格的聚类,其基本思想是:

  1. 将每个属性的可能值分割成许多相邻的区间,创建网格单元的集合(类似于对各维特征进行等宽或等深分箱).将每个样本映射到网格单元中,同时统计每个网格单元的信息,如样本数,均值,中位数,最大最小值,分布等.之后所有处理的基本单位都是网格单元.
  2. 删除密度低于某个指定阈值的网格单元.
  3. 由稠密的单元组形成簇

ps:可以看到,基于网格的聚类或多或少与密度有关系


举个二维例子

若取阈值为8,则按单元格密度可划分为两类:

4.1 STING

STING (STatistical INformation Grid)算法本用于查询.但稍微修改一下便可用于聚类.
下面先介绍STING查询算法.

如图,我们将样本映射到不同分辨率的网格中.
其中,高层的每个单元被划分为多个低一层的单元,如下图:

这样查询的优点是每层的查询都可以过滤大量不相关的样本,从而缩小查询范围.


4.2 CLIQUE


CLIQUE (CLustering In QUEst)是综合运用基于密度和网格方法优点所构造的聚类方法.其核心思想是利用先验原理,找出在高维数据空间中存在的低维簇.在讲该算法之前,我们先了解一下”子空间聚类”

举个例子:

全空间中,样本被分成了三个簇,分别用”菱形”,”正方形”,”三角形”.噪声用”圆形”标记.
这个图解释了两个事实:

  1. 圆点集在全空间中不形成簇,但在子空间中却可能成簇.
  2. 存在于高维空间中的簇在低维空间中也将成簇(其投影成簇).

但是我们会发现,要寻找所有子空间并寻找其中的簇,子空间的数量是指数级的.这显然不现实的.需要剪枝来去掉不必要的寻找.CLIQUE就是为了完成这个工作.

如果还有不清楚的建议看一下Apriori算法.

5 基于图的聚类




稀疏化后,我们在此图(稀疏邻近度图)基础上进行簇的划分.

5.1 最小生成树(MST)聚类

显然这是”分裂的层次聚类算法”的一种.

5.2 OPOSSUM

OPOSSUM (Optimal Partitioning Of Sparse Similarities Using METIS) 从名字可以看出,这是一个”使用METIS算法对稀疏邻近度图进行最优划分” 的算法.
这里面有两个关键点:

  1. METIS算法
  2. 最优划分

遗憾的是到现在为止我还没找到METIS算法的具体时间步骤.希望大家能补充.我自己也会留意查找资料,希望尽快完善.

5.3 Chameleon

Chameleon算法的主要思想是:先对图进行划分,得到多个小簇,再利用自相似性概念对簇进行合并.


从上面的介绍可以看到,Chameleon算法的核心有两个

  1. 图的划分
  2. 自相似性的定义

6 基于神经网络的聚类

6.1 SOM

The End

断断续续写了半个月,终于是将这篇关于聚类的总结写完了.写的过程中查找资料,发现<数据挖掘导论>里也有比较系统的论述,因此文中的图很多都来自<数据挖掘导论>.也加上了很多自己的理解和其他资料的补充.
各位读者如果发现哪里有批漏,请一定联系我(文章最下方有我的邮箱).能得到大家的指点是我的荣幸!
如有需要转载的也请告知我,并注明出处.


E-mail: liangyaorong1995@outlook.com