1. 程式人生 > 實用技巧 >密度聚類演算法的DBSCAN

密度聚類演算法的DBSCAN

DBSCAN

problem

  1. 用你自己熟悉的語言,編寫程式,用你所學的任何一種聚類演算法,對所給定的資料集進行聚類挖掘,給出具體程式和挖掘結果。

密度聚類演算法

  • 密度聚類方法的指導思想是,只要一個區域中的點的密度大於某個域值,就把它加到與之相近的聚類中去。這類演算法能克服基於距離的演算法只能發現“類圓形”的聚類的缺點,可發現任意形狀的聚類,且對噪聲資料不敏感。但計算密度單元的計算複雜度大,需要建立空間索引來降低計算量,且對資料維數的伸縮性較差。這類方法需要掃描整個資料庫,每個資料物件都可能引起一次查詢,因此當資料量大時會造成頻繁的I/O操作。代表演算法有:DBSCANOPTICSDENCLUE
    演算法等。
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)一個比較有代表性的基於密度的聚類演算法。與劃分和層次聚類方法不同,它將簇定義為密度相連的點的最大集合,能夠把具有足夠高密度的區域劃分為簇,並可在有“噪聲”的空間資料庫中發現任意形狀的聚類。

DBSCAN

  • 定義 5-3 物件的ε-鄰域:給定物件在半徑ε內的區域。

  • 定義 5-4 核心物件:如果一個物件的ε-臨域至少包含最小數目MinPts個物件,則稱該物件為核心物件。

  • 例如,在圖5-6中,\(ε=1cm\)\(MinPts=5\),q是一個核心物件。

  • 定義 5-5 直接密度可達:給定一個物件集合D,如果p是在q的ε-鄰域內,而q是一個核心物件,我們說物件p從物件q出發是直接密度可達的。

  • 例如,在圖5-6中,\(ε=1cm\)\(MinPts=5\),q是一個核心物件,物件p從物件q出發是直接密度可達的。

  • 定義 5-6 密度可達的:如果存在一個物件鏈\(p_1,p_2,\cdots,p_n,p_1=q,p_n=p,p_i∈D,(1\le i \le n)\)\(p_{i+1}\)是從\(p_i\)關於ε和MitPts直接密度可達的,則物件p是從物件q關於ε和MinPts密度可達的。

  • 例如,在圖5-7中,\(ε=1cm\)

    \(MinPts=5\),q是一個核心物件,\(p_1\)是從q關於ε和MitPts直接密度可達,p是從\(p_1\)關於ε和MitPts直接密度可達,則物件p從物件q關於ε和MinPts密度可達的。

  • 定義 5-7密度相連的:如果物件集合D中存在一個物件o,使得物件p和q是從o關於ε和MinPts密度可達的,那麼物件p和q是關於ε和MinPts密度相連的。

  • 定義 5-8噪聲: 一個基於密度的簇是基於密度可達性的最大的密度相連物件的集合。不包含在任何簇中的物件被認為是“噪聲”。


演算法描述

DBSCAN通過檢查資料集中每個物件的ε-鄰域來尋找聚類。如果一個點p的ε-鄰域包含多於MinPts個物件,則建立一個p作為核心物件的新簇。然後,DBSCAN反覆地尋找從這些核心物件直接密度可達的物件,這個過程可能涉及一些密度可達簇的合併。當沒有新的點可以被新增到任何簇時,該過程結束。具體如下:

DBSCAN演算法描述
演算法5-5 DBSCAN  
輸入:包含n個物件的資料庫,半徑ε,最少數目MinPts。
輸出:所有生成的簇,達到密度要求。
1.  REPEAT
2.     從資料庫中抽取一個未處理過的點;
3.     IF 抽出的點是核心點 THEN找出所有從該點密度可達的物件,形成一個簇
4.     ELSE 抽出的點是邊緣點(非核心物件),跳出本次迴圈,尋找下一點;
5.   UNTIL 所有點都被處理;

演算法舉例

下面給出一個樣本事務資料庫(見左表),對它實施DBSCAN演算法。
根據所給的資料通過對其進行DBSCAN演算法,以下為演算法的步驟(設\(n=12\),使用者輸入\(ε=1\)\(MinPts=4\)

  • 樣本事務資料庫
序號 屬性 1 屬性 2
1 1 0
2 4 0
3 0 1
4 1 1
5 2 1
6 3 1
7 4 1
8 5 1
9 0 2
10 1 2
11 4 2
12 1 3

DBSCAN演算法執行過程示意

步驟 選擇的點 在ε中點的個數 通過計算可達點而找到的新簇
1 1 2
2 2 2
3 3 3
4 4 5 \(C_1:\{1,3,4,5,9,10,12\}\)
5 5 3 已在一個簇\(C_1\)
6 6 3
7 7 5 \(C_2:\{2,6,7,8,11\}\)
8 8 2 已在一個簇\(C_2\)
9 9 3 已在一個簇\(C_1\)
10 10 4 已在一個簇\(C_1\)
11 11 2 已在一個簇\(C_2\)
12 12 2 已在一個簇\(C_1\)

聚出的類為{1,3,4,5,9,11,12},{2,6,7,8,10}。

第1步,在資料庫中選擇一點1,由於在以它為圓心的,以1為半徑的圓內包含2個點(小於4),因此它不是核心點,選擇下一個點。
第2步,在資料庫中選擇一點2,由於在以它為圓心的,以1為半徑的圓內包含2個點,因此它不是核心點,選擇下一個點。
第3步,在資料庫中選擇一點3,由於在以它為圓心的,以1為半徑的圓內包含3個點,因此它不是核心點,選擇下一個點。
第4步,在資料庫中選擇一點4,由於在以它為圓心的,以1為半徑的圓內包含5個點,因此它是核心點,尋找從它出發可達的點(直接可達4個,間接可達3個),聚出的新類{1,3,4,5,9,10,12},選擇下一個點。
第5步,在資料庫中選擇一點5,已經在簇1中,選擇下一個點。
第6步,在資料庫中選擇一點6,由於在以它為圓心的,以1為半徑的圓內包含3個點,因此它不是核心點,選擇下一個點。
第7步,在資料庫中選擇一點7,由於在以它為圓心的,以1為半徑的圓內包含5個點,因此它是核心點,尋找從它出發可達的點,聚出的新類{2,6,7,8,11},選擇下一個點。
第8步,在資料庫中選擇一點8,已經在簇2中,選擇下一個點。
第9步,在資料庫中選擇一點9,已經在簇1中,選擇下一個點。
第10步,在資料庫中選擇一點10,已經在簇1中,選擇下一個點。
第11步,在資料庫中選擇一點11,已經在簇2中,選擇下一個點。
第12步,選擇12點,已經在簇1中,由於這已經是最後一點所有點都以處理,程式終止。

演算法的效能分析

DBSCAN需要對資料集中的每個物件進行考察,通過檢查每個點的ε-領域來尋找聚類,如果某個點p為核心物件,則建立一個以該點p為核心物件的新簇,然後尋找從核心物件直接密度可達的物件。如下表所示,如果採用空間索引,DBSCAN計算複雜度是\(O(n \log {n})\),這裡n是資料庫物件的數目。否則,計算複雜度是\(O(n^2)\)

時間複雜度 一次鄰居點的查詢 DBSCAN
無索引 \(O(n)\) \(O(n^2)\)
有索引 \(\log n\) \(n\log n)\)

DBSCAN演算法將是具有足夠高密度的區域劃分為簇,並可以在帶有“噪聲”的空間資料庫中發現任意形狀的聚類。但是,該演算法對使用者定義的引數是敏感的,εMinPts的設定將影響聚類的效果。設定的細微不同,會導致聚類結果的很大差別。為了解決上述問題,OPTICS(Ordering Points To Identify the Clustering Structure)被提出,它通過引入核心距離和可達距離,使得聚類演算法對輸入的引數不敏感。