Grid-based Clustering详解
第二十三次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇作为密度聚类算法族的第二篇,主要是介绍其中最流行的一类算法——Grid-based Clustering,并对该类算法中最具代表性的DENCLUE(Density Clustering)算法进行介绍,其他密度聚类算法的链接可以在《DBSCAN详解(密度聚类算法开篇)》这篇文章的最后找到。
Grid-based Clustering
基于网格的聚类(Grid-based Clustering)通过扫描数据集,将数据空间根据所选属性划分为数个网格单元,并将样本点划分到相应的单元中,最后根据单元的密度形成簇,这种方法在低维空间中比较有效,而且只需通过扫描一遍数据集,就可以得到每个单元格中样本点的分布情况,具体的伪代码如下图所示
![](https://i-blog.csdnimg.cn/blog_migrate/05b544582421439c83d19eecf57f876d.png)
定义网格单元
由于网格单元是跟据数据集的属性进行划分的,因此对于高维数据,为了便于可视化,需要选择用于划分的特征或特征组合。需要注意的是,有些属性具有很高的时间(空间)自相关性,这些属性会产生冗余的信息,还会使样本点得到不公平的分配,因此还需要基于一个或多个非密度的统计量来对单元进行过滤。选定用于划分的特征后,对于连续属性或可取值较多的离散属性,为了不使最后划分的网格单元过多,需要对这些属性进行离散化处理,下面介绍三种基本的划分方法:
(1)等宽法:将属性值划分为等宽的区间,这种方法产生的单元都具有相同的体积(或者其他的计量量),最后度量单元密度只需要得到该单元中的样本数就可以;
(2)聚类:在单个属性上使用聚类,得到多个簇划分之后,使用这些划分信息对属性进行划分;
(3)MAFIA中用到的方法是,先将属性划分为大量等宽区间,之后对密度相近的空间进行合并;
不同的网格单元划分方式对最后的聚类效果会产生巨大的影响。
网格单元密度
最简单的度量方式就是用单元中的样本点除以单元的体积(或其他计量量),在前面提到的等宽划分单元网格的方法,单元的样本数量直接反映了密度信息。如下图所示,是一种基于等宽法处理的二维网格的密度分布
![](https://i-blog.csdnimg.cn/blog_migrate/c92a025b656d226ca218673e6cb03150.png)
由稠密网格单元形成簇
如上述例子所示,明显存在着两个簇,这是由于这两个簇在密度分布图中被低密度区域明显的分隔开了,因此,如何定义和处理低密度网格单元对聚类结果又很大的影响。另一个影响因素是邻接单元的定义,对于上述这种二维网格可以将邻接单元的数量设置为4个或8个。当定义好密度阈值后,就可以删除那些低密度网格单元使得邻接单元变得清晰可见,在定义密度阈值时会遇到与DBSCAN中相同的问题,具体的在下一部分论述。
优缺点
首先,这种聚类方法对于低维数据是有效的,而且只需要对数据集进行一次扫描就可以确定每个样本所属的单元以及每个单元中的样本点数,因此,从定义单元格到获得密度分布所需的时间和空间复杂度仅为 O ( m ) O\left(m\right) O(m)。
同样,这种方法的缺点也显而易见,二维网格所需的存储空间是