1、DBSCAN簡介
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基於密度的聚類方法)是一種基於密度的空間聚類算法。該算法將具有足夠密度的區域划分為簇,並在具有噪聲的空間數據庫中發現任意形狀的簇,它將簇定義為密度相連的點的最大集合。
該算法利用基於密度的聚類的概念,即要求聚類空間中的一定區域內所包含對象(點或其他空間對象)的數目不小於某一給定閾值。DBSCAN算法的顯著優點是聚類速度快且能夠有效處理噪聲點和發現任意形狀的空間聚類。但是由於它直接對整個數據庫進行操作且進行聚類時使用了一個全局性的表征密度的參數,因此也具有兩個比較明顯的弱點:
(1)當數據量增大時,要求較大的內存支持I/O消耗也很大;
(2)當空間聚類的密度不均勻、聚類間距差相差很大時,聚類質量較差。
2、DBSCAN和傳統聚類算法對比
DBSCAN算法的目的在於過濾低密度區域,發現稠密度樣本點。跟傳統的基於層次的聚類和划分聚類的凸形聚類簇不同,該算法可以發現任意形狀的聚類簇,與傳統的算法相比它有如下優點:
(1)與K-MEANS比較起來,不需要輸入要划分的聚類個數;
(2)聚類簇的形狀沒有偏倚;
(3)可以在需要時輸入過濾噪聲的參數;
3、算法涉及的基本定義:
(2)核心對象:如果給定對象 鄰域內的樣本點數大於等於MinPts,則稱該對象為核心對象。
(3)直接密度可達:給定一個對象集合D,如果p在q的鄰域內,且q是一個核心對象,則我們說對象p從對象q出發是直接密度可達的(directly density-reachable)。
(4)密度可達:對於樣本集合D,如果存在一個對象鏈,
,對於
,
是從
關於
和 MinPts直接密度可達,則對象p是從對象q關於
和 MinPts密度可達的(density-reachable)。
(5)密度相連:如果存在對象,使對象p和q都是從o關於
和 MinPts密度可達的,那么對象p到q是關於
和 MinPts密度相連的(density-connected)。
可以發現,密度可達是直接密度可達的傳遞閉包,並且這種關系是非對稱的。只有核心對象之間相互密度可達。然而,密度相連是對稱關系。DBSCAN目的是找到密度相連對象的最大集合。
4、DBSCAN算法的聚類過程
DBSCAN算法基於一個事實:一個聚類可以由其中的任何核心對象唯一確定。等價可以表述為:任一滿足核心對象條件的數據對象p,數據庫D中所有從p密度可達的數據對象o所組成的集合構成了一個完整的聚類C,且p屬於C。
算法的具體聚類過程如下:
掃描整個數據集,找到任意一個核心點,對該核心點進行擴充。擴充的方法是尋找從該核心點出發的所有密度相連的數據點(注意是密度相連)。遍歷該核心點的鄰域內的所有核心點(因為邊界點是無法擴充的),尋找與這些數據點密度相連的點,直到沒有可以擴充的數據點為止。最后聚類成的簇的邊界節點都是非核心數據點。之后就是重新掃描數據集(不包括之前尋找到的簇中的任何數據點),尋找沒有被聚類的核心點,再重復上面的步驟,對該核心點進行擴充直到數據集中沒有新的核心點為止。數據集中沒有包含在任何簇中的數據點就構成異常點。
5、算法偽代碼
算法描述:
算法: DBSCAN
輸入: E——半徑
MinPts——給定點在E鄰域內成為核心對象的最小鄰域點數。
D——集合。
輸出: 目標類簇集合
方法: Repeat
1) 判斷輸入點是否為核心對象
2) 找出核心對象的E鄰域中的所有直接密度可達點。
Until 所有輸入點都判斷完畢
Repeat
針對所有核心對象的E鄰域內所有直接密度可達點找到最大密度相連對象集合,中間涉及到一些密度可達對象的合並。
Until 所有核心對象的E領域都遍歷完畢