DBSCAN聚類演算法
阿新 • • 發佈:2020-10-12
DBSCAN聚類演算法介紹
1. DBSCAN是什麼?
1.1初見美人
基於密度的噪聲應用空間聚類(DBSCAN)是一種無監督的ML聚類演算法。無監督的意思是它不使用預先標記的目標來聚類資料點。聚類是指試圖將相似的資料點分組到人工確定的組或簇中。它可以替代KMeans和層次聚類等流行的聚類演算法。與KMeans演算法不同,它不需要確定聚類的數量,而是基於資料推測聚類的數目,它能夠針對任意形狀產生聚類。
1.2演算法引數介紹
- 兩個重要的引數:
epsilon:在一個點周圍鄰近區域的半徑
這個值越大,聚類後的集合範圍就更大,包含更多的資料點。形成的叢集數目就會越小。
minPts:鄰近區域內至少包含點的個數
就是上面一個引數一定半徑內的最少點數。如果一定半徑內,資料點小於minPts,則該範圍內的資料不計入當前簇。越小的值,會產生越多的叢集分類。較大的值將產生較大的叢集。
例:如果“最小點”= 4,則在彼此距離內的任意4個或4個以上的點都被認為是一個簇
- 其他引數:
epsilon-neighborhood:簡稱(e-nbhd)表示半徑為e且含有若干資料的叢集,
密度空間=一定空間內的資料數/空間大小
例:圖中中心點是(3,2),半徑epsilon是0.5,(圖片來自:FAIRY_ZHANG_)
1.3樣本點的分類
- 核心點(core point):在半徑Eps內含有超過MinPts數目的點。也就是,核心點在其近鄰距離內至少有最少數量的樣本點
- 邊緣點(border point):在半徑Eps內點的數量小於MinPts,但是落在核心點的鄰域內的點。
- 離群點(Outlier):既不是核心點也不是邊界點的點。這些點處於低密度地區,也叫做噪聲點
圖示:(圖片來自deephub)
隨機選取一個點,找到半徑EPS內的資料點,與minPts比較,>則為核心點,>0&<minPts則為邊界點,=0則為離群點(圖片來自deephub)
再來一張圖加深理解
2. 演算法流程
看過上面的樣本點分類,相信你聰明的腦瓜裡已經有了演算法的雛形。
- 隨便找一個點作為起始點,根據NBHD(p,epsilon),判斷點的型別
- 找到一個核心點,建立一個類,加入符合NBHD的樣本點到該類中,直到該類的所有邊緣點的NBHD都加入這個類中,則這個類結束
- 重複上述1,2。遍歷所有的點
- 得到若干個類和離群點(噪音點)
例:(圖片來自:部落格園bonelee)
3. 演算法的優缺點
3.1它哪裡好?
- 不需要確定聚類的數量,而是根據不同的NBHD得出聚類的數量。不需要像KMeans那樣預先確定叢集的數量
- 可以產生任何形狀的聚類,(kmeans聚類演算法只能處理球形的簇)
- 異常值不敏感(噪音點)
3.2 它哪裡不好
- 難以聚類高維資料(也就是NBHD如何選取)
- 引數敏感
4.程式碼實現
碼了再來補,哈哈
5. 一個演算法視覺化的網站
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
碼了再來補,哈哈