IT技术之家

首页 > 人工智能

人工智能

DBSCAN聚类——Python实现_泡泡怡_dbscan聚类 python

发布时间:2022-10-24 17:12:48 人工智能 0次 标签:python 机器学习 聚类
DBSCAN聚类——Python实现,DBSCAN(Density-Baseed Spatial Clustering of Applications with Noise)聚类算法...

一、DBSCAN(Density-Baseed Spatial Clustering of Applications with Noise)聚类算法

  1. 核心对象:若某个点的密度达到算法设定的阈值则其为核心。(即r邻域内点的数量不小于minPts)
  2. 邻域的距离阈值:设定的半径r
  3. 直接密度可达:若某点p在点q的r邻域内,且q是核心点则p-q直接密度可达.

解释如图:?

????????4.?密度可达:若有一点的序列Q0,Q1,…,QK,对任意Qi-Qi-1是直接密度可达的,则称从Q0到Q是密度可达,这实际上是直接密度可达的传播。

解释如图:

二、Python代码实现?

1.产生数据集,代码如下:

from sklearn.datasets import make_moons
X,y=make_moons(n_samples=1000,noise=0.05,random_state=42)

?补充说明:X代表二维,y代表labels

2.dbscan代码:

from sklearn.cluster import DBSCAN
dbscan=DBSCAN(eps=0.2,min_samples=5)#eps是半径
dbscan.fit(X)

3.性质:

(1)labels_

dbscan.labels_#出现-1代表离群点

结果如图:

(2)核心对象的索引

dbscan.core_sample_indices_[:10]?

结果如图:

?

(3)?#观察返回几个簇
np.unique(dbscan.labels_)#7个

4.效果展示

plt.figure(figsize=(12,6))
plt.subplot(121)
plt.scatter(X[:,0],X[:,1],c='b') 
plt.title("picture_1")  
plt.subplot(122)  
plt.scatter(X[labels!=-1,0],X[labels!=-1,1],c=labels[labels!=-1]) #显示聚类了的点
plt.scatter(X[labels==-1,0],X[labels==-1,1],marker='+')   #奇异点标注为+
plt.title("picture_2")  
plt.show()

?结果如图:

三、优缺点?

优点:(1)与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。(2)对噪声敏感。这是因为该算法能够较好地判断离群点。(3)能发现任意形状的簇。这是因为DBSCAN 是靠不断连接邻域呢高密度点来发现簇的,只需要定义邻域大小和密度阈值,因此可以发现不同形状,不同大小的簇缺点:(1)对两个参数的设置敏感,即圈的半径 eps 、阈值 MinPts。(2)DBSCAN 使用固定的参数识别聚类。显然,当聚类的稀疏程度不同,聚类效果也有很大不同。即数据密度不均匀时,很难使用该算法