DBSCAN 是基于密度的聚类算法,能发现任意形状的簇并自动识别噪声点,无需预设簇数量。
核心概念
| 概念 | 定义 |
|---|
| ε-邻域 | 半径 ε 内的区域 |
| 核心点 | 邻域内点数 ≥ min_samples |
| 边界点 | 在核心点邻域内但非核心点 |
| 噪声点 | 既非核心点也非边界点 |
簇的定义
- 最大性:若 $x \in C$ 且 $y$ 从 $x$ 密度可达,则 $y \in C$
- 连通性:任意 $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