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

DBSCAN聚類演算法

DBSCAN聚類演算法介紹

1. DBSCAN是什麼?

1.1初見美人

基於密度的噪聲應用空間聚類(DBSCAN)是一種無監督的ML聚類演算法。無監督的意思是它不使用預先標記的目標來聚類資料點。聚類是指試圖將相似的資料點分組到人工確定的組或簇中。它可以替代KMeans和層次聚類等流行的聚類演算法。與KMeans演算法不同,它不需要確定聚類的數量,而是基於資料推測聚類的數目,它能夠針對任意形狀產生聚類。

1.2演算法引數介紹

  1. 兩個重要的引數:

epsilon:在一個點周圍鄰近區域的半徑
這個值越大,聚類後的集合範圍就更大,包含更多的資料點。形成的叢集數目就會越小。

minPts:鄰近區域內至少包含點的個數
就是上面一個引數一定半徑內的最少點數。如果一定半徑內,資料點小於minPts,則該範圍內的資料不計入當前簇。越小的值,會產生越多的叢集分類。較大的值將產生較大的叢集。

例:如果“最小點”= 4,則在彼此距離內的任意4個或4個以上的點都被認為是一個簇

  1. 其他引數:

epsilon-neighborhood:簡稱(e-nbhd)表示半徑為e且含有若干資料的叢集,
密度空間=一定空間內的資料數/空間大小

例:圖中中心點是(3,2),半徑epsilon是0.5,(圖片來自:FAIRY_ZHANG_)
在這裡插入圖片描述

1.3樣本點的分類

  1. 核心點(core point):在半徑Eps內含有超過MinPts數目的點。也就是,核心點在其近鄰距離內至少有最少數量的樣本點
  2. 邊緣點(border point):在半徑Eps內點的數量小於MinPts,但是落在核心點的鄰域內的點。
  3. 離群點(Outlier):既不是核心點也不是邊界點的點。這些點處於低密度地區,也叫做噪聲點

圖示:(圖片來自deephub)
在這裡插入圖片描述
隨機選取一個點,找到半徑EPS內的資料點,與minPts比較,>則為核心點,>0&<minPts則為邊界點,=0則為離群點(圖片來自deephub)

在這裡插入圖片描述
再來一張圖加深理解
在這裡插入圖片描述

2. 演算法流程

看過上面的樣本點分類,相信你聰明的腦瓜裡已經有了演算法的雛形。

  1. 隨便找一個點作為起始點,根據NBHD(p,epsilon),判斷點的型別
  2. 找到一個核心點,建立一個類,加入符合NBHD的樣本點到該類中,直到該類的所有邊緣點的NBHD都加入這個類中,則這個類結束
  3. 重複上述1,2。遍歷所有的點
  4. 得到若干個類和離群點(噪音點)

例:(圖片來自:部落格園bonelee)
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

3. 演算法的優缺點

3.1它哪裡好?

  1. 不需要確定聚類的數量,而是根據不同的NBHD得出聚類的數量。不需要像KMeans那樣預先確定叢集的數量
  2. 可以產生任何形狀的聚類,(kmeans聚類演算法只能處理球形的簇)
  3. 異常值不敏感(噪音點)
    在這裡插入圖片描述

3.2 它哪裡不好

  1. 難以聚類高維資料(也就是NBHD如何選取)
  2. 引數敏感

4.程式碼實現

碼了再來補,哈哈

5. 一個演算法視覺化的網站

https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
碼了再來補,哈哈