DBSCAN 模拟器 返回
机器学习模拟器

DBSCAN 模拟器 — 基于密度的聚类

对 2D 散布数据实时应用 DBSCAN。改变 ε 与 MinPts,学习核心点、边界点、噪声的判定,以及任意形状聚类的发现过程。

参数设置
ε(邻域半径)
MinPts
突出显示的聚类 ID
数据种子

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,几乎全成噪声了。
🎓
这就是 DBSCAN 的核心。ε 是「多近才算邻居」,MinPts 是「邻居要多少个,才算密集的中心(核心点)」。ε 变小,能被算作密集的点就少,孤立点都变噪声。把 ε 拉到 2.0,三个聚类会通过密度桥连成一个大聚类。试试看。
🙋
真的!全部变成 C1 了。那实际中怎么定 ε 呢?
🎓
经典做法是「k 距离图」:对每个点算到它第 MinPts 个最近邻的距离,把所有距离升序排好画折线。曲线急剧向上拐的「拐点」就给出比较好的 ε。比如顾客位置数据,也可以从业务含义出发——「半径 200 米里有 5 人就是商圈中心」,直接按物理量给 ε。
🙋
实心点和空心点又有什么区别?
🎓
实心是核心点,空心是边界点。核心点周围有很多伙伴;边界点自己伙伴不够,但因为旁边有核心点而被吸进聚类。噪声用灰色 × 表示。能在视觉上把数据的「骨架」「边缘」「离群值」分开,正是 DBSCAN 的强项。

常见问题

若事先知道聚类数、数据近似球状,k-means 快而省事。聚类数未知、形状复杂、需要自动剔除离群值时,DBSCAN 更合适。但 DBSCAN 对各聚类密度差异较大的数据较弱,此时可考虑切换到 HDBSCAN 或 OPTICS。
MinPts 可从维数 d 的 2 倍开始(2D 取 4~10),对噪声多的数据再调大一些。ε 通常从第 MinPts−1 个最近邻距离排序后的「k 距离图」拐点读取。也可从业务含义(商圈半径、传感器误差等)以物理量给出,效果同样不错。
原则上可以,但「维数诅咒」会让距离趋于一致,ε 的有效范围急剧缩窄。实际中通常先用 PCA、UMAP 或 t-SNE 压缩到 2~10 维再做 DBSCAN。朴素实现的复杂度是 O(n²),kd-tree 在低维有效,但维数变高效果就差。
OPTICS 不固定 ε,而对全数据绘制可达距离曲线,事后切片得到聚类。HDBSCAN 更进一步去掉 ε,从密度的层次结构中自动抽取稳定聚类。当聚类密度差异较大、或 ε 难以确定时,HDBSCAN 已逐渐成为事实标准。

实际应用

地理空间数据分析:从 GPS 轨迹抽取「停留点」、从店铺位置发现商圈、从案件位置检测犯罪热点等,DBSCAN 应用广泛。ε 可以从物理距离(米)自然确定,低密度区域自动作为噪声剔除,这是它的一大优势。

异常检测:把传感器数据或日志压缩到低维后施加 DBSCAN,将「不属于任何聚类的点(噪声)」标记为异常候选,是简单而强大的管道。在标注数据稀少的初期监控阶段尤为有用。

图像分割与点云处理:DBSCAN 常作为预处理,用于把 LiDAR 或深度相机的点云按密度分离为地面、墙面、物体。聚类数未知、形状多样的条件正好契合。

顾客分群与离群分析:市场分析中,DBSCAN 可从密度自动抽取行为相似的顾客群,把离群顾客单独审视。无需事先假定聚类数,适合用于发现未知细分群体的探索性分析。

常见误解与注意事项

最常见的误解是认为「ε 越大聚类越整齐」。增大 ε 会让原本独立的聚类通过密度桥相连,塌成一个巨大聚类。把模拟器里的 ε 调到 1.5 或 2.0:聚类 A、B、C 会连在一起,聚类数掉到 1~2。太小则全部变噪声。「合适的 ε」位于「聚类内距离 < ε < 聚类间距离」的甜蜜区,请务必通过 k 距离图的拐点确认。

其次常见的错误是认为「DBSCAN 能完美剔除离群值」。DBSCAN 判为噪声的只是「位于低密度区域的点」。密集成团的脏数据或传感器的系统误差会被照单收为核心点。噪声判定本质上基于密度,不能替代数据质量检查或预处理。

最后,千万别忘了距离尺度的预处理。DBSCAN 对所有轴使用同一个 ε(同一单位),若把尺度悬殊的特征(如年龄[岁] 与年收入[元])直接输入,距离会被大尺度轴主导,其他轴的信息被淹没。实际中务必先做标准化(StandardScaler、MinMaxScaler 等)。忽视这一点,就是经典的「结果怪怪的、说不清原因」。