张芷铭的个人博客

DBSCAN 是基于密度的聚类算法,能发现任意形状的簇并自动识别噪声点,无需预设簇数量。

核心概念

概念定义
ε-邻域半径 ε 内的区域
核心点邻域内点数 ≥ min_samples
边界点在核心点邻域内但非核心点
噪声点既非核心点也非边界点

簇的定义

  1. 最大性:若 $x \in C$ 且 $y$ 从 $x$ 密度可达,则 $y \in C$
  2. 连通性:任意 $x, y \in C$,$x$ 与 $y$ 密度相连

核心性质

优势局限
无需预设簇数对参数 ε 和 min_samples 敏感
能发现任意形状簇密度差异大时效果不佳
天然识别噪声点高维数据距离度量失效

参数选择

ε 选择:k-distance 图拐点法

min_samples 选择

  • 一般取 3-10
  • 高维数据增大
  • 密度差异大时考虑 HDBSCAN

代码示例

1
2
3
4
5
6
7
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

X_scaled = StandardScaler().fit_transform(X)
dbscan = DBSCAN(eps=0.5, min_samples=2)
labels = dbscan.fit_predict(X_scaled)
# -1 表示噪声点

扩展算法

算法改进
HDBSCAN自动选择 ε,处理密度差异
OPTICS层次化密度聚类
并行DBSCAN大数据加速

Comments