聚類——DBSCAN

轉載自:html

https://www.cnblogs.com/pinard/p/6208966.html算法

http://www.cnblogs.com/pinard/p/6217852.html數組

https://blog.csdn.net/zhouxianen1987/article/details/68945844數據結構

原理+實踐dom


原理tornado

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具備噪聲的基於密度的聚類方法)是一種很典型的密度聚類算法,和K-Means,BIRCH這些通常只適用於凸樣本集的聚類相比,DBSCAN既能夠適用於凸樣本集,也能夠適用於非凸樣本集。url

DBSCAN是一種基於密度的聚類算法,這類密度聚類算法通常假定類別能夠經過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本週圍不遠處必定有同類別的樣本存在。經過將緊密相連的樣本劃爲一類,這樣就獲得了一個聚類類別。經過將全部各組緊密相連的樣本劃爲各個不一樣的類別,則咱們就獲得了最終的全部聚類類別結果。spa

  • 流程

輸入:數據集D.net

         給定點在鄰域內成爲核心對象的最小鄰域點數:MinPtshtm

         鄰域半徑:Eps  

輸出:簇集合

計算過程:

(1)DBSCAN經過檢查數據集中每點的Eps鄰域來搜索簇,若是點p的Eps鄰域包含的點多於MinPts個,則建立一個以p爲核心對象的簇;
(2)而後,DBSCAN迭代地彙集從這些核心對象直接密度可達的對象,這個過程可能涉及一些密度可達簇的合併;
(3)當沒有新的點添加到任何簇時,該過程結束。

  • 相關概念

DBSCAN是基於一組鄰域來描述樣本集的緊密程度的,參數(Eps, MinPts)用來描述鄰域的樣本分佈緊密程度。其中,Eps描述了某同樣本的鄰域距離閾值,MinPts描述了某同樣本的距離爲Eps的鄰域中樣本個數的閾值。

假設個人樣本集是D=(x1,x2,...,xm),則DBSCAN具體的密度描述定義以下:

  1. Eps鄰域:給定對象半徑Eps內的鄰域稱爲該對象的Eps鄰域
  2. 核心點(core point):若是對象的Eps鄰域至少包含最小數目MinPts的對象,則稱該對象爲核心對象
  3. 邊界點(edge point):邊界點不是核心點,但落在某個核心點的鄰域內
  4. 噪音點(outlier point):既不是核心點,也不是邊界點的任何點
  5. 密度直達:若是xi位於xj的Eps鄰域中,且xj是核心對象,則稱xi由xj密度直達。注意反之不必定成立,即此時不能說xj由xi密度直達, 除非且xi也是核心對象。不知足對稱性
  6. 密度可達:對於xi和xj,若是存在樣本樣本序列p1,p2,...,pT,知足p1=xi,pT=xj, 且pt+1由pt密度直達,則稱xj由xi密度可達。也就是說,密度可達知足傳遞性。此時序列中的傳遞樣本p1,p2,...,pT−1均爲核心對象,由於只有核心對象才能使其餘樣本密度直達。注意密度可達也不知足對稱性,這個能夠由密度直達的不對稱性得出
  7. 密度相連:對於xi和xj,若是存在覈心對象樣本xk,使xi和xj均由xk密度可達,則稱xi和xj密度相連。注意密度相連關係是知足對稱性的

  從上圖能夠很容易看出理解上述定義,圖中MinPts=5,紅色的點都是核心對象,由於其ϵ-鄰域至少有5個樣本。黑色的樣本是非核心對象。全部核心對象密度直達的樣本在以紅色核心對象爲中心的超球體內,若是不在超球體內,則不能密度直達。圖中用綠色箭頭連起來的核心對象組成了密度可達的樣本序列。在這些密度可達的樣本序列的Eps鄰域內全部的樣本相互都是密度相連的。

  • 三個問題
  1. 第一個是一些異常樣本點或者說少許遊離於簇外的樣本點,這些點不在任何一個核心對象在周圍,在DBSCAN中,咱們通常將這些樣本點標記爲噪音點。
  2. 第二個是距離的度量問題,即如何計算某樣本和核心對象樣本的距離。在DBSCAN中,通常採用最近鄰思想,採用某一種距離度量來衡量樣本距離,好比歐式距離。這和KNN分類算法的最近鄰思想徹底相同。對應少許的樣本,尋找最近鄰能夠直接去計算全部樣本的距離,若是樣本量較大,則通常採用KD樹或者球樹來快速的搜索最近鄰。
  3. 第三種問題比較特殊,某些樣本可能到兩個核心對象的距離都小於ϵ,可是這兩個核心對象因爲不是密度直達,又不屬於同一個聚類簇,那麼若是界定這個樣本的類別呢?通常來講,此時DBSCAN採用先來後到,先進行聚類的類別簇會標記這個樣本爲它的類別。也就是說BDSCAN的算法不是徹底穩定的算法
  • 複雜度

時間複雜度:
(1)DBSCAN的基本時間複雜度是 O(N*找出Eps領域中的點所須要的時間), N是點的個數。最壞狀況下時間複雜度是O(N2)
(2)在低維空間數據中,有一些數據結構如KD樹,使得能夠有效的檢索特定點給定距離內的全部點,時間複雜度能夠下降到O(NlogN)
空間複雜度:低維和高維數據中,其空間都是O(N),對於每一個點它只須要維持少許數據,即簇標號和每一個點的標識(核心點或邊界點或噪音點)

  • 參數選擇

Eps:可使用繪製k-距離曲線(k-distance graph)方法得當,在k-距離曲線圖明顯拐點位置爲對應較好的參數。若參數設置太小,大部分數據不能聚類;若參數設置過大,多個簇和大部分對象會歸併到同一個簇中。
K-距離:K距離的定義在DBSCAN算法原文中給出了詳細解說,給定K鄰域參數k,對於數據中的每一個點,計算對應的第k個最近鄰域距離,並將數據集全部點對應的最近鄰域距離按照降序方式排序,稱這幅圖爲排序的k距離圖,選擇該圖中第一個谷值點位置對應的k距離值設定爲Eps。通常將k值設爲4。

MinPts:有一個指導性的原則(a rule of thumb),MinPts≥dim+1, 其中dim表示待聚類數據的維度。MinPts設置爲1是不合理的,由於設置爲1,則每一個獨立點都是一個簇,MinPts≤2時,與層次距離最近鄰域結果相同,所以,MinPts必須選擇大於等於3的值。若該值選取太小,則稀疏簇中結果因爲密度小於MinPts,從而被認爲是邊界點兒不被用於在類的進一步擴展;若該值過大,則密度較大的兩個鄰近簇可能被合併爲同一簇。所以,該值是否設置適當會對聚類結果形成較大影響。

  • 優缺點

和傳統的K-Means算法相比,DBSCAN最大的不一樣就是不須要輸入類別數k,固然它最大的優點是能夠發現任意形狀的聚類簇,而不是像K-Means,通常僅僅使用於凸的樣本集聚類。同時它在聚類的同時還能夠找出異常點,這點和BIRCH算法相似。

DBSCAN聚類適用場景:通常來講,若是數據集是稠密的,而且數據集不是凸的,那麼用DBSCAN會比K-Means聚類效果好不少。若是數據集不是稠密的,則不推薦用DBSCAN來聚類。

優勢

    1) 能夠對任意形狀的稠密數據集進行聚類,相對的,K-Means之類的聚類算法通常只適用於凸數據集。

    2) 能夠在聚類的同時發現異常點,對數據集中的異常點不敏感。

    3) 聚類結果沒有偏倚,相對的,K-Means之類的聚類算法初始值對聚類結果有很大影響。

缺點

    1)若是樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差,這時用DBSCAN聚類通常不適合。

    2) 若是樣本集較大時,聚類收斂時間較長,此時能夠對搜索最近鄰時創建的KD樹或者球樹進行規模限制來改進。

    3) 調參相對於傳統的K-Means之類的聚類算法稍複雜,主要須要對距離閾值ϵ,鄰域樣本數閾值MinPts聯合調參,不一樣的參數組合對最後的聚類效果有較大影響。


實踐

http://www.cnblogs.com/pinard/p/6217852.html

相關文章
相關標籤/搜索