1. 程式人生 > >【機器學習】DBSCAN Algorithms基於密度的聚類算法

【機器學習】DBSCAN Algorithms基於密度的聚類算法

多次 使用 缺點 有效 結束 基於 需要 att 共享

一、算法思想:

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一個比較有代表性的基於密度的聚類算法。與劃分和層次聚類方法不同,它將簇定義為密度相連的點的最大集合,能夠把具有足夠高密度的區域劃分為簇,並可在噪聲的空間數據庫中發現任意形狀的聚類。

DBSCAN中的幾個定義:

  • Ε鄰域:給定對象半徑為Ε內的區域稱為該對象的Ε鄰域;
  • 核心對象:如果給定對象Ε領域內的樣本點數大於等於MinPts,則稱該對象為核心對象;
  • 直接密度可達:對於樣本集合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目的是找到密度相連對象的最大集合。

Eg: 假設半徑Ε=3,MinPts=3,點p的E領域中有點{m,p,p1,p2,o}, 點m的E領域中有點{m,q,p,m1,m2},點q的E領域中有點{q,m},點o的E領域中有點{o,p,s},點s的E領域中有點{o,s,s1}.

  那麽核心對象有p,m,o,s(q不是核心對象,因為它對應的E領域中點數量等於2,小於MinPts=3);

  點m從點p直接密度可達,因為m在p的E領域內,並且p為核心對象;

  點q從點p密度可達,因為點q從點m直接密度可達,並且點m從點p直接密度可達;

  點q到點s密度相連,因為點q從點p密度可達,並且s從點p密度可達。

二、算法優點:

1. 與K-means方法相比,DBSCAN不需要事先知道要形成的簇類的數量。

2. 與K-means方法相比,DBSCAN可以發現任意形狀的簇類。

3. 同時,DBSCAN能夠識別出噪聲點。對離群點有較好的魯棒性,甚至可以檢測離群點。

4.DBSCAN對於數據庫中樣本的順序不敏感,即Pattern的輸入順序對結果的影響不大。但是,對於處於簇類之間邊界樣本,可能會根據哪個簇類優先被探測到而其歸屬有所擺動。

5.DBSCAN被設計與數據庫一同使用,可以加速區域的查詢。例如 使用R*樹

三、算法缺點:

1. DBScan不能很好反映高維數據。

2. DBScan不能很好反映數據集以變化的密度。

3.由於DBSCAN算法直接對整個數據集進行操作,並且在聚類之前需要建立相應的R*樹,並繪制k-dist圖,因此算法所需的內存空間和I/O消耗都相當可觀。在計算資源有限而數據量又非常龐大的情況下,DBSCAN算法的效率將受到很大影響。(DBSCAN算法將區域查詢得到的所有未被處理過的點都作為種子點,留待下一步擴展處理。對於大規模數據集中的較大類而言,這種策略會使種子點的數目不斷膨脹,算法所需的內存空間也會快速增加。)

4.由於DBSCAN算法使用了全局性表征密度的參數,因此當各個類的密度不均勻,或類間的距離相差很大時,聚類的質量較差。(當各個類的密度不均勻、或類間的距離相差很大時,如果根據密度較高的類選取較小的Eps值,那麽密度相對較低的類中的對象Eps 鄰域中的點數將小Minpts,則這些點將會被錯當成邊界點,從而不被用於所在類的進一步擴展,因此導致密度較低的類被劃分成多個性質相似的類。與此相反,如果根據密度較低的類來選取較大的Eps值,則會導致離得較近而密度較大的類被合並,而它們之間的差異被忽略。所以在上述情況下,很難選取一個合適的全局Eps值來獲得比較準確的聚類結果。)

5.DBSCAN不是完全確定的,邊界點從不同的簇中獲得,可以使不同簇的一部分,取決於數據處理。

6.DBSCAN的質量取決於regionQuery(P,Eps)函數中距離的測量。最常用的距離度量是歐式距離,尤其是在高維數據中,由於所謂的維數災難,這種度量基本上是無用的,很難為E找到一個恰當的值。雖然目前有一些基於歐式距離的算法,但是如果不能對數據和規模有很好的了解,也很難找一個有意義的距離閾值E。

7.當密度差異大時,由於選取的MinPts-Eps組合不能同時適合所有的簇,DBSACN不能很好的進行數據聚類。(缺點4)

8.輸入參數敏感,確定參數Eps , MinPts困難 ,若選取不當 ,將造成聚類質量下降。

9.由於經典的DBSCAN算法中參數Eps和MinPts在聚類過程中是不變的,使得該算法難以適應密度不均勻的數據集.

四、算法改進:

  1. 對缺點3的改進:通過選用核心點鄰域中的部分點作為種子點來擴展類,從而大大減少區域查詢的次數,降低I/O開銷,實現快速聚類。

  2.對缺點4的改進:為了解決上述問題,周水庚等人提出了PDBSCAN ( Partitioning-based DBSCAN)算法。該算法基於數據分區技術來擴展DBSCAN算法,它根據數據的分布特性,將整個數據空間劃分為多個較小的分區,然後分別對這些局部分區進行聚類,最後將各個局部的聚類結果進行合並。 PDBSCAN 的算法思想是:首先,根據數據集在某一維或多個維上的分布特性,將整個數據空間劃分為若幹個局部區域,使得各局部區域內的數據盡可能分布均勻;然後依次繪制各個局部區域的k-dist圖,並依次得到各個區域的Eps值,接著用 DBSCAN 算法對各個局部區域進行局部聚類;最後,將各個局部聚類的結果進行合並,從而完成整個數據集的聚類分析。由於每個局部區域都使用各自的局部Eps值來進行聚類,因此有效緩解了因使用全局Eps值而導致的聚類質量惡化的問題。

  3.缺點8改進:

  DBSCAN 算法的改進,輸入參數的處理:針對 DBSCAN算法對輸入參數(聚類半徑Eps , 聚類點數 MinPts) 敏感問題 ,作如下處理。由於參數的設置通常是依賴經驗 , 當數據密度相差較大和類間距離分布不均勻時 ,很難選取一個合適的 Eps 值來進行聚類且得到比較準確的結果 . 因此 , 事先確定算法的參數值大小是不可取的 ,應在聚類過程中根據聚類結果的好壞對參數進行適當的調整。比如選擇適當的評價函數作為評價聚類結果的尺度。反復調整算法的參數 ,重新聚類 ,直到聚類結果滿足要求。盡管DBSCAN算法提供了利用繪制降序k-距離圖的可視化方法來選擇Eps ,選定的Eps值已經比較接近“理想”值 ; 但常有微小差距 , 最終造成聚類結果的相差很大。可以考慮采用如下方法來加以改善 :

  (1)可以對所有聚類對象按照從一個簇到另一個簇 ,按簇邊緣→簇核心→簇邊緣的順序排序。這樣,該對象序列就可以反映出數據空間基於密度的簇結構信息。基於這些信息可以容易地確定合適的Eps值 ,並隨之發現各個簇。

  (2)不對原始數據集進行聚類 ,而是通過從數據集合中抽取高密度點生成新的數據集合,並修改密度參數 ,反復進行這一過程 , 直到生成的數據集合可以很容易地被聚類為止,然後以此結果為基礎,再將其它點逐層地吸附到各個類中。這樣,就避免了DBSCAN算法中輸入參數對聚類結果的影響。

  (3)采用核聚類的思想對樣本集進行非線性變換,使樣本集的分布盡可能地均勻,經過核函數的映射使原來沒有顯現的特征突現出來,然後再用全局參量Eps ,從而能夠更好地聚類 , 得到較好的結果 .

  (4)在絕大多數聚類結果不理想的情況下,是Eps值選擇過小,導致本應為一個簇的對象集合被分析成了多個子簇。被分開的子簇共享一些對象 ,可以認為子簇通過這些共享的對象相互連接。而DBSCAN算法將子簇的連接信息簡單地丟掉 。因此,可以通過記錄下所有的簇連接信息,由用戶根據實際的聚類結果和簇連接信息,將被錯誤分開的子簇合並。這樣可以提高聚類的效果,而輸入參數Eps的變化對聚類結果的影響,就被最後的合並過程屏蔽掉。可以考慮以下兩種方式進行改進 :

    1)並行化.

   從DBSCAN算法可以看出,全局變量Eps值影響了聚類質量,尤其是數據分布不均勻時.因此,考慮對數據進行劃分,每一個劃分中的數據分布相對較均勻 ,根據每個劃分中數據的分布密集程度來選取Eps值.這樣一方面降低了全局變量Eps值的影響,另一方面由於具有多個劃分 ,因此考慮並行處理 ,從而提高聚類效率 ,也降低了DBSCAN算法對內存的較高要求

   .2)增量式處理。

  當數據增加或者刪除時 ,只考慮其增加或刪除的數據所影響到的那些類 . 這種方法在處理大數據集時非常有效 ,不需要重新對數據庫中的數據進行聚類 ,只需要對類進行漸進性地更新 , 修正和加強已發現的類 . 另外 ,由於高維數據的復雜性 , 使聚類分析的效率和實用性都很差。通過確定聚類空間中和聚類主題相關性較強的數據維,來降低聚類空間的維度。利用數據降維可以降低數據結構上的復雜性。目前,有多種降維技術均

可用於特征空間的削減。在方法的選擇上應根據降維後,信息丟失率在可接收範圍內 ,來選擇一種合適的降維方法。

  4.對缺點9改進:

    2.1 自適應選擇 Eps 參數

    對於不均勻數據分布,各個數據與周圍數據的相似程度不同,因此,針對每個點,將距離該點最近的多個點的距離平均值作為該點處的稠密程度的評判標準,即對任意一點P,根據距離矩陣,選取與P點最近的k個點,計算距離的平均值.此時,每個點都能夠得出一個k最近點平均距離.

    然後對所有點的一維k最近點平均距離數據進行DBSCAN聚類。再對聚類結果中每類 i找到其最大平均距離的點.最後將該點與它的第k點的距離作為該類的鄰域閾值Epsi ,並將其保存以備聚類.這種發現Eps的方法主要考慮到對於不同密度的數據集,應根據各個數據的稠密程度,分別選取合適的閾值進行聚類.由於聚類中所采用的參數Eps只能夠確定聚類結果中同一類數據中的密度差別,所以,參數選取所引起的誤差不會對聚類結果產生很大影響.

    2.2 基於變參數的 DBSCAN 聚類

1)將2.1中得出的鄰域閾值Epsi按照由小到大的順序排列,準備聚類;

2)選取最小的鄰域閾值,MinPts可以不變,對數據進行DBSCAN聚類;

3)然後使用下一個鄰域閾值和MinPts作為參數,對標註為噪聲的數據再次進行 DBSCAN聚類;

4)不斷循環,直到所有鄰域閾值均使用完畢,聚類結束.

在多次聚類過程中,鄰域閾值要由小到大進行聚類.使用較小閾值進行聚類時,距離較大的類中的數據由於不滿足該閾值而不被處理到,所以較小的距離閾值只能處理密度較大的點,不會對小密度數據產生影響。

【機器學習】DBSCAN Algorithms基於密度的聚類算法