最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结.
本文涉及到的聚类算法较多,请允许我慢慢更新.
层次聚类也叫系统聚类,和K-means一起是最常用的聚类方式.
聚类效果如下:
它的实现方法有两种:
凝聚法的关键是合并两个最接近的簇.合并的依据就是簇间的距离.不同的距离通常会得到不同的聚类结果.常用的有如下几种:
我们可以看到,除Ward方法之外,簇间距离也依赖于不同簇中的点间距离.
点间距离可以采用欧氏距离,马氏距离,闵氏距离等等.
更多的点间距离可以看这篇文章 传送门
分裂法与凝聚法刚好相反.每次分裂出一个个体簇.其判断标准有很多,例如”二分-kmeans”,”最小生成树聚类”等等.在这里先放着不讲.感兴趣的不妨转跳到对应位置看(目录有).
基于原型的定义是每个对象到该簇的原型的距离比到其他簇的原型的距离更近。其中,原型指样本空间中具有代表性的点.
通俗地讲,就是对象离哪个簇近,这个对象就属于哪个簇。因此这种聚类的核心是如何确定簇的原型.
取原型为样本均值.即样本质心.K-means中的K指簇的个数.
目标函数函数为:
其中,
是第j个中心质心;是第i个样本
可以认为, 是 所属簇的特征函数; 也可认为是样本 隶属于簇的隶属度.隶属为1,不隶属为0.
算法流程如下:
下图展示了对n个样本点进行K-Means聚类的效果,这里K取2。
K-means的优缺点
优点:
1. 计算速度快(算法复杂度),原理简单.
缺点:
1. K难以确定.
2. 受初始质心影响较大.
3. 对异常值非常敏感(平均确定质心).
为克服 K-均值 算法收敛于局部最小值的问题,有人提出了另一个称为 二分K-均值 的算法.该算法首先将所有点作为一个簇,然后利用 K-means(K=2) 将该簇一分为二。之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度降低总SSE的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。
从K-means中我们可以看到,它对异常点非常敏感.造成这个缺点的原因在于,每轮更新质点的时候是取簇中样本的平均.
要解决这个问题可以改变质点的更新方法.
K-mediods的核心思想
在 K-medoids中,我们将从当前簇中选取这样一个点作为中心点,使它到簇中其他所有点的距离之和最小。
其他步骤和K-means一致.
K-mediods的优缺点
优点:
1. 解决K-means对异常点敏感的问题
缺点:
1. 由于要对每个簇中样本点进行遍历来寻找中心点,因此计算复杂度较K-means大.因此只适用于较小的样本.
上面提到的K-均值聚类,其实它有另一个名字,C-均值聚类(HCM).要讲模糊C-均值,我们先从C-均值,也就是K-均值这个角度谈起.
HCM
从上面对K-均值算法的介绍中,我们已经知道了,K-均值的目标函数是:
其中,
这也是为什么叫H(Hard)CM.要么隶属该簇,要么不隶属该簇.太硬了.
引入模糊数学的观点,使得每个给定数据点用值在0,1间的隶度来确定其属于各个组的程度,便得到FCM的核心思想.
基于密度的聚类寻找被低密度区域分离的高密度区域.
对密度的不同定义衍生出不同的聚类方式
DBSCAN,全称为 Density-Based Spatial Clustering of Applications with Noise.从名字可以看出,它能识别噪声.当然,噪声不属于任何一类.
DBSCAN用基于中心的方法定义密度.基于中心,指根据中心邻域内样点的数量衡量密度.
DBSCAN的核心思想:
寻找最大的密度相连集合,并标记其为同一类.Eps(邻域半径)与Minpts(最少点数)由经验确定.
图中A为核心点; B,C为边界点;N为噪声点;
B从A出发密度可达; C从A出发密度可达;A,B,C,红点密度相连.因此该图中{A,B,C,红点}为一簇
DBSCAN的算法流程
聚类效果:
讲DBSCAN时,我们说它有一个缺点:当簇具有不同密度时,表现不佳(只能设置一组Eps和Minpts).如下图所示:
图中显示了隐藏在噪声中的4个簇.簇和噪声的密度由明暗度表示.左方框内的噪声密度与簇C,簇D相等.这时候.若设置高密度为阈值,可以识别出簇A与簇B,但簇C与簇D会被认为是噪声.若设置低密度为阈值,可以识别出簇C与簇D,但左方框内所有样本点会被认为是同一簇(包括噪声)
算法流程
聚类效果:
DENCLUE (DENsity CLUstering). 它用与每个点相关联的影响函数之和对点集的总密度建模.结果总密度函数将具有局部尖峰(即局部密度最大值),以这些局部尖峰进行定簇.
具体地说,每个尖峰为簇的中心.对于每个样本点,通过爬山过程,寻找其最近的尖峰,认为其与该尖峰相关联,并标记为对应簇.这与K-means有点类似.只不过K-means通过初始化随机中心并迭代得到最后的簇中心.而DENCLUE则根据核函数局部尖峰定义簇中心.
同时,可以对核密度峰值加一个阈值限制.小于阈值的局部尖峰与其相关联的样本点都将认为是噪声,可以丢弃.
下面用图来作直观解释.
如图所示,根据局部尖峰将这一维数据划分为A,B,C,D,E五簇(虚线为界)
加上阈值后,簇C(虚线为界)认为是噪声点,可以舍弃.
这里值得注意的是,与簇D相关联但小于阈值的样本点依然保留.类似于DBSCAN中的边界点.
由于簇D与簇E相连接的山谷依然大于阈值,因此可以将簇D与簇E合并为一簇;而簇A与簇B之间相连接的山谷小于阈值,因此簇A与簇B依然各自为一簇.
因此,添加阈值限制后可将数据集划分为三簇.
核密度估计(density estimation)
从上面的过程我们也可以看到,怎样估计核密度成为该算法的核心.
核密度估计这种技术的目标是通过函数描述数据的分布.对于核密度估计,每个点对总核密度的贡献用一个影响(influence)或核函数(kernel function)表示.总的核密度是与每个点相关联的影响函数之和.
通常,核函数是对称的,而且它的值随到点的距离增加而减少.例如,高斯核函数就是一个典型例子.
高斯核函数(对于某个点p):
其实就是高斯分布的核.其中x为网格中某一点.
该函数显示了样本点p对定义域中某点x的影响.
因此,x的总核密度为:
下图给出了高斯核总密度函数的计算例子
算法流程
算法优缺点
优点:
1. 核密度的引入给出了密度的一个精确定义.较DBSCAN更具理论依据
缺点:
1. 密度的精确定义带来了算法复杂度的增加.定义域网格中每个点都要遍历所有样本点以计算总核密度.网格大小确定了计算开销:网格大,计算量小,精度降低;网格小,计算量大,精度提高.
基于网格的聚类,其基本思想是:
ps:可以看到,基于网格的聚类或多或少与密度有关系
举个二维例子
若取阈值为8,则按单元格密度可划分为两类:
STING (STatistical INformation Grid)算法本用于查询.但稍微修改一下便可用于聚类.
下面先介绍STING查询算法.
如图,我们将样本映射到不同分辨率的网格中.
其中,高层的每个单元被划分为多个低一层的单元,如下图:
这样查询的优点是每层的查询都可以过滤大量不相关的样本,从而缩小查询范围.
CLIQUE (CLustering In QUEst)是综合运用基于密度和网格方法优点所构造的聚类方法.其核心思想是利用先验原理,找出在高维数据空间中存在的低维簇.在讲该算法之前,我们先了解一下”子空间聚类”
举个例子:
全空间中,样本被分成了三个簇,分别用”菱形”,”正方形”,”三角形”.噪声用”圆形”标记.
这个图解释了两个事实:
但是我们会发现,要寻找所有子空间并寻找其中的簇,子空间的数量是指数级的.这显然不现实的.需要剪枝来去掉不必要的寻找.CLIQUE就是为了完成这个工作.
先验原理
从上面的第二个事实,我们可引出定理:如果一个网格单元在全特征空间中稠密,那在其子空间中也稠密.
我们称之为先验原理(与Apriori算法中的先验原理一致)
CLIQUE算法
利用先验原理,我们可以减小需要判断的子空间范围.
CLIQUE算法对子空间的簇的搜索,与Apriori算法中频繁项集的搜索一致.
先贴出算法流程:
用上面先验原理的图示来解释:
如果还有不清楚的建议看一下Apriori算法.
稀疏化后,我们在此图(稀疏邻近度图)基础上进行簇的划分.
显然这是”分裂的层次聚类算法”的一种.
OPOSSUM (Optimal Partitioning Of Sparse Similarities Using METIS) 从名字可以看出,这是一个”使用METIS算法对稀疏邻近度图进行最优划分” 的算法.
这里面有两个关键点:
遗憾的是到现在为止我还没找到METIS算法的具体时间步骤.希望大家能补充.我自己也会留意查找资料,希望尽快完善.
Chameleon算法的主要思想是:先对图进行划分,得到多个小簇,再利用自相似性概念对簇进行合并.
从上面的介绍可以看到,Chameleon算法的核心有两个
图的划分. 从之前介绍的OPOSSUM算法我们可以看到,它对图的划分用的是METIS算法.因此在这里,对图的划分当然也可以用METIS算法.其他图的划分算法也是可以的.
自相似性 (self-similarity)的定义 可以看到,算法后面对簇的合并有点类似凝聚的层次聚类算法.其实工作的过程也是一样的.我们回想凝聚的层次聚类算法,它用的相似度定义有:簇间最小距离,簇间质心距离等.
这可能会导致错误的合并.例如下图中,左方(a),(b)有少量间隔,右方(a),(b)几乎没有间隔.那么按照簇间最小距离的标准,应该合并右方的两簇.但显然,左方两簇更相似.
而且,包括k-means,DBSCAN等算法在内,都是全局静态的簇模型.静态指合并簇的标准都是不变的,事先指定的.这导致算法不能处理大小,形状,密度等簇特性在簇间变化很大的情况.如k-means假定了所有簇都是球形;DBSCAN则假定所有簇的密度都一致.
因此希望能够提出动态的簇模型,能解决上面提到的不足.
何谓”动态”?静态指全局都该满足某个特定参数标准;那么对应的,动态就是指不须全局满足,只要簇与簇之间满足该标准即可.
这也就是Chameleon算法合并簇的关键思想:仅当合并后的结果簇类似原来的两簇时,这两个簇才应当合并.(注意,不一定非要合并某两簇,这与凝聚层次聚类最后会合并到一簇有区别)
下面我们介绍一下”自相关性”(self-similarity).
1. 边割集
一个无向连通图,去掉一个边集可以使其变成两个连通分量(两分量间不连通).则这个边集就是边割集.权重和最小的边割集为最小边割集.
边割集的平均权重衡量了两分量的距离.平均权重越大,两分量相距越远.
边割集的权重之和衡量了两分量的联系程度.在平均权重差不多的情况下,边数越多,联系就越紧密.
“簇间边割集”指的是连接两簇的边(K-最近邻图中)的集合.
“簇内边割集”指的是二分该簇(分成两个大致相等分量)的边(K-最近邻图中)的集合.
2. 相对接近度 (Relative Closeness, RC)
相对接近度是”簇间边割集平均权重”与”簇内边割集平均权重”的比值,用于衡量”簇间距离”与”簇内距离”.
其数学定义为:
其中
指簇i,j间边割集的平均权重;
指簇i内边割集的平均权重;
指簇i的样本数;
如下图:
右方两簇相对接近度比左方更大.因此右方更应当合并.
3. 相对互连度 (Relative Interconnectivity, RI)
相对互联度是”簇间边割集权和”与”簇内边割集权和”的比值,用于衡量了”簇间联系紧密程度”与”簇内联系紧密程度”.
其数学定义为:
其中
指簇i,j间边割集的权和;
指簇i内边割集的最小权和;
如下图:
上方两簇的相对互连度比下方两簇更大.因此上方两簇更应当合并.
4. 自相似性 (self-similarity)
RI与RC的不同组合方式产生了自相似性.一种方式是取最大化.为指定参数,一般大于1.即合并自相似度最大的两簇.当然若自相似度小于某个阈值,可以不合并.
算法流程:
算法优缺点
优点:
1. 动态簇模型,可很好地处理簇的大小,形状,密度不同的情况.
缺点:
1. 该算法以图的稀疏化与图的划分为基础.若该部分出问题,算法在后面步骤中是不能纠正的,只能合并.这在高维数据中是常常出现的.
断断续续写了半个月,终于是将这篇关于聚类的总结写完了.写的过程中查找资料,发现<数据挖掘导论>里也有比较系统的论述,因此文中的图很多都来自<数据挖掘导论>.也加上了很多自己的理解和其他资料的补充.
各位读者如果发现哪里有批漏,请一定联系我(文章最下方有我的邮箱).能得到大家的指点是我的荣幸!
如有需要转载的也请告知我,并注明出处.数据挖掘导论>数据挖掘导论>
E-mail: liangyaorong1995@outlook.com