DBSCAN详解
第二十二次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇作为密度聚类算法族的开篇,主要是介绍其中最流行的一种算法——DBSCAN,其他算法在后续会陆续更新,链接附在该篇文章的结尾处。
预备知识:
这一部分主要是谈一谈DBSCAN中一些概念的定义: -领域、核心对象、密度直达、密度可达以及密度相连。
-领域( -neighborhood)
与数据集 中样本点 的距离不大于 的样本点所构成的集合 被称为样本 的 -领域,即 。
核心对象(core object)
如果样本点 的 -领域内所含的样本点数大于 ,那么 就被称为核心对象,即 。
密度直达(directly density-reachable)
如果样本点 位于核心对象 的 -领域中,那么称样本点 由 密度直达,即 且 。注:密度直达一般不满足对称性,即 由 密度直达,但反之不一定成立。
密度可达(density-reachable)
存在样本点序列 ,其中 、 ,且 由 密度直达,那么称样本点 由 密度可达。注:密度可达同样不满足对称性,但是满足直递性,即若存在 由 密度可达, 由 密度可达,那么可以推出 由 密度可达。
密度相连(density-connected)
假设存在样本点 ,使得 和 均由 密度直达,那么就称 和 密度相连。注:密度相连满足对称性。
推导过程
首先介绍被DBSCAN划分出来的三类点(核心点、边界点和噪声点)、DBSCAN中簇是如何定义的,然后给出该算法的伪代码,并对如何选择算法中影响聚类效果的“邻域参数”进行介绍,最后介绍该算法的优缺点。
核心点(core point)、边界点(border point)和噪声点(noise point)
DBSCAN是密度聚类中的代表性算法,他主要通过样本密度来考察样本间的可连接性,其中簇的形成主要基于样本间距离的定义以及“邻域参数”
。根据以上条件,在DBSCAN中定义了这几个概念:
-领域、核心对象、密度直达、密度可达和密度相连,并由此引出了三种点的定义,
a)核心点:核心点即核心对象;
b)边界点:位于核心对象的
-领域上和领域中的点;
c)噪声点:既不是核心点又不是边界点的样本。
DBSCAN中的簇
DBSCAN中簇的定义为,样本集中由密度可达关系导出的最大的密度相连样本集合,这种类型的簇满足以下两条属性:
a)连接性:簇中任意两点均密度可达;
b)最大性:所有密度可达的点必定位于同一个簇中。
DBSCAN的伪代码
DBSCAN聚类的大体思路是,先将样本集中的核心点集提取出来,再随机选择一个核心点作为“种子”,通过密度可达性逐步向外发散,进而找到最大的密度相连区域,具体步骤如下所示
算法第1-7行:初始化核心对象集合
,遍历整个数据集
,找出核心对象并加入到该集合中;
算法第8-9行:初始化簇数目
,并将未访问样本集合
初始化为原始数据集
;
算法第10行:只要核心对象集合
中还有核心点存在,就要继续进行迭代;
算法第11行:将本次迭代中未访问的样本集合
拷贝到
中;
算法第12行:从
随机提取出一个核心点作为本次迭代的种子,并将其加入到队列
中;
算法第13行:将取到的核心点从未访问样本集合
中剔除;
算法第14-21行:只要队列
不为空集,那么每次从其中提取出首个元素,如果该元素为核心对象,那么就将同时存在在该核心对象
-领域中的所有点和未访问样本集合
中的样本点记录到队列
中,并且从
中剔除这些点;
算法第22-23行:找到簇中所有的样本点后,簇数目增一,然后将那些出现在未访问的样本集合原始拷贝
中,且未出现在当前未访问样本集合
的点集合作为本次迭代生成的簇
,最后从核心对象集合
中剔除
中出现的核心点;
算法第24行:当不满足第10行的迭代条件时,退出循环。
如何选择DBSCAN的参数
从上述讨论可知,“邻域参数” 是影响该算法聚类质量的两个重要的因素。根据该算法的伪代码,那些没有被分配到任何簇中的样本点被作为噪声来处理,当 设置的比较大而 设置的较小时,某些噪声点甚至会被选为核心点,而当 设置的比较小而 设置的较大时,该算法甚至不会生成有效簇。举例来说,下图中存在4个被噪声点包围的簇,点的密度越大,图像越深。
如果 设置的足够高,那么DBSCAN就会发现簇C和D,但是这时图中左侧的簇A、B及其周围的噪声点将被作为一个簇来处理,如果 设置的足够低,那么DBSCAN就会发现簇A和B,但是会将图中右侧的所有样本点做为早噪声来处理,因此如何选择邻域参数非常重要。一种基本的方法是基于 -距离的思想,选取某个 值,并计算数据集中所有样本点距离其第 (一般取4)个最近邻的距离,然后将这些距离进行排序,会得到类似于下图中的特性曲线
可以明显的看出图中某点处的 -距离急剧上升,那么这个点所对应的 -距离可以作为 的值,此时的 就是 。
DBSCAN的优缺点
DBSCAN的时间复杂度是
,其中
是数据集的大小,因此对于大数据集来说,这种算法是非常耗时的,即使是使用类似kd树的处理方式,其时间复杂度也会达到
,但是由于DBSCAN只需要存储数据集中每个样本点的类型(核心点、边界点或噪声点),因此其空间复杂度是
,即便是对于高维数据也是
。
DBSCAN与K-Means不同的是,他可以识别出任意类型的簇,不单单局限于椭圆类型,但是当样本集的密度变化较大时,邻域参数的选择非常困难,以至于无法找到一种合适的聚类模型,在处理高维数据时,距离度量的选择和密度的定义也越发困难。
以下是各原型聚类算法的链接
【1】DBSCAN《DBSCAN详解》
【2】未完待续…