詳解DBSCAN聚類算法

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爲邊界點。
定義2
定義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直接密度可達。
定義3

定義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密度可達。
定義4

定義5(密度相連)若有點oo,使得點pp和點qq都由oo密度可達,那麼稱點pp和點qq密度相連的。
密度相連性是一種對稱可逆的關係。如下圖所示,點pp和點qq是密度相連的。
定義5

定義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 僞代碼

根據以上算法,寫出如下僞代碼的形式:

在這裏插入圖片描述
其中ExpandCluster函數的僞代碼形式如下:
在這裏插入圖片描述


4 實驗結果

利用 SEQUOIA 2000 的部分測試樣本,測試DBSCAN算法以及CLARANS算法的聚類效果,並做對比。
以下是CLARANS算法的聚類結果:
在這裏插入圖片描述

以下是DBSCAN的聚類結果:

在這裏插入圖片描述

由實驗結果可以看出,DBSCAN對任意形狀的樣本集都具有較好的更符合人類直觀的聚類效果,並在聚類的同時可以找出噪聲點並排除噪聲點。

下表展示了DBSCAN算法與CLARANS算法的聚類效率的對比(單位 秒):
在這裏插入圖片描述
由表可以看出,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章