Grid-based Clustering详解
第二十三次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇作为密度聚类算法族的第二篇,主要是介绍其中最流行的一类算法——Grid-based Clustering,并对该类算法中最具代表性的DENCLUE(Density Clustering)算法进行介绍,其他密度聚类算法的链接可以在《DBSCAN详解(密度聚类算法开篇)》这篇文章的最后找到。
Grid-based Clustering
基于网格的聚类(Grid-based Clustering)通过扫描数据集,将数据空间根据所选属性划分为数个网格单元,并将样本点划分到相应的单元中,最后根据单元的密度形成簇,这种方法在低维空间中比较有效,而且只需通过扫描一遍数据集,就可以得到每个单元格中样本点的分布情况,具体的伪代码如下图所示
定义网格单元
由于网格单元是跟据数据集的属性进行划分的,因此对于高维数据,为了便于可视化,需要选择用于划分的特征或特征组合。需要注意的是,有些属性具有很高的时间(空间)自相关性,这些属性会产生冗余的信息,还会使样本点得到不公平的分配,因此还需要基于一个或多个非密度的统计量来对单元进行过滤。选定用于划分的特征后,对于连续属性或可取值较多的离散属性,为了不使最后划分的网格单元过多,需要对这些属性进行离散化处理,下面介绍三种基本的划分方法:
(1)等宽法:将属性值划分为等宽的区间,这种方法产生的单元都具有相同的体积(或者其他的计量量),最后度量单元密度只需要得到该单元中的样本数就可以;
(2)聚类:在单个属性上使用聚类,得到多个簇划分之后,使用这些划分信息对属性进行划分;
(3)MAFIA中用到的方法是,先将属性划分为大量等宽区间,之后对密度相近的空间进行合并;
不同的网格单元划分方式对最后的聚类效果会产生巨大的影响。
网格单元密度
最简单的度量方式就是用单元中的样本点除以单元的体积(或其他计量量),在前面提到的等宽划分单元网格的方法,单元的样本数量直接反映了密度信息。如下图所示,是一种基于等宽法处理的二维网格的密度分布
由稠密网格单元形成簇
如上述例子所示,明显存在着两个簇,这是由于这两个簇在密度分布图中被低密度区域明显的分隔开了,因此,如何定义和处理低密度网格单元对聚类结果又很大的影响。另一个影响因素是邻接单元的定义,对于上述这种二维网格可以将邻接单元的数量设置为4个或8个。当定义好密度阈值后,就可以删除那些低密度网格单元使得邻接单元变得清晰可见,在定义密度阈值时会遇到与DBSCAN中相同的问题,具体的在下一部分论述。
优缺点
首先,这种聚类方法对于低维数据是有效的,而且只需要对数据集进行一次扫描就可以确定每个样本所属的单元以及每个单元中的样本点数,因此,从定义单元格到获得密度分布所需的时间和空间复杂度仅为。
同样,这种方法的缺点也显而易见,二维网格所需的存储空间是,虽然可以只存储那些密度不为0的单元,但是随着网格的维度提高,存储空间是随指数级递增的,尽管采用某些有效的数据结构,这种空间开销也是巨大的。另外,为了使最终得到的簇划分边缘更清晰,需要对网格进行细化,但是由于样本在数据空间不是均匀分布的,单元数量的增加会使其他簇中的单元密度产生较大的波动,甚至会使某些簇中的单元密度为零(网格维度增加也会导致这种问题)。
由于最终的簇是基于网格单元的密度进行划分的,因此密度阈值的设置极为重要,与DBSCAN类似,当数据集存在密度相差较大的簇时,阈值设置的过高可能会丢失一部分的簇,设置的过低则有可能使得本应分开的两个簇合并。要小心的定义网格,不适当的定义有时会造成同一个簇中的样本被分散在多个单元中,以至于整个簇被错误的丢弃。
DENCLUE(Density Clustering)聚类
DENCLUE(Density Clustering)聚类基于统计学和模式识别领域里的“核密度估计”(Kernel Density Estimate),这种技术的目标是用总密度函数来描述数据的分布,其中,每个点对总密度函数的贡献用一个“影响函数”(Influence Function)或“核函数”(Kernel Function)来表示,属性空间中某一点的总密度是与该点相关联的每个点的影响函数之和。通常情况下,核函数或影响函数是对称的,并且随着样本点之间的距离增加而下降,因此可以直观的反映数据集的密度分布,例如高斯核函数,下图是使用该函数对12个点的集合进行核密度估计的例子。
DENCLUE聚类是一种基于密度的聚类方法,和上述讨论类似,他用与每个点相关联的影响函数之和对数据集进行总密度建模,最终得到一个在属性空间中的用来描述数据集总密度的密度函数。最终得到的总密度函数会有局部尖峰(局部密度极大值)和局部低谷(局部密度极小值),这些“尖峰”用来以自然的方式定义簇,其中每一个“尖峰”对应了一个簇质心,而簇与簇之间通过“低谷”来分离。
在该算法中,“尖峰”也被称为“局部吸引点”,而那些与局部吸引点相关联的样本点被定义为一个簇,或者称为局部吸引点的“局部影响区域”。根据密度阈值,那些密度低于的尖峰和他们所代表的簇被定义为“噪声”,而那些密度位于之上但是簇中仍有一部分点位于之下的尖峰将被视为一个“普通的簇”来对待,当两个邻近的尖峰同时处于之上且他们之间每个样本点处的密度均高于时,这两个尖峰所代表的簇将会被合并为一个簇来处理,下图是该算法的高层细节概括来的伪代码(如图3)。
下图是一个一维数据集的DENCLUE聚类实例,可以从图中看出A~E是数据集总密度函数的尖峰,他们各自的影响区域根据局部密度低谷由虚线分离开来,是图中所示的密度阈值。根据该算法的定义可知,图中A和B所代表的局部密度影响区域各自形成一个簇,C所代表的影响区域由于处在之下而被当作噪声点来处理,而D和E所代表的的影响区域被合并为一个簇。
需要注意的是,“核密度估计”由于需要估计所有点对该点处总密度的影响,因此时间复杂度是,这里是数据集的大小,在DENCLUE中对这个方法做了改进,算法首先在属性空间中对数据集进行网格单元划分,当进行总密度函数建模时,仅考虑那些与该点所在网格单元邻接的“稠密”网格单元中的样本点的影响,虽然这种方法会丢失一定的精度,但是时间复杂度大大减小。
DENCLUE聚类有着基于密度聚类(如DBSCAN)的优点和缺点,他可以发现离群点和噪声点,以及那些形状和大小不同的簇,但是在处理具有不同密度的簇时,该算法会产生一定问题。另外,由于该算法首先基于网格对数据集进行处理,因此如何定义网格的属性会对簇的有效性产生很大的影响,而且即使是采用了改进过后的核密度估计,该算法的时间复杂度也会比其他基于密度的聚类更高。