1 简介

带噪空间基于密度的聚类方法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)是一种比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在带噪声的数据集空间中发现任意形状的类别簇。和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。


2 算法

DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间应该是紧密相连的,算法将这样的关系成为密度相连的。算法通过将密度相连的样本划为一类,这样就得到了一个聚类类别。再将所有样本划为多个密度相连的不同类别,就得到了最终的聚类结果。

2.1 定义

定义1:(点的Eps-邻域)点ppEps-邻域 表示样本集合DD中于点pp的距离小于EpsEps的所有样本点的集合,用NEps(p)N_{Eps}(p)表示,定义为
NEps(p)={qDdist(p,q)Eps}{{N}_{Eps}}(p)=\left\{ q\in D|dist(p,q)\le Eps \right\}

定义2:(核心点)样本点ppEps-邻域 的样本点个数用NEps(p)\left| {{N}_{Eps}}(p) \right|表示,若其样本点数NEps(p)MinPts\left| {{N}_{Eps}}(p) \right|\ge MinPts,则称样本点pp为核心点。其余的样本点成为边界点。如下图所示,点pp为核心点,点qq为边界点。
DBSCAN聚类算法
定义3:(直接密度可达)若样本点pp与点qq满足如下条件:

  1. pNEps(q)p\in {{N}_{Eps}}(q)
  2. NEps(q)MinPts\left| {{N}_{Eps}}(q) \right|\ge MinPts(核心点条件)

则称点pp可由点qq直接密度可达,反之不一定成立。如下图所示,因为点pp不是核心点,点qq是核心点,而点pp又在点qqEps-邻域 内,因此点pp可由点qq直接密度可达,点qq不能由点pp直接密度可达。
DBSCAN聚类算法

定义4:(密度可达)若有一串点p1p_{1}p2p_{2}、…、pNp_{N},其中p1qp_{1}\equiv qpNpp_{N}\equiv p,而pi+1p_{i+1}可由pip_{i}直接密度可达(i=1,2,...,N1i=1,2,...,N-1),则称点pp可由点qq密度可达
密度可达性是密度直接可达性的扩展,这是一种传递的关系,但不是对称可逆的,只有核心点对之间的密度可达性是对称的。如下图所示,点pp可由点qq密度可达,而点qq不能由点pp密度可达。
DBSCAN聚类算法

定义5(密度相连)若有点oo,使得点pp和点qq都由oo密度可达,那么称点pp和点qq密度相连的。
密度相连性是一种对称可逆的关系。如下图所示,点pp和点qq是密度相连的。
DBSCAN聚类算法

定义6:(簇)设样本集为DD,那么参数为EpsEpsMinPtsMinPts的簇C是DD的非空子集,它满足以下条件:

  1. p,q\forall p,q,如果pCp\in C,而且点qq由点pp密度可达,那么点qq也属于簇C(极大性);
  2. p,qC\forall p,q\in Cpp和点qq是密度相连的(连接性)。

定义7:(噪声点)设C1,C2,...,Ck{{C}_{1}},{{C}_{2}},...,{{C}_{k}}是样本集DD的所有的簇,那么噪声点就是数据集DD中,不属于以上所有簇的样本点。即
noise={pDi:pCi},i=1,2,...,k\text{noise}=\{p\in D|\forall i:p\notin {{C}_{i}}\},i=1,2,...,k

引理1:设点pp是样本集DD中的样本点,而且NEps(p)MinPts\left| {{N}_{Eps}}(p) \right|\ge MinPts,即点pp是核心点,那么集合O={ooD,op}O=\{o|o\in D,且o由p密度可达\}是一个簇。
CC中的每一个点有CC种的任意一个核心点密度可达的,所以簇CC刚好包含了所有由它的核心点密度可达的点。

引理2:设CC是一个簇,pp是簇CC中的任意一点且NEps(p)MinPts\left| {{N}_{Eps}}(p) \right|\ge MinPts,那么CC等价于集合OO,其中
O={ooD,op}O=\{o|o\in D,且o由p密度可达\}

2.2 算法实现步骤

输入:样本集D={x1,x2,...,xm}D=\{x_{1},x_{2},...,x_{m}\},邻域参数(EpsEpsMinPtsMinPts

输出:簇的划分C={C1,C2,...,Ck}C=\{C_{1},C_{2},...,C_{k}\}

1) 初始化核心点集Ω=\Omega =\varnothing ,初始化聚类簇的序号k=0k=0 ,初始化未访问的样本点集Γ=D\Gamma =D ,簇的划分C=C=\varnothing

2) 对于j=1,2,...,mj=1,2,...,m,按照下列步骤找出所有的核心点:

  • 通过距离度量的方式,找到样本点xjx_{j}Eps-邻域 NEps(xj)N_{Eps}(x_{j})
  • 如果Eps-邻域 的点数NEps(p)MinPts\left| {{N}_{Eps}}(p) \right|\ge MinPts,则将xjx_{j}加入到核心点集Ω\Omega中:Ω=Ω{xj}\Omega =\Omega \cup \{{{x}_{j}}\}

3) 如果核心点集Ω=\Omega =\varnothing ,则算法结束,否则转入步骤4)

4)在核心点集Ω\Omega中,随机选择一个核心点oo,初始化当前簇的核心点队列Ωcur=o\Omega _{cur}={o},更新类别序号k=k+1k=k+1,初始化当前簇样本集合Ck={o}C_{k}=\{o\},更新未访问样本集合Γ=Γ{o}\Gamma = \Gamma - \{o\}

5)如果当前簇的核心点队列Ωcur=\Omega _{cur}=\varnothing,则当前聚类簇CkC_{k}生成完毕,更新簇的划分C={C1,C2,...,Ck}C=\{C_{1},C_{2},...,C_{k}\},更新核心点集Ω=ΩCk\Omega =\Omega - C_{k},转入步骤3)

6)在当前簇的核心点队列Ωcur\Omega _{cur}中随机取出一个核心点oo^{'},通过邻域距离阈值EpsEps划出所有Eps-邻域 NEps(o)N_{Eps}(o^{'}),令Δ=NEps(o)Γ\Delta ={{N}_{Eps}}({{o}^{'}})\cap \Gamma,更新当前簇的样本集合Ck=CkΔC_{k}=C_{k}\cup \Delta,更新未访问样本集合Γ=ΓΔ\Gamma = \Gamma - \Delta,更新核心点队列Ωcur=Ωcur(ΔΩ)o\Omega _{cur}=\Omega _{cur}\cup(\Delta\cap\Omega)-o^{'},转入步骤5)

最终程序执行完成后将输出簇的划分结果C={C1,C2,...,Ck}C=\{C_{1},C_{2},...,C_{k}\}


3 伪代码

根据以上算法,写出如下伪代码的形式:

DBSCAN聚类算法
其中ExpandCluster函数的伪代码形式如下:
DBSCAN聚类算法


4 实验结果

利用 SEQUOIA 2000 的部分测试样本,测试DBSCAN算法以及CLARANS算法的聚类效果,并做对比。
以下是CLARANS算法的聚类结果:
DBSCAN聚类算法

以下是DBSCAN的聚类结果:

DBSCAN聚类算法

由实验结果可以看出,DBSCAN对任意形状的样本集都具有较好的更符合人类直观的聚类效果,并在聚类的同时可以找出噪声点并排除噪声点。

下表展示了DBSCAN算法与CLARANS算法的聚类效率的对比(单位 秒):
DBSCAN聚类算法
由表可以看出,DBSCAN的聚类效率更高,比CLARANS能快出1到2个数量级。


5 优缺点

DBSCAN具有以下优点:

  • 可以对任意形状的稠密数据集进行聚类;
  • 可以在聚类的同时发现异常点,对数据集中的异常点不敏感;
  • 相对于K-Means等聚类方法,DBSCAN对结果没有偏倚,其初始值的设置几乎不会影响聚类结果

DBSCAN也有它的缺点:

  • 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合;
  • 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进;
  • 调参相对于传统的K-Means之类的聚类算法较为复杂,主要需要对距离阈值EpsEps和邻域样本数阈值MinPtsMinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

6 小结

和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数kk,当然它最大的优势是可以发现任意形状的聚类簇,也就是说它可以用于非凸数据集的聚类,而不只是像K-Means等算法仅仅局限于凸样本集的聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。当数据集不是稠密的类型,就不适合采用DBSCAN算法。


7 参考文献

[1] Ester, Martin & Kriegel, Hans-Peter & Sander, Joerg & Xu, Xiaowei. (1996). A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise. KDD. 96. 226-231.
[2] DBSCAN密度聚类算法
[3] 聚类分析常用算法原理:KMeans,DBSCAN, 层次聚类


原创性声明:本文属于作者原创性文章,小弟码字辛苦,转载还请注明出处。谢谢~

如果有哪些地方表述的不够得体和清晰,有存在的任何问题,欢迎评论和指正,谢谢各路大佬。

有需要相关技术支持的可咨询QQ:297461921

相关文章: