← 返回题目列表

DBSCAN 聚类的原理是什么?相比 K-means 有什么优势?

高频 中等 第 6 / 25 题 更新于 2026/08/02
无监督学习DBSCAN密度聚类噪声

简化版

DBSCAN基于密度的聚类算法:它把「样本密集的区域」连成簇,把稀疏区域的点当作噪声。核心靠两个参数——ε(邻域半径)MinPts(成为核心点所需的邻域最少点数)。一个点如果 ε 邻域内点数 ≥ MinPts 就是核心点,核心点及其密度可达的点连成一个簇。相比 K-means 的优势:① 不需要预先指定簇数 K② 能发现任意形状的簇(非球形、月牙、环形);③ 能自动识别噪声/离群点④ 对离群点鲁棒。缺点:对参数 ε、MinPts 敏感密度差异大的簇处理不好高维下距离失效效果差

详细版

三类点:

点类型定义
核心点(Core)ε 邻域内的点数 ≥ MinPts
边界点(Border)不是核心点,但落在某核心点的 ε 邻域内
噪声点(Noise)既非核心也非边界(稀疏区孤立点)

算法流程:

for 每个未访问的点 p:
   若 p 的 ε 邻域内点数 ≥ MinPts(p 是核心点):
      新建一个簇,把 p 及其「密度可达」的所有点加入该簇(邻域扩展)
   否则:
      暂标为噪声(后续可能变成某簇的边界点)

DBSCAN vs K-means:

K-meansDBSCAN
需指定 K
簇形状球形任意形状
噪声识别
离群点敏感鲁棒
参数Kε、MinPts
密度不均处理差

完整版教学

一、DBSCAN 的核心思想:跟着密度走

K-means 用「到中心的距离」分簇,隐含假设簇是球形。DBSCAN(Density-Based Spatial Clustering of Applications with Noise) 换了个思路——簇是「样本密集连成一片」的区域,簇与簇之间由稀疏区隔开,稀疏区里孤立的点就是噪声。

这个「密度」视角带来两个 K-means 没有的能力:能识别任意形状的簇(只要密集相连就算一簇,不管形状),能识别噪声(稀疏孤立的点单独拎出来,不硬塞进某个簇)。

二、两个关键参数:ε 和 MinPts

DBSCAN 靠两个参数定义「密度」:

  • ε(eps,邻域半径):以一个点为圆心、半径 ε 的圆(高维是球)叫它的「ε 邻域」。
  • MinPts(最少点数):一个点的 ε 邻域内至少要有多少个点,才算「处在稠密区」。

「密集」就定义为:ε 邻域内的点数 ≥ MinPts。这两个参数一起决定了「多密才算簇」。

按常见定义,ε 邻域计数包含该点自身,因此 MinPts=5 表示自身加附近点至少 5 个;具体库若不同应以文档为准。ε 与 MinPts 相互作用:增大 ε 或减小 MinPts 都会产生更多核心点并促进簇合并。

ε 太小 / MinPts 太大  -> 大量噪声、簇被切碎
ε 太大 / MinPts 太小  -> 不同簇被密度连通桥合并

距离强依赖量纲,通常先按特征语义缩放,再用 k-distance 图寻找候选 ε。高维距离集中时,OPTICS、HDBSCAN 或合理降维后聚类往往更稳妥。

三、三类点:核心、边界、噪声

基于密度,DBSCAN 把所有点分成三类:

  • 核心点(Core Point):ε 邻域内点数 ≥ MinPts——它处在稠密区中心,能「发展下线」。
  • 边界点(Border Point):自己邻域内点数不够(不是核心点),但落在某个核心点的 ε 邻域内——它在簇的边缘。
  • 噪声点(Noise Point):既不是核心点,也不在任何核心点的邻域内——稀疏区的孤立点,被判为噪声
     ●●●         ← 稠密区,中间是核心点
   ●●核心●●
     ●边界●   ← 边界点在核心点邻域内
              ○  ← 噪声点,孤立在稀疏区

四、算法流程:从核心点「长」出簇

DBSCAN 通过核心点不断「扩展邻域」把簇长出来:

1. 任选一个未访问的点 p
2. 若 p 是核心点(ε 邻域内 ≥ MinPts):
   - 新建一个簇,把 p 加入
   - 把 p 邻域内的所有点也加入,并对其中的核心点继续扩展它们的邻域
     (这个「密度可达」的传递扩展,把一整片稠密相连的区域并成一个簇)
3. 若 p 不是核心点,暂标为噪声(若之后发现它在某核心点邻域内,会变成边界点)
4. 重复直到所有点都被访问

关键概念——密度可达:如果能从一个核心点出发,通过一连串「每步都在前一个核心点邻域内」的核心点链,到达某个点,那这个点就和起点属于同一簇。正是这种「稠密相连就是一簇」的机制,让 DBSCAN 能识别任意形状的簇——月牙、环形、蜿蜒的条带都能沿着密度连起来。

五、相比 K-means 的优势

  1. 不需要预先指定簇数 K:簇的数量由数据密度自动决定(K-means 必须先定 K)。
  2. 能发现任意形状的簇:只要密集相连就算一簇,不受球形假设限制(K-means 只能球形)。
  3. 能自动识别噪声/离群点:稀疏孤立点被单独标为噪声,不强行归类(K-means 会把离群点硬塞进某簇并拉偏中心)。
  4. 对离群点鲁棒:离群点被当噪声,不影响簇的形成。

六、缺点与适用

缺点:

  • 对参数 ε、MinPts 敏感:参数没选好,簇会连成一片或碎成噪声。ε 常用 k-距离图辅助确定(看拐点)。
  • 密度差异大的簇处理不好:全局统一的 ε、MinPts 无法同时适配「稠密簇」和「稀疏簇」——稀疏簇会被当噪声,或稠密簇被合并。改进有 OPTICS、HDBSCAN(自适应密度)。
  • 高维数据效果差:高维下距离趋于相等(维度灾难),「密度」的区分度下降。
  • 边界点归属可能不确定(取决于先遇到哪个核心点)。

适用簇形状不规则、有噪声、不知道簇数、密度相对均匀的场景(如地理空间聚类、异常检测)。密度差异大或高维时慎用。

七、常见追问

  • DBSCAN 为什么能识别任意形状? 靠「密度可达」把稠密相连的区域并成一簇,不假设球形。
  • ε 怎么定? 常用 k-距离图(对每个点算到第 k 近邻的距离、排序,找拐点)。
  • MinPts 怎么定? 经验上 ≥ 维度+1,常取 2×维度左右;越大越抗噪但可能漏小簇。
  • 密度不均怎么办? 用 OPTICS/HDBSCAN 等自适应密度的改进算法。
  • 和 K-means 怎么选? 球形、已知簇数、大数据→K-means;任意形状、有噪声、不知簇数→DBSCAN。

八、用七个邻域点走一遍核心点判定

按经典定义,MinPts 的邻域计数通常包含样本自身。设二维空间里点 P 的 ε=0.5 邻域包含 P、A、B、C 共 4 个点,且 MinPts=4,P 是核心点;若 Q 的邻域只有 Q、R 两点,但 Q 落在 P 的邻域内,Q 是边界点;远处的 Z 不在任何核心点邻域内,最终是噪声。

参数状态直接结果常见现象
ε 太小 / MinPts 太大核心点少大量点成为噪声
合理组合密度连通区展开簇与噪声较稳定
ε 太大 / MinPts 太小邻域过易连通多个簇被桥接成一簇
访问 P → 邻域数 4,成为核心点
      → 把 A/B/C 放入扩展队列
      → A 若也是核心点,再并入 A 的邻域
      → 队列耗尽,得到一个密度连通分量

参数应在完成尺度处理后选择,因为同一个 ε 的物理含义会随单位改变。用空间索引时,邻域查询在低维可明显加速;高维下索引退化,整体成本可能接近平方级。

易错点:DBSCAN 不要求输入 K,但并不等于“没有模型选择”;ε、MinPts、距离度量和尺度共同定义了最终簇数。

九、常见误区与追问

  • 误区:DBSCAN 完全不需要调参。 它不输入簇数,但对 ε、MinPts 与距离度量高度依赖。
  • 误区:被暂时标成噪声的点永远是噪声。 后续若落入某核心点邻域,它可以改为边界点。
  • 追问:MinPts 是否包含点自身? 经典 ε 邻域通常包含自身,但面试和代码都应声明采用的实现口径。
  • 追问:边界点可能同时邻接两个簇怎么办? 它不会扩展簇,归属可能受访问顺序或实现规则影响。
  • 追问:密度差异很大怎么处理? 单组全局参数难兼顾,可考虑 OPTICS、HDBSCAN 或分区建模。

十、加强记忆

DBSCAN 是基于密度的聚类:把稠密相连的区域连成簇、稀疏区孤立点当噪声。两个参数 ε(邻域半径)+ MinPts(成为核心点所需邻域最少点数) 定义密度,三类点:核心点(邻域内≥MinPts)、边界点(在核心点邻域内但自己不够核心)、噪声点(稀疏孤立)。算法从核心点出发、靠「密度可达」扩展邻域,把稠密相连的一片并成一簇——所以能识别任意形状的簇。相比 K-means 四大优势:不用预先指定 K、可发现非凸形状簇、能显式标记噪声;密度假设合适时通常比均值型方法更抗孤立点。缺点:对 ε/MinPts 敏感、密度差异大的簇处理差(用 OPTICS/HDBSCAN)、高维失效。选择:紧凑近似球形且已知簇数可考虑 K-means;存在非凸结构和噪声、且簇密度相近时可考虑 DBSCAN。