DBSCAN算法的描述
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一個比較有代表性的基於密度的聚類算法。與劃分和層次聚類方法不同,它將簇定義爲密度相連的點的最大集合,能夠把具有足夠高密度的區域劃分爲簇,並可在噪聲的空間數據庫中發現任意形狀的聚類。
DBSCAN算法使用場景
如果數據集是稠密的,並且數據集不是凸的,那麼用DBSCAN會比K-Means聚類效果好很多,如果數據集不是稠密的,則不推薦用DBSCAN來聚類。
DBSCAN算法原理
DBSCAN基礎知識
領域: 對象o的鄰域就是以o爲中心,以爲半徑的空間。
核心對象: 若的領域至少包含MinPts個樣本,即,那麼是一個核心對象。
邊界點(edge point): 邊界點不是核心點,但落在某個核心點的鄰域內。
噪音點(outlier point): 既不是核心點,也不是邊界點的任何點。
直接密度可達: 對於樣本集合D,如果樣本點q在p的領域中,並且p是核心對象,那麼對象q從對象p直接密度可達(密度直達)。
密度可達: 對於樣本集合D,給定一串樣本點p1,p2…,pn,p=p1,q=pn,假如對象pi從pi-1直接密度可達,那麼對象q從對象p密度可達。
密度相連: 存在樣本集合D中的一點o,如果對象o到對象p和對象q都是密度可達的,那麼p和q密度相聯。
DBSCAN所定義的簇: 由密度可達關係導出的最大的密度相連樣本集合。
DBSCAN算法基本原理
- DBSCAN通過檢查數據集中每點的Eps鄰域來搜索簇,如果點p的Eps鄰域包含的點多於MinPts個,則創建一個以p爲核心對象的簇;
- 然後,DBSCAN迭代地聚集從這些核心對象直接密度可達的對象,這個過程可能涉及一些密度可達簇的合併;
- 當沒有新的點添加到任何簇時,該過程結束。
Wiki百科給出的DBSCAN算法的僞代碼:
輸入:數據集D,給定點在鄰域內成爲核心對象的最小鄰域點數:MinPts,鄰域半徑:Eps
輸出:簇集合
(1) 首先將數據集D中的所有對象標記爲未處理狀態
(2) for(數據集D中每個對象p) do
(3) if (p已經歸入某個簇或標記爲噪聲) then
(4) continue;
(5) else
(6) 檢查對象p的Eps鄰域 NEps(p) ;
(7) if (NEps(p)包含的對象數小於MinPts) then
(8) 標記對象p爲邊界點或噪聲點;
(9) else
(10) 標記對象p爲核心點,並建立新簇C, 並將p鄰域內所有點加入C
(11) for (NEps(p)中所有尚未被處理的對象q) do
(12) 檢查其Eps鄰域NEps(q),若NEps(q)包含至少MinPts個對象,則將NEps(q)中未歸入任何一個簇的對象加入C;
(13) end for
(14) end if
(15) end if
(16) end for
DBSCAN算法的時間複雜度和空間複雜度
時間複雜度
- DBSCAN的基本時間複雜度是 O(N*找出Eps領域中的點所需要的時間), N是點的個數。最壞情況下時間複雜度是O()
- 在低維空間數據中,有一些數據結構如KD樹,使得可以有效的檢索特定點給定距離內的所有點,時間複雜度可以降低到O(NlogN)
空間複雜度: 低維和高維數據中,其空間都是O(N),對於每個點它只需要維持少量數據,即簇標號和每個點的標識(核心點或邊界點或噪音點)
DBSCAN算法的調參
-
的值可以使用繪製k-距離曲線(k-distance graph)方法得到,在k-距離曲線圖明顯拐點位置爲對應較好的參數。若參數設置過小,大部分數據不能聚類;若參數設置過大,多個簇和大部分對象會歸併到同一個簇中。
k-距離定義:
給定K鄰域參數k,對於數據中的每個點,計算對應的第k個最近鄰域距離,並將數據集所有點對應的最近鄰域距離按照降序方式排序,稱這幅圖爲排序的k距離圖,選擇該圖中第一個谷值點位置對應的k距離值設定爲
-
MinPts的選取有一個指導性的原則(a rule of thumb),MinPts≥dim+1,其中dim表示待聚類數據的維度。MinPts設置爲1是不合理的,因爲設置爲1,則每個獨立點都是一個簇,MinPts≤2時,與層次距離最近鄰域結果相同,因此,MinPts必須選擇大於等於3的值。若該值選取過小,則稀疏簇中結果由於密度小於MinPts,從而被認爲是邊界點兒不被用於在類的進一步擴展;若該值過大,則密度較大的兩個鄰近簇可能被合併爲同一簇。因此,該值是否設置適當會對聚類結果造成較大影響。
DBSCAN算法的優缺點
算法優點
- DBSCAN不需要事先知道要形成的簇類的數量
- DBSCAN可以發現任意形狀的簇類;
- DBSCAN能夠識別出噪聲點。對離羣點有較好的魯棒性,甚至可以檢測離羣點;
- 可以在需要時輸入過濾噪聲的參數;
算法缺點
- 當數據量增大時,要求較大的內存支持I/O消耗也很大;
- 輸入參數敏感,確定參數Eps , MinPts困難 ,若選取不當 ,將造成聚類質量下降;
- 算法聚類效果依賴於距離公式選取,實際應用中常用歐式距離,對於高維數據,存在“維數災難”。