带噪空间基于密度的聚类方法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)是一种比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在带噪声的数据集空间中发现任意形状的类别簇。和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间应该是紧密相连的,算法将这样的关系成为密度相连的。算法通过将密度相连的样本划为一类,这样就得到了一个聚类类别。再将所有样本划为多个密度相连的不同类别,就得到了最终的聚类结果。
定义1:(点的Eps-邻域)点 p p p的Eps-邻域 表示样本集合 D D D中于点 p p p的距离小于 E p s Eps Eps的所有样本点的集合,用 N E p s ( p ) N_{Eps}(p) NEps(p)表示,定义为
N E p s ( p ) = { q ∈ D ∣ d i s t ( p , q ) ≤ E p s } {{N}_{Eps}}(p)=\left\{ q\in D|dist(p,q)\le Eps \right\} NEps(p)={q∈D∣dist(p,q)≤Eps}
定义2:(核心点)样本点 p p p的Eps-邻域 的样本点个数用 ∣ N E p s ( p ) ∣ \left| {{N}_{Eps}}(p) \right| ∣NEps(p)∣表示,若其样本点数 ∣ N E p s ( p ) ∣ ≥ M i n P t s \left| {{N}_{Eps}}(p) \right|\ge MinPts ∣NEps(p)∣≥MinPts,则称样本点 p p p为核心点。其余的样本点成为边界点。如下图所示,点 p p p为核心点,点 q q q为边界点。
定义3:(直接密度可达)若样本点 p p p与点 q q q满足如下条件:
则称点 p p p可由点 q q q直接密度可达,反之不一定成立。如下图所示,因为点 p p p不是核心点,点 q q q是核心点,而点 p p p又在点 q q q的Eps-邻域 内,因此点 p p p可由点 q q q直接密度可达,点 q q q不能由点 p p p直接密度可达。
定义4:(密度可达)若有一串点 p 1 p_{1} p1、 p 2 p_{2} p2、…、 p N p_{N} pN,其中 p 1 ≡ q p_{1}\equiv q p1≡q, p N ≡ p p_{N}\equiv p pN≡p,而 p i + 1 p_{i+1} pi+1可由 p i p_{i} pi直接密度可达( i = 1 , 2 , . . . , N − 1 i=1,2,...,N-1 i=1,2,...,N−1),则称点 p p p可由点 q q q密度可达。
密度可达性是密度直接可达性的扩展,这是一种传递的关系,但不是对称可逆的,只有核心点对之间的密度可达性是对称的。如下图所示,点 p p p可由点 q q q密度可达,而点 q q q不能由点 p p p密度可达。
定义5(密度相连)若有点 o o o,使得点 p p p和点 q q q都由 o o o密度可达,那么称点 p p p和点 q q q是密度相连的。
密度相连性是一种对称可逆的关系。如下图所示,点 p p p和点 q q q是密度相连的。
定义6:(簇)设样本集为 D D D,那么参数为 E p s Eps Eps和 M i n P t s MinPts MinPts的簇C是 D D D的非空子集,它满足以下条件:
定义7:(噪声点)设 C 1 , C 2 , . . . , C k {{C}_{1}},{{C}_{2}},...,{{C}_{k}} C1,C2,...,Ck是样本集 D D D的所有的簇,那么噪声点就是数据集 D D D中,不属于以上所有簇的样本点。即
noise = { p ∈ D ∣ ∀ i : p ∉ C i } , i = 1 , 2 , . . . , k \text{noise}=\{p\in D|\forall i:p\notin {{C}_{i}}\},i=1,2,...,k noise={p∈D∣∀i:p∈/Ci},i=1,2,...,k
引理1:设点 p p p是样本集 D D D中的样本点,而且 ∣ N E p s ( p ) ∣ ≥ M i n P t s \left| {{N}_{Eps}}(p) \right|\ge MinPts ∣NEps(p)∣≥MinPts,即点 p p p是核心点,那么集合 O = { o ∣ o ∈ D , 且 o 由 p 密 度 可 达 } O=\{o|o\in D,且o由p密度可达\} O={o∣o∈D,且o由p密度可达}是一个簇。
簇 C C C中的每一个点有 C C C种的任意一个核心点密度可达的,所以簇 C C C刚好包含了所有由它的核心点密度可达的点。
引理2:设 C C C是一个簇, p p p是簇 C C C中的任意一点且 ∣ N E p s ( p ) ∣ ≥ M i n P t s \left| {{N}_{Eps}}(p) \right|\ge MinPts ∣NEps(p)∣≥MinPts,那么 C C C等价于集合 O O O,其中
O = { o ∣ o ∈ D , 且 o 由 p 密 度 可 达 } O=\{o|o\in D,且o由p密度可达\} O={o∣o∈D,且o由p密度可达}
输入:样本集 D = { x 1 , x 2 , . . . , x m } D=\{x_{1},x_{2},...,x_{m}\} D={x1,x2,...,xm},邻域参数( E p s Eps Eps, M i n P t s MinPts MinPts)
输出:簇的划分 C = { C 1 , C 2 , . . . , C k } C=\{C_{1},C_{2},...,C_{k}\} C={C1,C2,...,Ck}
1) 初始化核心点集 Ω = ∅ \Omega =\varnothing Ω=∅ ,初始化聚类簇的序号 k = 0 k=0 k=0 ,初始化未访问的样本点集 Γ = D \Gamma =D Γ=D ,簇的划分 C = ∅ C=\varnothing C=∅
2) 对于 j = 1 , 2 , . . . , m j=1,2,...,m j=1,2,...,m,按照下列步骤找出所有的核心点:
3) 如果核心点集 Ω = ∅ \Omega =\varnothing Ω=∅ ,则算法结束,否则转入步骤4)
4)在核心点集 Ω \Omega Ω中,随机选择一个核心点 o o o,初始化当前簇的核心点队列 Ω c u r = o \Omega _{cur}={o} Ωcur=o,更新类别序号 k = k + 1 k=k+1 k=k+1,初始化当前簇样本集合 C k = { o } C_{k}=\{o\} Ck={o},更新未访问样本集合 Γ = Γ − { o } \Gamma = \Gamma - \{o\} Γ=Γ−{o}
5)如果当前簇的核心点队列 Ω c u r = ∅ \Omega _{cur}=\varnothing Ωcur=∅,则当前聚类簇 C k C_{k} Ck生成完毕,更新簇的划分 C = { C 1 , C 2 , . . . , C k } C=\{C_{1},C_{2},...,C_{k}\} C={C1,C2,...,Ck},更新核心点集 Ω = Ω − C k \Omega =\Omega - C_{k} Ω=Ω−Ck,转入步骤3)
6)在当前簇的核心点队列 Ω c u r \Omega _{cur} Ωcur中随机取出一个核心点 o ′ o^{'} o′,通过邻域距离阈值 E p s Eps Eps划出所有Eps-邻域 N E p s ( o ′ ) N_{Eps}(o^{'}) NEps(o′),令 Δ = N E p s ( o ′ ) ∩ Γ \Delta ={{N}_{Eps}}({{o}^{'}})\cap \Gamma Δ=NEps(o′)∩Γ,更新当前簇的样本集合 C k = C k ∪ Δ C_{k}=C_{k}\cup \Delta Ck=Ck∪Δ,更新未访问样本集合 Γ = Γ − Δ \Gamma = \Gamma - \Delta Γ=Γ−Δ,更新核心点队列 Ω c u r = Ω c u r ∪ ( Δ ∩ Ω ) − o ′ \Omega _{cur}=\Omega _{cur}\cup(\Delta\cap\Omega)-o^{'} Ωcur=Ωcur∪(Δ∩Ω)−o′,转入步骤5)
最终程序执行完成后将输出簇的划分结果 C = { C 1 , C 2 , . . . , C k } C=\{C_{1},C_{2},...,C_{k}\} C={C1,C2,...,Ck}。
根据以上算法,写出如下伪代码的形式:
利用 SEQUOIA 2000 的部分测试样本,测试DBSCAN算法以及CLARANS算法的聚类效果,并做对比。
以下是CLARANS算法的聚类结果:
以下是DBSCAN的聚类结果:
由实验结果可以看出,DBSCAN对任意形状的样本集都具有较好的更符合人类直观的聚类效果,并在聚类的同时可以找出噪声点并排除噪声点。
下表展示了DBSCAN算法与CLARANS算法的聚类效率的对比(单位 秒):
由表可以看出,DBSCAN的聚类效率更高,比CLARANS能快出1到2个数量级。
DBSCAN具有以下优点:
DBSCAN也有它的缺点:
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数 k k k,当然它最大的优势是可以发现任意形状的聚类簇,也就是说它可以用于非凸数据集的聚类,而不只是像K-Means等算法仅仅局限于凸样本集的聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。当数据集不是稠密的类型,就不适合采用DBSCAN算法。
[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