欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码

程序员文章站 2022-07-14 11:40:22
...

DBSCAN 

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法。

基本概念:

所需参数:
半径:Eps
Eps半径内指定的数目(阈值):MinPts

数据点分为三:
1. 核心点:在半径Eps内含有超过MinPts数目的点
2. 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内
3. 噪音点:既不是核心点也不是边界点的点

DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码

概念:
1. Eps领域:半径Eps之内所有点的合集
2. 直接密度可达(密度直达):核心点X1对Eps领域内的任意点都是直接密度可达
3. 密度可达:设数据点点序列p(1),p(2),p(3),…,p(n),其中p(1)是核心对象,p(2)是从p(1)出发直接密度可达,p(n)从p(1)出发是密度可达的

基本步骤:

DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码


DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码


算法优点:

1. 不需要如同K-means一样设置初始类别个数
2. 可以对任意形状的稠密数据集进行聚类
3. 对噪点有抗性
4. 结果不会有偏倚(不是指每次结果完全一样,而是大部分相同,不排除个别点)

算法缺点:

1. 数据密度不均匀时难以使用
2. 样本集越大,收敛时间越长,可用K-D树进行优化
3. Eps,MinPts阈值难以界定,可用绘制k-距离曲线等方法界定

Python代码:

from sklearn.datasets.samples_generator import make_moons
import matplotlib.pyplot as plt

import time
from sklearn.cluster import KMeans

from sklearn.cluster import DBSCAN

X,y_true = make_moons(n_samples=1000,noise=0.15)

plt.scatter(X[:,0],X[:,1],c=y_true)
plt.show()

#Kmeans
t0 = time.time()
kmeans = KMeans(init = 'k-means++',n_clusters=2, random_state=8).fit(X)
t = time.time() - t0
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.title('time : %f'%t)
plt.show()

#DBSCAN
t0 = time.time()
dbscan = DBSCAN(eps=.1,min_samples=6).fit(X)
t = time.time()-t0
plt.scatter(X[:, 0], X[:, 1], c=dbscan.labels_)
plt.title('time : %f'%t)
plt.show()

随机数据:
DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码
K-means聚类:
DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码
DBSCAN聚类:
DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码