機器學習——dbscan密度聚類


完整版可關注公眾號:大數據技術宅獲取

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基於密度的有噪應用中的空間聚類)是一種簡單,卻又在處理時空數據時表現不錯的算法,借最近正好有看,這里整理下。不同於k-means,以中心點為原則進行聚類,只要樣本點離同一個簇中心最近,就被划分到同一個簇中,且簇的形狀是“類圓形”(凸形狀)。DBSCAN將簇定義為密度相連的點的最大集合,即把樣本點的密度情況作為聚類的基本原則,然后把相互之間有聯系且聚集程度高的那些部分連接起來最終形成簇。

DBSCAN原理

DBSCAN的原理可以概括為:同一個簇,其樣本兩兩相連;對於任意一個簇,對應的樣本集是最大最完整的,即在所有樣本點中,如果某個樣本點是由一個簇中的點出發可達的,那么該點也將被划分到同一個簇。

      然而,如何定義上述的相連和可達呢,下面將給出DBSCAN的相關概念。

DBSCAN相關概念

ϵ-鄰域:以給定對象為中心,ϵ為半徑的區域。

核心對象(核心點):對於給定的點數MinPts,如果點p的ϵ鄰域包含至少MinPts個樣本點(包含p),那么點p就被稱作核心對象。

密度直達:如果點p為核心對象,樣本點q出現在P的ϵ-鄰域中,那么點q就是點p出發直接密度可達的(注意:不能說點p是由q出發密度直達的,除非q也是核心對象)。

密度可達:可達指從核心點出發可以到達的樣本點。這里的到達分為2種情況:一種情況就是上面所說的密度直達的;另外一種,就是間接到達的。間接能到達就是說,可以找到一個對象鏈(序列),如p,p1,p2,...,pn,q(n>=1),其中后者從前者是密度直達的(p1由p直達,p1由p0直達,q由pn直達),那么q就是由核心對象p出發可達的,q是一個可達點。

密度相連:對於兩個樣本點p和q,如果能找到一個樣本點o,使得o到p可達,同時o到q也可達,那么p和q就是密度相連的。

簇:最大的密度相連對象的集合。

噪聲:不包含在任何簇中的對象。

為了讓大家更直觀的理解以上概念,給大家舉個小例子(見下圖,忽略字丑)。這里假設MinPts=4,ϵ=1cm,那么可以看出,對於左邊2個圖中標綠的點,顯然為核心對象,因為以它們為中心,ϵ為半徑畫圓后,圓里邊的樣本點數均大於MinPts的值4。左圖s為q出發的密度直達點;左圖p為q出發密度可達點;中間那幅圖,由於o到p可達,o到q可達,故p和q密度相連。右圖由於最上邊的那個樣本點不在任何簇中,所以被歸為噪聲。

 

 

 

 

 

 

DBSCAN優缺點

(1)優點

無需指定簇個數

對任意形狀的稠密數據集都可以聚類,簇的形狀可以任意

擅長尋找離群點(檢測任務)

(2)缺點:

不適用於樣本集密度不均勻、聚類間距相差大的情況

樣本集較大時,聚類收斂時間較長

參數不好選擇(參數對聚類結果的影響較大)

DBSCAN聚類舉例

(1)生成數據集

代碼:

1#導入所需python模塊

 2from sklearn.datasets import make_blobs

 3from sklearn.cluster import DBSCAN

 4import matplotlib; matplotlib.use('TkAgg')

 5import matplotlib.pyplot as plt

 6import numpy as np

 7#利用生成器生成具有三個簇的合成數據集,共1000個樣本點,為方便作圖,特征維度這里設為2

 8X,t=make_blobs(n_samples=1000,n_features=2,centers=[[1.2,1.5],[2.2,1.1],[1.5,2.8]],cluster_std=[[0.3],[0.2],[0.25]],random_state=2020)

 9#生成樣本點的分布圖

10fig=plt.figure(figsize=(8,8))

11ax=fig.add_subplot(111)

12ax.scatter(X[:,0],X[:,1])

13plt.show()

 

 

生成的樣本點分布圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM