DBSCAN详解(密度聚类算法开篇)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40793975/article/details/82734297

DBSCAN详解

第二十二次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇作为密度聚类算法族的开篇,主要是介绍其中最流行的一种算法——DBSCAN,其他算法在后续会陆续更新,链接附在该篇文章的结尾处。

预备知识:

这一部分主要是谈一谈DBSCAN中一些概念的定义: ϵ -领域、核心对象、密度直达、密度可达以及密度相连。

ϵ -领域( ϵ -neighborhood)

  与数据集 D 中样本点 x j 的距离不大于 ϵ 的样本点所构成的集合 N ϵ ( x j ) 被称为样本 x j ϵ -领域,即 N ϵ ( x j ) = { x j D | d i s t ( x i , x j ) ϵ }

核心对象(core object)

  如果样本点 x j ϵ -领域内所含的样本点数大于 M i n P t s ,那么 x j 就被称为核心对象,即 | N ϵ ( x j ) | M i n P t s

密度直达(directly density-reachable)

  如果样本点 x i 位于核心对象 x j ϵ -领域中,那么称样本点 x i x j 密度直达,即 x i N ϵ ( x j ) | N ϵ ( x j ) | M i n P t s 。注:密度直达一般不满足对称性,即 x i x j 密度直达,但反之不一定成立。

密度可达(density-reachable)

  存在样本点序列 P 1 , P 2 , . . . , P n ,其中 P 1 = x j P n = x i ,且 P i + 1 P i 密度直达,那么称样本点 x i x j 密度可达。注:密度可达同样不满足对称性,但是满足直递性,即若存在 P i P j 密度可达, P j P k 密度可达,那么可以推出 P i P k 密度可达。

密度相连(density-connected)

  假设存在样本点 x k ,使得 x i x j 均由 x k 密度直达,那么就称 x i x j 密度相连。注:密度相连满足对称性。

推导过程

首先介绍被DBSCAN划分出来的三类点(核心点、边界点和噪声点)、DBSCAN中簇是如何定义的,然后给出该算法的伪代码,并对如何选择算法中影响聚类效果的“邻域参数”进行介绍,最后介绍该算法的优缺点。

核心点(core point)、边界点(border point)和噪声点(noise point)

  DBSCAN是密度聚类中的代表性算法,他主要通过样本密度来考察样本间的可连接性,其中簇的形成主要基于样本间距离的定义以及“邻域参数” ( ϵ , M i n P t s ) 。根据以上条件,在DBSCAN中定义了这几个概念: ϵ -领域、核心对象、密度直达、密度可达和密度相连,并由此引出了三种点的定义,
  a)核心点:核心点即核心对象;
  b)边界点:位于核心对象的 ϵ -领域上和领域中的点;
  c)噪声点:既不是核心点又不是边界点的样本。

DBSCAN中的簇

  DBSCAN中簇的定义为,样本集中由密度可达关系导出的最大的密度相连样本集合,这种类型的簇满足以下两条属性:
  a)连接性:簇中任意两点均密度可达;
  b)最大性:所有密度可达的点必定位于同一个簇中。

DBSCAN的伪代码

  DBSCAN聚类的大体思路是,先将样本集中的核心点集提取出来,再随机选择一个核心点作为“种子”,通过密度可达性逐步向外发散,进而找到最大的密度相连区域,具体步骤如下所示

算法第1-7行:初始化核心对象集合 Ω ,遍历整个数据集 D ,找出核心对象并加入到该集合中;
算法第8-9行:初始化簇数目 k ,并将未访问样本集合 Γ 初始化为原始数据集 D
算法第10行:只要核心对象集合 Ω 中还有核心点存在,就要继续进行迭代;
算法第11行:将本次迭代中未访问的样本集合 Γ 拷贝到 Γ o l d 中;
算法第12行:从 Ω 随机提取出一个核心点作为本次迭代的种子,并将其加入到队列 Q 中;
算法第13行:将取到的核心点从未访问样本集合 Γ 中剔除;
算法第14-21行:只要队列 Q 不为空集,那么每次从其中提取出首个元素,如果该元素为核心对象,那么就将同时存在在该核心对象 ϵ -领域中的所有点和未访问样本集合 Γ 中的样本点记录到队列 Q 中,并且从 Γ 中剔除这些点;
算法第22-23行:找到簇中所有的样本点后,簇数目增一,然后将那些出现在未访问的样本集合原始拷贝 Γ o l d 中,且未出现在当前未访问样本集合 Γ 的点集合作为本次迭代生成的簇 C k ,最后从核心对象集合 Ω 中剔除 C k 中出现的核心点;
算法第24行:当不满足第10行的迭代条件时,退出循环。

如何选择DBSCAN的参数

  从上述讨论可知,“邻域参数” ( ϵ , M i n P t s ) 是影响该算法聚类质量的两个重要的因素。根据该算法的伪代码,那些没有被分配到任何簇中的样本点被作为噪声来处理,当 ϵ 设置的比较大而 M i n P t s 设置的较小时,某些噪声点甚至会被选为核心点,而当 ϵ 设置的比较小而 M i n P t s 设置的较大时,该算法甚至不会生成有效簇。举例来说,下图中存在4个被噪声点包围的簇,点的密度越大,图像越深。

  如果 ϵ 设置的足够高,那么DBSCAN就会发现簇C和D,但是这时图中左侧的簇A、B及其周围的噪声点将被作为一个簇来处理,如果 ϵ 设置的足够低,那么DBSCAN就会发现簇A和B,但是会将图中右侧的所有样本点做为早噪声来处理,因此如何选择邻域参数非常重要。一种基本的方法是基于 k -距离的思想,选取某个 k 值,并计算数据集中所有样本点距离其第 k (一般取4)个最近邻的距离,然后将这些距离进行排序,会得到类似于下图中的特性曲线

可以明显的看出图中某点处的 k -距离急剧上升,那么这个点所对应的 k -距离可以作为 ϵ 的值,此时的 k 就是 M i n P t s

DBSCAN的优缺点

  DBSCAN的时间复杂度是 O ( m 2 ) ,其中 m 是数据集的大小,因此对于大数据集来说,这种算法是非常耗时的,即使是使用类似kd树的处理方式,其时间复杂度也会达到 O ( m log m ) ,但是由于DBSCAN只需要存储数据集中每个样本点的类型(核心点、边界点或噪声点),因此其空间复杂度是 O ( m ) ,即便是对于高维数据也是 O ( m )
  DBSCAN与K-Means不同的是,他可以识别出任意类型的簇,不单单局限于椭圆类型,但是当样本集的密度变化较大时,邻域参数的选择非常困难,以至于无法找到一种合适的聚类模型,在处理高维数据时,距离度量的选择和密度的定义也越发困难。


以下是各原型聚类算法的链接
【1】DBSCAN《DBSCAN详解》
【2】未完待续…

猜你喜欢

转载自blog.csdn.net/qq_40793975/article/details/82734297