文章

HDBSCAN算法简介

HDBSCAN算法简介

HDBSCAN算法简介

HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)是 DBSCAN 的层次化改进,能自动处理不同密度的聚类,无需像 DBSCAN 那样为不同密度区域反复调 eps。本文介绍其原理、与 DBSCAN 的区别、主要超参数及调优经验。


目录


1. HDBSCAN 简介

HDBSCAN = Hierarchical DBSCAN,在 DBSCAN 基础上引入层次结构,从密度层次树中选取「稳定」的聚类,从而:

  • 自动处理不同密度:稠密区域和稀疏区域可同时得到合理聚类,无需为不同区域分别设 eps
  • 更少参数依赖:不再需要 eps,主要调 min_cluster_sizemin_samples
  • 支持软聚类:可为每个点给出聚类概率(probabilities_),便于区分核心点与边界点
  • 鲁棒性更好:对参数变化相对不敏感

核心思路:先构建基于密度的层次树(单 linkage 树),再通过「Excess of Mass」或「Leaf」策略从树中选出平坦聚类,每个聚类对应一个「稳定」的密度区间。


2. 与 DBSCAN 的区别

维度DBSCANHDBSCAN
核心参数eps、min_samplesmin_cluster_size、min_samples(无 eps)
密度差异单一 eps 难以兼顾不同密度可自动处理多密度,更适合密度差异大的数据
参数敏感性eps 对结果影响大,需 K-距离图等辅助调参对参数相对不敏感,min_cluster_size 更直观
聚类选择直接按 eps 划分从密度层次树中选稳定聚类(EOM 或 Leaf)
输出硬标签(-1 为噪声)硬标签 + 聚类概率
计算O(n²) 或 O(n log n)需构建层次树,计算量略大
典型场景密度较均匀、已知 eps 区间密度差异大、聚类规模不一、希望少调参

何时用 HDBSCAN:不同聚类密度差异大、希望减少 eps 调参、或需要聚类概率时,优先考虑 HDBSCAN。


3. 主要超参数

3.1 min_cluster_size(最重要)

  • 含义:被视为聚类的最小簇大小;小于该规模的簇会被合并或标为噪声。
  • 作用:增大 → 簇数减少,小簇被合并;减小 → 簇数增多,可能出现小簇或微簇。
  • 经验(官方口径):没有统一“最佳范围”。应设为「你希望被视作一个簇的最小样本数」。例如若业务认为少于 20 个样本不算稳定簇,则可先从 min_cluster_size=20 起试;再结合结果微调。

3.2 min_samples

  • 含义:判定「核心点」时,ε 邻域内(或等价意义下)所需的最小点数,与 DBSCAN 的 MinPts(min_samples) 同一类概念;见 scikit-learn DBSCAN 文档min_samples 的说明。
  • 默认:HDBSCAN 未指定时,min_samples 默认等于 min_cluster_size(见 HDBSCAN 参数选择)。
  • 作用:增大 → 更保守,更多点被标为噪声,簇更「密」;减小 → 更宽松,更多点被归入簇。
  • 与 min_cluster_size 的区别min_cluster_size 控制「最终保留的簇至少多大」;min_samples 控制「多密才算核心区域」。二者可分开调:例如先定较大的 min_cluster_size,再把 min_samples 设为较小值以恢复更多簇(官方文档用 digits 数据演示过这一现象)。

3.3 cluster_selection_epsilon

  • 含义:距离阈值,距离小于该值的嵌套簇会被合并。
  • 作用:可减少稠密区域的微簇,同时保留稀疏区域的小簇;设为 0 则不做此类合并。
  • 经验:需要抑制微簇时,根据数据距离尺度设定(如 0.5、1.0);多数场景可先用 0.0,再按效果微调。

3.4 cluster_selection_method

  • ‘eom’(默认):Excess of Mass,倾向选出较稳定的大簇,可能得到少量大簇 + 若干小簇。
  • ‘leaf’:选叶节点,倾向更多、更小、更同质的簇;适合需要细粒度聚类的场景。

3.5 allow_single_cluster

  • 默认:False,不返回「整个数据集为一个大簇」的结果。
  • 设为 True:允许返回单一簇,适用于数据本身较均匀或基本为噪声时的探索。

3.6 metric

  • 距离度量,如 ‘euclidean’、’manhattan’;高维或非欧数据可考虑 ‘cosine’ 等,需与数据特性匹配。

4. 调优经验与策略

4.1 调参思路

  1. 先定 min_cluster_size:按业务需求设定「最小簇规模」,如 5 或 10。
  2. 再调 min_samples
    • 噪声过多 → 适当增大 min_samples;
    • 簇过少、点大量为噪声 → 适当减小 min_samples(可小于 min_cluster_size)。
  3. 微簇过多:尝试设置 cluster_selection_epsilon(按数据距离尺度)。
  4. 簇过粗/过细:尝试 cluster_selection_method(’eom’ vs ‘leaf’)。

4.2 经验取值参考

下表为思路参考min_samples 不宜写死为「3~5」——可先从 ≥ D+1约 2×D(见上文 DBSCAN 参数经验)起试,再按噪声与簇形态微调。

场景min_cluster_sizemin_samplescluster_selection_epsilon
希望簇多、粒度细偏小(业务可接受的最小簇)可从 max(3, D+1)2×D 起试0.0
均衡按业务最小簇规模等于 min_cluster_size,或单独设为 2×D 附近0.0
希望簇少、更粗偏大可略小于 min_cluster_size(见 HDBSCAN 文档示例按距离尺度设定
抑制微簇按业务与上类似,噪声大则略增大按数据距离尺度

4.3 评估方式

  • DBCV(Density-Based Clustering Validation):考虑密度和噪声,比轮廓系数(Silhouette)更适合密度聚类。
  • 业务校验:结合领域知识检查簇是否合理、噪声是否可接受。

4.4 使用 memory 加速调参

多次调 min_cluster_size 时,可将层次树等中间结果缓存,避免重复计算:

1
2
3
4
5
6
7
8
9
10
11
from hdbscan import HDBSCAN
import joblib

# 使用 memory 缓存,加速多次调参
clusterer = HDBSCAN(
    min_cluster_size=10,
    min_samples=5,
    cluster_selection_epsilon=0.0,
    memory=joblib.Memory("cachedir", verbose=0)
)
labels = clusterer.fit_predict(X)

5. 小结

主题要点
HDBSCAN 优势无 eps、可处理多密度、参数更直观、支持聚类概率
与 DBSCAN密度差异大时优先 HDBSCAN;密度较均匀且已知 eps 时可用 DBSCAN
核心参数min_cluster_size(主)、min_samples、cluster_selection_epsilon、cluster_selection_method
调优顺序先 min_cluster_size → min_samples → cluster_selection_epsilon → cluster_selection_method
评估使用 DBCV 或业务校验,慎用 Silhouette
本文由作者按照 CC BY 4.0 进行授权