聚類——密度聚類DBSCAN

Clustering 聚類

密度聚類——DBSCAN

  前面咱們已經介紹了兩種聚類算法:k-means和譜聚類。今天,咱們來介紹一種基於密度的聚類算法——DBSCAN,它是最經典的密度聚類算法,是不少算法的基礎,擁有不少聚類算法不具備的優點。今天,小編就帶你理解密度聚類算法DBSCAN的實質。算法

 

DBSCAN

 

基礎概念

    做爲最經典的密度聚類算法,DBSCAN使用一組關於「鄰域」概念的參數來描述樣本分佈的緊密程度,將具備足夠密度的區域劃分紅簇,且能在有噪聲的條件下發現任意形狀的簇。在學習具體算法前,咱們先定義幾個相關的概念:學習

  • 鄰域:對於任意給定樣本x和距離ε,x的ε鄰域是指到x距離不超過ε的樣本的集合;code

  • 核心對象:若樣本x的ε鄰域內至少包含minPts個樣本,則x是一個核心對象;對象

  • 密度直達:若樣本b在a的ε鄰域內,且a是核心對象,則稱樣本b由樣本x密度直達;blog

  • 密度可達:對於樣本a,b,若是存在樣例p1,p2,...,pn,其中,p1=a,pn=b,且序列中每個樣本都與它的前一個樣本密度直達,則稱樣本a與b密度可達;it

  • 密度相連:對於樣本a和b,若存在樣本k使得a與k密度可達,且k與b密度可達,則a與b密度相連。io

 

光看文字是否是繞暈了?下面咱們用一個圖來簡單表示上面的密度關係:
image.pngclass

當minPts=3時,虛線圈表示ε鄰域,則從圖中咱們能夠觀察到:基礎

  • x1是核心對象;原理

  • x2由x1密度直達;

  • x3由x1密度可達;

  • x3與x4密度相連。

爲何要定義這些看上去差很少又容易把人繞暈的概念呢?其實ε鄰域使用(ε,minpts)這兩個關鍵的參數來描述鄰域樣本分佈的緊密程度,規定了在必定鄰域閾值內樣本的個數(這不就是密度嘛)。那有了這些概念,如何根據密度進行聚類呢?

DBSCAN聚類思想

  DBSCAN聚類的原理很簡單:由密度可達關係導出最大密度相連的樣本集合(聚類)。這樣的一個集合中有一個或多個核心對象,若是隻有一個核心對象,則簇中其餘非核心對象都在這個核心對象的ε鄰域內;若是是多個核心對象,那麼任意一個核心對象的ε鄰域內必定包含另外一個核心對象(不然沒法密度可達)。這些核心對象以及包含在它ε鄰域內的全部樣本構成一個類。

  那麼,如何找到這樣一個樣本集合呢?一開始任意選擇一個沒有被標記的核心對象,找到它的全部密度可達對象,即一個簇,這些核心對象以及它們ε鄰域內的點被標記爲同一個類;而後再找一個未標記過的核心對象,重複上邊的步驟,直到全部核心對象都被標記爲止。

  算法的思想很簡單,可是咱們必須考慮一些細節問題才能產出一個好的聚類結果:

  • 首先對於一些不存在任何核心對象鄰域內的點,再DBSCAN中咱們將其標記爲離羣點(異常);
  • 第二個是距離度量,如歐式距離,在咱們要肯定ε鄰域內的點時,必需要計算樣本點到全部點之間的距離,對於樣本數較少的場景,還能夠應付,若是數據量特別大,通常採用KD樹或者球樹來快速搜索最近鄰,不熟悉這兩種方法的同窗能夠找相關文獻看看,這裏再也不贅述;
  • 第三個問題是若是存在樣本到兩個核心對象的距離都小於ε,但這兩個核心對象不屬於同一個類,那麼該樣本屬於哪個類呢?通常DBSCAN採用先來後到的方法,樣本將被標記成先聚成的類。

DBSCAN算法流程

image.png

DBSCAN算法小結

      以前咱們學過了kmeans算法,用戶須要給出聚類的個數k,然而咱們每每對k的大小沒法肯定。DBSCAN算法最大的優點就是無需給定聚類個數k,且可以發現任意形狀的聚類,且在聚類過程當中能自動識別出離羣點。那麼,咱們在何時使用DBSCAN算法來聚類呢?通常來講,若是數據集比較稠密且形狀非凸,用密度聚類的方法效果要好一些。

DBSCAN算法優勢:

  1. 不須要事先指定聚類個數,且能夠發現任意形狀的聚類;

  2. 對異常點不敏感,在聚類過程當中能自動識別出異常點;

  3. 聚類結果不依賴於節點的遍歷順序;

DBSCAN缺點:

  1. 對於密度不均勻,聚類間分佈差別大的數據集,聚類質量變差;

  2. 樣本集較大時,算法收斂時間較長;

  3. 調參較複雜,要同時考慮兩個參數;

 

小結:

基於密度的聚類算法是廣爲使用的算法,特別是對於任意形狀聚類以及存在異常點的場景。上面咱們也提到了DBSCAN算法的缺點,可是其實不少研究者已經在DBSCAN的基礎上作出了改進,實現了多密度的聚類,針對海量數據的場景,提出了micro-cluster的結構來表徵距離近的一小部分點,減小存儲壓力和計算壓力...還有不少先進的密度聚類算法及其應用,相信看完這篇文章再去讀相關的論文會比較輕鬆。

 

掃碼關注

獲取有趣的算法知識

qrcode_for_gh_32a933b66b99_258.jpg

相關文章
相關標籤/搜索