DBSCAN，是 1996 年由、漢斯 彼得克里戈爾、約爾格桑德（Jörg Sander）及 Xiaowei Xu 提出的叢集分析演算法， 這個演算法是以密度為本的：給定某空間裡的一個點集合，這演算法能把附近的點分成一組（有很多相鄰點的點），並標記出位於低密度區域的局外點（最接近它的點也十分遠），DBSCAN 是其中一個最常用的叢集分析演算法，也是其中一個科學文章中最常引用的。 在 2014 年，這個演算法在領頭資料探勘會議 KDD 上獲頒發了 Test of Time award，該獎項是頒發給一些於理論及實際層面均獲得持續性的關注的演算法。 基礎知識 考慮在某空間裡將被叢集的點集合，為了進行 DBSCAN 叢集，所有的點被分為核心點、密度 可達點及局外點，詳請如下： 如果一個點 p 在距離 ε 範圍內有至少 minPts 個點 包括自己，則這個點被稱為核心點，那些 ε 範圍內的則被稱為由 p 直接可達的。根據定義，沒有任何點是由非核心點直接可達的。 如果存在一條道路 ，有 和， 且每個 都是由 直接可達的 道路上除了 q 以外所有點都一定是核心點，則稱 q 是由 p 可達的。 所有不由任何點可達的點都被稱為局外點。 如果 p 是核心點，則它與所有由它可達的點 包括核心點和非核心點 形成一個叢集，每個叢集擁有最少一個核心點，非核心點也可以是叢集的一部分，但它是在叢集的「邊緣」位置，因為它不能達至更多的點。 「可達性」（英文：Reachability ）不是一個對稱關係，因為根據定義，沒有點是由非核心點可達的，但非核心點可以是由其他點可達的。所以為了正式地界定 DBSCAN 找出的叢集，進一步定義兩點之間的「連結性」（英文：Connectedness） ：如果存在一個點 o 使得點 p 和點 q 都是由 o 可達的，則點 p 和點 q 被稱為 密度 連結的，而連結性是一個對稱關係。 定義了連結性之後，每個叢集都符合兩個性質： 一個叢集裡的每兩個點都是互相連結的； 如果一個點 p 是由一個在叢集裡的點 q 可達的，那麼 p 也在 q 所屬的叢集裡。 演算法 DBSCAN 需要兩個引數：ε eps 和形成高密度區域所需要的最少點數 minPts，它由一個任意未被訪問的點開始，然後探索這個點的 ε 鄰域，如果 ε 鄰域裡有足夠的點，則建立一個新的叢集，否則這個點被標籤為雜音。注意這個點之後可能被發現在其它點的 ε 鄰域裡，而該 ε 鄰域可能有足夠的點，屆時這個點會被加入該叢集中。 如果一個點位於一個叢集的密集區域裡，它的 ε 鄰域裡的點也屬於該叢集，當這些新的點被加進叢集後，如果它 們 也在密集區域裡，它 們 的 ε 鄰域裡的點也會被加進叢集裡。這個過程將一直重覆，直至不能再加進更多的點為止，這樣，一個密度連結的叢集被完整地找出來。然後，一個未曾被訪問的點將被探索，從而發現一個新的叢集或雜音。 演算法可以以下偽程式碼表達，當中變數根據原本刊登時的命名： DBSCAN D eps MinPts C 0 for each point P in dataset D if P is visited continue next point mark P as visited NeighborPts regionQuery P eps if sizeof NeighborPts MinPts mark P as NOISE else C next cluster expandCluster P NeighborPts C eps MinPts expandCluster P NeighborPts C eps MinPts add P to cluster C for each point P in NeighborPts if P is not visited mark P as visited NeighborPts regionQuery P eps if sizeof NeighborPts MinPts NeighborPts NeighborPts joined with NeighborPts if P is not yet member of any cluster add P to cluster C regionQuery P eps return all points within Ps epsneighborhood including P 注意這個演算法可以以下方式簡化：其一，has been visited 和 belongs to cluster C 可被結合起來，另外 expandCluster 副程式不必被抽出來，因為它只在一個位置被呼叫。以上演算法沒有以簡化方式呈現，以反映原本出版的版本。另外，regionQuery 是否包含 P 並不重要，它等價於改變 MinPts 的值。 複雜度 DBSCAN 對資料庫裡的每一點進行訪問，可能多於一次（例如作為不同叢集的候選者），但在現實的考慮中，時間複雜度主要受 regionQuery 的呼叫次數影響，DBSCAN 對每點都進行剛好一次呼叫，且如果使用了特別的編號結構，則總平均時間複雜度為 O nlog n，最差時間複雜度則為 O n2。可以使用 O n2 空間複雜度的距離矩陣以避免重複計算距離，但若不使用距離矩陣，DBSCAN 的空間複雜度為 O n。 優點 相比 K 平均演算法，DBSCAN 不需要預先宣告叢集數量。 DBSCAN 可以找出任何形狀的叢集，甚至能找出一個叢集，它包圍但不連線另一個叢集，另外，由於 MinPts 引數，singlelink effect （不同叢集以一點或極幼的線相連而被當成一個叢集）能有效地被避免。 DBSCAN 能分辨噪音（局外點）。 DBSCAN 只需兩個引數，且對資料庫內的點的次序幾乎不敏感（兩個叢集之間邊緣的點有機會受次序的影響被分到不同的叢集，另外叢集的次序會受點的次序的影響）。 DBSCAN 被設計成能配合可加速範圍訪問的資料庫結構，例如 R 樹。 如果對資料有足夠的瞭解，可以選擇適當的引數以獲得最佳的分類。 缺點 DBSCAN 並不完全是確定性的：從多個簇可到達的邊界點可以是任一簇的一部分，具體取決於資料處理的順序。對於大多數資料集和領域來說，這種情況並不經常出現，並且對聚類結果影響很小：因為核心點和噪聲點都是確定性的。 DBSCAN 是一種將邊界點視為噪聲的變體演算法，這種方式實現了完全確定性的結果以及密度連通分量的更一致的統計解釋。 DBSCAN 的質量取決於區域查詢函式 regionQuery Pε 中使用的距離度量。最常用的距離度量是歐氏距離。但是對於高維資料，由於維數災難 Curse of dimensionality，這個度量幾乎沒有用武之地，很難找到一個合適的鄰域範圍 ε。 DBSCAN 無法很好地對密度差異較大的資料集進行聚類，因為此時無法為所有聚類選擇合適的 minPtsε 組合。 如果對資料和規模不瞭解，可能很難選擇合適的鄰域範圍 ε。 有關文章 OPTICS 演算法：一個 DBSCAN 的一般化，有效地以「最大搜尋半徑」代替 ε 引數。 Connected component 並查集 注意 參考文獻 延伸閱讀 Arlia Domenica Coppola Massimo Experiments in Parallel Clustering with DBSCAN EuroPar 2001 Parallel Processing 7th International EuroPar Conference Manchester UK August 2831 2001 Proceedings Springer Berlin Kriegel HansPeter Kröger Peer Sander Jörg Zimek Arthur 2011 Densitybased Clustering WIREs Data Mining and Knowledge Discovery 1 3 231240 doi101002widm30 Category 資料探勘