DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一個比較有代表性的基於密度的聚類算法。與劃分和層次聚類方法不同,它將簇定義爲密度相連的點的最大集合,能夠把具有足夠高密度的區域劃分爲簇,並可在噪聲的空間數據庫中發現任意形狀的聚類。
DBSCAN算法最重要的兩個參數是ε \varepsilon ε 和M i n P t s MinPts M i n P t s ,其中ε \varepsilon ε 描述了某一樣本的鄰域距離閾值,M i n P t s MinPts M i n P t s 描述了某一樣本的距離爲ε \varepsilon ε 的鄰域中樣本個數的閾值。
DBSCAN算法中的概念
ε \varepsilon ε : 包含樣本集D D D 中與某個樣本x x x 的距離不大於ε \varepsilon ε 的子樣本集。
核心對象: 對於任意一個樣本x x x ,若其ε \varepsilon ε 鄰域中至少包含M i n P t s MinPts M i n P t s 個樣本,則該樣本x x x 是核心對象。
密度直達: 若x i x_i x i 位於x j x_j x j 的ε \varepsilon ε 鄰域中,且x j x_j x j 是核心對象,則稱x i x_i x i 由x j x_j x j 密度直達,反之不一定成立。
密度可達: 對於x i x_i x i 和x j x_j x j ,若存在樣本序列{ P 1 , P 2 , . . . , P t } \begin{Bmatrix}P_1,P_2,...,P_t\end{Bmatrix} { P 1 , P 2 , . . . , P t } ,滿足P 1 = x i , P t = x j P_1=x_i,P_t=x_j P 1 = x i , P t = x j 且P t + 1 P_{t+1} P t + 1 由P t P_{t} P t 密度直達,則稱x i x_i x i 由x j x_j x j 密度可達。密度可達滿足傳遞性,此時序列P 1 , P 2 , . . . , P t − 1 P_1,P_2,...,P_{t-1} P 1 , P 2 , . . . , P t − 1 均爲核心對象,因爲只有核心對象才能使其他樣本密度直達。
密度相連: 對於x i x_i x i 和x j x_j x j ,若存在覈心對象x k x_k x k ,使x i x_i x i 和x j x_j x j 均由x k x_k x k 密度可達,則稱x i x_i x i 和x j x_j x j 密度相連。密度相連滿足對稱性。
DBSCAN算法流程
輸入樣本集D = { x 1 , x 2 , . . . , x m } D=\begin{Bmatrix}x_1,x_2,...,x_m\end{Bmatrix} D = { x 1 , x 2 , . . . , x m } ,鄰域參數(ε \varepsilon ε 和M i n P t s MinPts M i n P t s ),樣本距離度量方式。
1.初始化核心對象集合Ω = ∅ \Omega= \varnothing Ω = ∅ ,初始化聚類簇數K=0,初始化爲未訪問樣本集合Γ = D \Gamma=D Γ = D ,簇劃分C = ∅ C= \varnothing C = ∅ 。
2.對於j = 1 , 2 , 3... m j=1,2,3...m j = 1 , 2 , 3 . . . m ,按下面步驟找出所有核心對象:
a.通過距離度量方式,找到樣本x j x_j x j 的ε \varepsilon ε 鄰域子樣本集N ε ( x j ) N_\varepsilon(x_j) N ε ( x j ) ;
b.若子樣本集中樣本個數滿足N ε ( x j ) ≥ M i n P t s N_\varepsilon(x_j)\geq MinPts N ε ( x j ) ≥ M i n P t s ,則將樣本x j x_j x j 加入核心對象樣本集合Ω = Ω ∪ { x j } \Omega= \Omega\cup\begin{Bmatrix}x_j\end{Bmatrix} Ω = Ω ∪ { x j } ;
3.如果Ω = ∅ \Omega= \varnothing Ω = ∅ ,則算法結束,否則進入4;
4.在覈心對象集合中,隨機選擇一個核心對象o,初始化當前簇核心對象隊列Ω c u t = { o } \Omega_{cut}=\begin{Bmatrix}o\end{Bmatrix} Ω c u t = { o } ,初始化類別序號K = K + 1 K=K+1 K = K + 1 ,初始化當前簇樣本集合C K = { o } C_K=\begin{Bmatrix}o\end{Bmatrix} C K = { o } ,更新未訪問集合Γ = Γ − { o } \Gamma=\Gamma-\begin{Bmatrix}o\end{Bmatrix} Γ = Γ − { o } ;
5.若當前簇核心對象隊列Ω c u t = ∅ \Omega_{cut}=\varnothing Ω c u t = ∅ ,則當前聚類簇C K C_K C K 生成完畢,更新簇劃分C = { C 1 , C 2 , C 3 . . . C K } C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix} C = { C 1 , C 2 , C 3 . . . C K } ,更新核心對象集合Ω = Ω − C K \Omega= \Omega-C_K Ω = Ω − C K ,轉入3;
6.在當前簇核心對象隊列Ω c u t \Omega_{cut} Ω c u t 中取出一個核心對象o ′ o' o ′ ,通過鄰域距離閾值ε \varepsilon ε 找出所有的ε \varepsilon ε 鄰域子樣本集N ε ( o ′ ) N_\varepsilon(o') N ε ( o ′ ) ,令Δ = N ε ( o ′ ) ∩ Γ \Delta =N_\varepsilon (o')\cap \Gamma Δ = N ε ( o ′ ) ∩ Γ ,更新當前簇樣本集合C K = C K ∪ Δ C_K=C_K\cup\Delta C K = C K ∪ Δ ,更新未訪問樣本集合Γ = Γ − Δ \Gamma=\Gamma-\Delta Γ = Γ − Δ ,更新Ω c u t = Ω c u t ∪ ( N ε ( o ′ ) ∩ Ω ) \Omega_{cut}=\Omega_{cut}\cup(N_\varepsilon(o')\cap\Omega) Ω c u t = Ω c u t ∪ ( N ε ( o ′ ) ∩ Ω ) ,轉入步驟5;
輸出結果:簇劃分C = { C 1 , C 2 , C 3 . . . C K } C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix} C = { C 1 , C 2 , C 3 . . . C K }
DBSCAN算法總結
優點:
1.可以對任意形狀的稠密數據集進行聚類,K-Means一般只適用於凸數據集,而DBSCAN無此限制;
2.可以在聚類的同時發現異常點,對異常點不敏感;
3.聚類結果沒有偏倚,相對的,K-Means初始值對聚類結果有很大影響。
缺點:
1.如果樣本密度不均勻、聚類間距差相差很大時,聚類質量較差,這時一般不適用於DBSCAN;
2.如果數據較大時,收斂時間較長,此時可以對搜索最近鄰時建立的KD樹或者球樹進行規模限制來進行改進;
3.調參較傳統的K-Means複雜,需要對ε \varepsilon ε 和M i n P t s MinPts M i n P t s 聯合調參,不同參數組合對結果影響很大。