DBSCAN聚類算法

基於密度定義,我們將點分爲:

  • 稠密區域內部的點(核心點)
  • 稠密區域邊緣上的點(邊界點)
  • 稀疏區域中的點(噪聲或背景點).

DBSCAN算法的本質就是隨大流,邊界點緊緊圍繞着核心點,他們抱團,不帶噪點玩兒

這裏寫圖片描述

小團體多了,聯繫比較密切的小團體之間聚成了同個類
比較偏遠的小團體想要加入這個圈子,進不去,就單幹,我們自己玩自己的,聚成了另外的一個類
一開始就被孤立的噪點吧,自然有自己的傲骨,接着孤芳自賞

這裏寫圖片描述

算法原理

DBSCAN通過檢查數據集中每點的Eps鄰域來搜索簇,如果點p的Eps鄰域包含的點多於MinPts個,則創建一個以p爲核心對象的簇。

然後,DBSCAN迭代地聚集從這些核心對象直接密度可達的對象,這個過程可能涉及一些密度可達簇的合併。

當沒有新的點添加到任何簇時,該過程結束.

僞代碼

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 P's eps-neighborhood (including P)

複雜度

時間複雜度
DBSCAN的基本時間複雜度是 O(N*找出Eps領域中的點所需要的時間), N是點的個數。最壞情況下時間複雜度是O(N2)
在低維空間數據中,有一些數據結構如KD樹,使得可以有效的檢索特定點給定距離內的所有點,時間複雜度可以降低到O(NlogN)

空間複雜度
低維或高維數據中,其空間都是O(N),對於每個點它只需要維持少量數據,即簇標號和每個點的標識(核心點或邊界點或噪音點)

特點

優點
基於密度定義,相對抗噪音,能處理任意形狀和大小的簇

缺點
對輸入參數敏感
當簇的密度變化太大時,會有麻煩
對於高維問題,密度定義是個比較麻煩的問題

實例

這裏寫圖片描述

這裏寫圖片描述

解答過程

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章