参数设置
重置
70 个点(3 个聚类 + 均匀噪声)通过固定种子 LCG 确定论证生成。强调 ID 为 0 时显示所有聚类。
2D 散点图与聚类判定
填充=核心点/仅轮廓=边界点/灰色×=噪声/颜色=聚类 ID(图例右上)
理论与主要公式
DBSCAN 通过距离 d(此处采用欧几里得距离)和两个参数 ε、MinPts 定义密度,将密度的连通分量提取为聚类。
点 p 的 ε 邻域:
$$N_\varepsilon(p) = \{\, q \in D \mid d(p,q) \le \varepsilon \,\}$$
核心点判定(ε 邻域内至少有 MinPts 个点):
$$|N_\varepsilon(p)| \ge \mathrm{MinPts}$$
从核心点 p 到 q 的直接可达性:
$$q \in N_\varepsilon(p) \;\wedge\; p \text{ 是核心点}$$
将核心点用边连接构成的图的连通分量为聚类。在核心点 ε 邻域内的非核心点作为边界点纳入同一聚类。不在任何核心点 ε 邻域内的点为噪声(聚类 ID = −1)。
DBSCAN 模拟器简介
🙋
DBSCAN 和 k-means 有什么区别呢?我都听说过"创建聚类",但不太明白两者的差异。
🎓
简单来说,k-means 需要一开始就决定"要分成多少个聚类",然后把每个点分配给最近的质心。这样只能处理圆球形的聚类,月牙形或圆环形就不行了。DBSCAN 的思路不同,它说"密度高的地方就是聚类,密度低的就是噪声",不用提前指定聚类数,而且形状可以随意。看看上面模拟器的 C 聚类(弧形),它就完完整整地作为一个聚类被识别出来了。
🙋
我明白了!把"ε"和"MinPts"滑块改一改,结果就完全不同。当我把 ε 降到 0.3,几乎所有点都变成噪声了。
🎓
就是这个意思。ε 控制"多近距离的点算是邻居",MinPts 控制"邻居要有多少个才能算是密集中心(核心点)"。ε 越小,能被认可为"密集"的点就越少,孤立的点全部沦为噪声。反过来,如果你把 ε 调到 2.0,三个聚类会黏在一起变成一个巨大聚类。试试看。
🙋
真的!全部都变成 C1 了。那实际工作中怎么选 ε 呢?
🎓
标准方法叫"k 距离图"。对每个点,找到离它第 MinPts 近的邻居,记录距离。把所有点的这个距离从小到大排列,画成折线。折线突然上升的"肘部"位置对应的距离通常就是合适的 ε。另一个办法是从业务角度定义,比如"某商业圈半径 500 米内有 10 个以上消费者就认为是商业密集区",这样 ε 就直接对应现实意义了。
🎓
填充的是核心点,只有轮廓的是边界点。核心点的周围"人烟稠密",邻近地区有很多伙伴。边界点自己周围很空旷,邻居不足,但恰好站在某个核心点的邻域里,所以被"拉入"那个聚类。灰色的 × 是噪声,谁都不要的点。这样就能清晰地看出数据的"骨骼"、"边界"和"异常",这是 DBSCAN 的独特优势。
常见问题
DBSCAN 和 k-means 如何选择使用?
如果聚类数已知且数据呈球形分布,k-means 速度快且容易使用。如果聚类数未知、形状复杂、需要自动排除异常点,用 DBSCAN 更好。但 DBSCAN 对密度差异大的数据表现较差,这时可考虑切换到 HDBSCAN 或 OPTICS。
选择 ε 和 MinPts 的诀窍是什么?
MinPts 一般按经验法则设为约 2d(二维数据通常为 4~10)。ε 的标准做法是通过"k 距离图"(第 MinPts 个最近邻距离排序)找肘点。业务角度也可行,比如"传感器误差范围"或"地理距离上的物理意义"来直接定义 ε。
在高维数据上能用吗?
原理上可以,但会遇到"维度诅咒"——高维空间里距离变得均匀无差别,ε 的有效范围极其狭窄。实际做法是先用 PCA、UMAP 或 t-SNE 压缩到 2~10 维,再跑 DBSCAN。计算复杂度上,朴素实现是 O(n²),即使用 kd-tree 加速也在高维时效果有限。
HDBSCAN 和 OPTICS 有什么区别?
OPTICS 不固定 ε,用"可达距离"对全数据画分层,后来可灵活切割层级。HDBSCAN 进一步去掉 ε,从密度分层中自动提取稳定聚类。当聚类密度差异大、或 ε 难以确定时,HDBSCAN 已成为业界标准方案。
现实应用案例
地理空间分析: 从 GPS 轨迹提取"常驻地",从店铺位置发现商业圈,从犯罪点位检测热点区域——DBSCAN 在这些领域被广泛使用。因为距离有明确的地理物理意义,ε 很容易设定,而且能自动排除低密度区域。
异常检测: 将传感器数据或日志压缩到低维,跑 DBSCAN,把"不属于任何聚类"的点(噪声)作为异常候选。这个方法简单有力,标注数据少的初期监控中特别有用。
图像分割和点云处理: LiDAR 或深度摄像头得到的三维点云,用 DBSCAN 按密度分离地面、墙壁、物体。点数和形状都不确定的场景很适合密度聚类。
客户分群和异常分析: 营销分析中,从购买行为用密度自动发现相似顾客群,外值客户单独审视。不用猜聚类数,能自发现未知的客户层,特别适合探索性分析。
常见误区和注意事项
最常见的误解是"ε 越大聚类越好 "。实际上 ε 加大会让本来不相关的聚类通过密度桥连通,融合成一个巨聚类。在模拟器上试试把 ε 改到 1.5 或 2.0,会看到聚类 A、B、C 黏在一起,检测聚类数从 3 降到 1 或 2。反之 ε 太小全是噪声。真正的"合适 ε"卡在"聚类内距离 < ε < 聚类间距离"的甜蜜点,必须看 k 距离图的肘点。
另一个常见误会是"DBSCAN 能完美清除异常值 "。DBSCAN 判噪声只看密度,对于密集的虚假数据或系统性传感器偏差,它会照样当成正常的核心点吞进去。噪声判定完全基于密度,不能替代数据质量检查或预处理。
最后要特别注意"特征尺度问题 "。DBSCAN 在所有轴用同一个 ε,如果特征量纲不同(如年龄[岁]和年收[元]),大尺度的轴会主导距离计算,小尺度的轴信息被淹没。实务中必须先做标准化(StandardScaler、MinMaxScaler 等),再送进 DBSCAN。这是最常见的"结果莫名奇妙但找不到原因"的坑。