聚類-DBSCAN基於密度的空間聚類


1.DBSCAN介紹

密度聚類方法的指導思想是,只要樣本點的密度大於某閾值,則將該樣本添加到最近的簇中。

這類算法能克服基於距離的算法只能發現“類圓形”的聚類的缺點,可發現任意形狀的聚類,且對噪聲數據不敏感。但計算密度單元的計算復雜度大,需要建立空間索引來降低計算量。

  • DBSCAN
  • 密度最大值算法

 

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基於密度的聚類方法)是一種基於密度的空間聚類算法。 該算法將具有足夠密度的區域划分為簇,並在具有噪聲的空間數據庫中發現任意形狀的簇,它將簇定義為密度相連的點的最大集合。

 

 

基於密度這點有什么好處呢,我們知道kmeans聚類算法只能處理球形的簇,也就是一個聚成實心的團(這是因為算法本身計算平均距離的局限)。但往往現實中還會有各種形狀,比如下面兩張圖,環形和不規則形,這個時候,那些傳統的聚類算法顯然就悲劇了。於是就思考,樣本密度大的成一類唄。吶這就是DBSCAN聚類算法

推薦一個很形象的描述DBSCAN的網站,可視化

https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

2.DBSCAN的重要參數

(1)eps 相當於圈的半徑,越大越小都不好,自己合適調節

(2)min_samples 相當於一個圈中最少的樣本數,不到的話,就被划分為離散點

(3)metric 

 

3.DBSCAN案例

 1 import warnings
 2 warnings.filterwarnings('ignore')
 3 import numpy as np
 4 import matplotlib.pyplot as plt
 5 %matplotlib inline
 6 
 7 from sklearn import datasets
 8 from sklearn.cluster import DBSCAN,KMeans
 9 # noise控制疊加的噪聲的大小
10 X,y = datasets.make_circles(n_samples=1000,noise = 0.1,factor = 0.3)
11 
12 # centers=[[1.5,1.5]] 坐標位置,在1.5,1.5生成
13 X3,y3 = datasets.make_blobs(n_samples=500,n_features=2,centers=[[1.5,1.5]],cluster_std=0.2)
14 
15 # 將兩個數據級聯
16 X = np.concatenate([X,X3])
17 
18 y = np.concatenate([y,y3+2])
19 
20 plt.scatter(X[:,0],X[:,1],c = y)

生成的數據:

 

 

1 # kmeans 
2 # 有缺陷
3 kmeans = KMeans(3)
4 kmeans.fit(X)
5 y_ = kmeans.predict(X)
6 plt.scatter(X[:,0],X[:,1],c = y_)

kmeans形成的:可以看出,效果很不好

 

 

 

1 # dbcan
2 dbscan = DBSCAN(eps = 0.15,min_samples=5)
3 dbscan.fit(X)
4 # y_ = dbscan.fit_predict(X)
5 y_ = dbscan.labels_
6 plt.scatter(X[:,0],X[:,1],c = y_)

 

 可以看出來,使用dbscan效果明顯不錯

之后,可以再使用之前kmeans中的評測指標才評測一下

4.總結一下DBSCAN流程:

  • DBSCAN 從一個沒有被訪問過的任意起始數據點開始。這個點的鄰域是用距離 ε(ε 距離內的所有點都是鄰域點)提取的。

  • 如果在這個鄰域內有足夠數量的點(根據 minPoints),則聚類過程開始,並且當前數據點成為新簇的第一個點。否則,該點將會被標記為噪聲(稍后這個噪聲點可能仍會成為聚類的一部分)。在這兩種情況下,該點都被標記為「已訪問」。

  • 對於新簇中的第一個點,其 ε 距離鄰域內的點也成為該簇的一部分。這個使所有 ε 鄰域內的點都屬於同一個簇的過程將對所有剛剛添加到簇中的新點進行重復。

  • 重復步驟 2 和 3,直到簇中所有的點都被確定,即簇的 ε 鄰域內的所有點都被訪問和標記過。

  • 一旦我們完成了當前的簇,一個新的未訪問點將被檢索和處理,導致發現另一個簇或噪聲。重復這個過程直到所有的點被標記為已訪問。由於所有點都已經被訪問,所以每個點都屬於某個簇或噪聲。

5.DBSCAN的優缺點

優點:

DBSCAN 與其他聚類算法相比有很多優點。首先,它根本不需要固定數量的簇。它也會將異常值識別為噪聲,而不像均值漂移,即使數據點非常不同,也會簡單地將它們分入簇中。另外,它能夠很好地找到任意大小和任意形狀的簇。

缺點:

DBSCAN 的主要缺點是當簇的密度不同時,它的表現不如其他聚類算法。這是因為當密度變化時,用於識別鄰域點的距離閾值 ε 和 minPoints 的設置將會隨着簇而變化。這個缺點也會在非常高維度的數據中出現,因為距離閾值 ε 再次變得難以估計。

 

補充:

密度最大值聚類:其實就是看哪個簇的密度最大的

高局部密度點距離:換句話說,就是找比你有錢的距離你最近的人的距離

 

根據高局部密度點距離,可以識別簇中心:


免責聲明!

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



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