文章

HDBSCAN算法超参数说明

HDBSCAN算法超参数说明

HDBSCAN算法超参数说明

适用对象:hdbscan 库(scikit-learn-contrib 实现)的 HDBSCAN 类。 注意:sklearn.cluster.HDBSCAN 与本文所述的 hdbscan 库在部分参数默认值与语义上存在差异(详见 §7 两个实现的差异)。


目录

  1. 算法简介
  2. 与 DBSCAN 的关键区别:没有 eps
  3. 完整参数签名
  4. 参数分类详解
  5. 调参指南
  6. 典型问题与对应参数
  7. 两个实现的差异
  8. 理论依据与参考链接

1. 算法简介

HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)由 Campello、Moulavi、Sander 提出,是 DBSCAN 的层次化扩展。其核心流程:

  1. 核心距离(core distance):用第 k 近邻距离估计每个点的局部密度。
  2. 互达距离(mutual reachability distance):重新定义点对距离,将低密度点彼此「推远」。
  3. 最小生成树(MST):在互达距离图上构造 MST。
  4. 聚类层次(cluster hierarchy):将 MST 转为层次树。
  5. 压缩树(condensed tree)+ 稳定性提取:依据簇在不同密度阈值下的「稳定性 / 持久度」剪枝,提取扁平聚类,其余点标记为噪声(label = -1)。

相较 DBSCAN,HDBSCAN 能识别不同密度的簇,并通过稳定性自动决定聚类层级,无需指定全局密度半径。

关于「噪声」的正确理解:噪声点(-1)并非「与其他点差异很大」,而是「不属于任何足够密、足够稳定的簇」。当数据整体较均匀、缺乏突出密集核时,可能出现大量甚至全部点被判为噪声的情况——这通常意味着参数设置或数据结构问题,而非「数据差异大」。


2. 与 DBSCAN 的关键区别:没有 eps

概念所属算法含义
epsDBSCAN 专属全局密度邻域半径,是 DBSCAN 的核心参数
cluster_selection_epsilonHDBSCAN 专属名字含 epsilon,但语义完全不同:它是从层次树提取扁平聚类时的合并距离阈值,属于后处理参数,不参与密度定义

要点

  • HDBSCAN 不需要 eps。密度由 min_samples(核心距离的 k)与层次结构自动决定,这是它「免 eps 调参」的根本原因。
  • 不要把 DBSCAN 的 eps 与 HDBSCAN 的 cluster_selection_epsilon 混为一谈:前者定义「邻域」,后者定义「相邻簇是否合并」。

3. 完整参数签名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HDBSCAN(
    min_cluster_size=5,
    min_samples=None,
    cluster_selection_epsilon=0.0,
    cluster_selection_persistence=0.0,
    max_cluster_size=0,
    metric='euclidean',
    alpha=1.0,
    p=None,
    algorithm='best',
    leaf_size=40,
    memory=Memory(location=None),
    approx_min_span_tree=True,
    gen_min_span_tree=False,
    core_dist_n_jobs=4,
    cluster_selection_method='eom',
    allow_single_cluster=False,
    prediction_data=False,
    branch_detection_data=False,
    match_reference_implementation=False,
    cluster_selection_epsilon_max=inf,
)

4. 参数分类详解

4.1 影响「簇数 / 噪声」的核心结构参数

这类参数对聚类结果影响最大,是调参的主战场。

参数默认值作用调整方向
min_cluster_size5一个簇被认可的最小样本数越大→簇越少、越大;过大可能导致全噪声
min_samplesNone(等于 min_cluster_size核心点所需邻居数,控制聚类保守程度越大→越多点判为噪声、簇越紧凑;越小→更宽松
cluster_selection_method'eom'从压缩树提取扁平簇的方式:eom(Excess of Mass,倾向少而大的稳定簇)/ leaf(取叶节点,产生多而小的同质簇)想要少而大→eom;想要多而细→leaf
allow_single_clusterFalse是否允许返回单一簇当数据本质上是一个大簇、或大尺度结构应只有一类时,设 True;默认 False 时 EOM 因「根簇偏置」拒绝输出单簇
cluster_selection_epsilon0.0距离小于该阈值的相邻簇将被合并调大→合并碎簇、减少簇数
cluster_selection_epsilon_maxinf距离大于该阈值的簇将被拆分(仅 eom 有效)一般保持 inf;approximate_predict 不兼容,慎用
cluster_selection_persistence0.0按稳定性持久度过滤掉「短命」簇调大→滤除不稳定碎簇
max_cluster_size0(无限制)eom 模式下单簇规模上限;leaf 模式无效限制超大簇时使用
alpha1.0距离缩放参数,提供另一种调节保守度的方式官方建议最后才考虑、通常不要调整;调大→更保守(且会重算单链接树)

min_cluster_size vs min_samples 的直观区别

  • min_samples:来自 DBSCAN 部分,决定「核心点」的密度门槛。越大,越多点被当作噪声/离群,聚类越保守。
  • min_cluster_size:来自层次(H)部分,决定「最终簇的最小规模」。越大,小簇会被合并到最相似的邻簇,直到所有簇都达到该规模。
  • 经验组合:
    • 想要许多高度具体的簇:小 min_samples + 小 min_cluster_size
    • 想要较概括但保留细节的簇:小 min_samples + 大 min_cluster_size
    • 想要非常概括且丢弃大量噪声:大 min_samples + 大 min_cluster_size
  • 约束:min_samples 一般不大于 min_cluster_size

4.2 距离度量参数

参数默认值说明
metric'euclidean'距离度量方式(如 euclideanmanhattanminkowski 等)
pNone仅当 metric='minkowski' 时使用的阶数

提示:在高维稠密数据上,欧氏距离会出现「距离集中」现象(点对距离趋同),通常建议先降维再聚类,或选用更合适的度量。

4.3 性能 / 算法实现参数

参数默认值说明
algorithm'best'MST 构造算法:best 自动选择,可选 genericprims_kdtreeprims_balltreeboruvka_kdtreeboruvka_balltree;低维下 KD-tree/Ball-tree 更快,高维退化为 generic
leaf_size40空间树(KD/Ball-tree)的叶子大小,影响构树速度与内存
approx_min_span_treeTrue是否使用近似 MST(更快);False 更精确但更慢
core_dist_n_jobs4计算核心距离的并行进程数;在部分平台(如 Windows)设为 1 可避免多进程序列化大数组导致的内存错误
memoryNone缓存中间计算结果的目录,便于重复运行时加速

4.4 输出 / 预测 / 可视化参数

参数默认值说明
prediction_dataFalse设为 True 后保留预测所需数据,才能对新样本调用 approximate_predict(用于「子样本拟合 + 全量近似分配」等扩展场景)
gen_min_span_treeFalse是否生成最小生成树对象,供层次结构可视化
branch_detection_dataFalse是否保留簇内分支检测所需数据
match_reference_implementationFalse是否对齐参考实现的细节行为

5. 调参指南

官方建议:尽管参数众多,真正对结果有显著影响的只有少数几个,调参应集中于此,按以下优先级进行:

  1. min_cluster_size:先确定「多大才算一个有意义的群体」。
  2. min_samples:调节保守程度(噪声多少)。通常从等于或小于 min_cluster_size 开始;越大噪声越多。
  3. cluster_selection_method:需要少而大的簇用 eom;需要多而细同质的簇用 leaf
  4. cluster_selection_epsilon:当存在大量「本应属于同一簇」的碎簇时,调大以合并。
  5. allow_single_cluster:当怀疑数据只有一个大尺度结构(或几乎无结构)时启用。
  6. alpha:仅在上述参数都无法满足时才考虑,且应谨慎。

一般性原则:优先用 min_samplescluster_selection_epsilon 解决问题;若仍不满足,停下来重新审视数据与特征,而不是盲目堆参数。


6. 典型问题与对应参数

现象可能原因可尝试的参数调整
簇被切得过碎(本应是一个群体,却分出很多小簇)密度结构内部有次级起伏;min_cluster_size 偏小调大 cluster_selection_epsilon 合并;增大 min_cluster_size;考虑 allow_single_cluster=True
几乎全部样本被判为噪声min_cluster_size / min_samples 过大;或数据整体均匀、无突出密集核减小 min_cluster_sizemin_samples;启用 allow_single_cluster=True;检查特征是否缺乏区分度
簇太多、太细使用了 leaf 或参数过松改用 cluster_selection_method='eom';增大 min_cluster_size
想要更多细粒度同质子群EOM 倾向少而大改用 cluster_selection_method='leaf'
高维数据聚类质量差距离集中、欧氏失真先降维(如 PCA / UMAP)再聚类;调整 metric
大数据量运行慢 / 内存高全量构造 MST 成本高选合适 algorithm、调 leaf_size、用近似 MST;或子样本拟合 + approximate_predict(需 prediction_data=True

7. 两个实现的差异

维度hdbscan 库(scikit-learn-contrib)sklearn.cluster.HDBSCAN
min_samples 计数包含点自身包含点自身(要得到相同结果,sklearn 的值需比 contrib 大 1)
max_cluster_size 默认0(表示无限制)None(表示无限制)
algorithm 取值'best'boruvka_kdtree'auto''brute''kd_tree''ball_tree'
额外特性prediction_datagen_min_span_treecondensed_tree_approximate_predict 等更丰富接口更精简,部分高级特性不提供

选择实现时,应以实际所用库的官方文档为准。


8. 理论依据与参考链接

链接内容
hdbscan API(完整参数签名)hdbscan 库全部参数定义
Parameter Selection for HDBSCAN*官方调参指南:核心参数取舍
How HDBSCAN Works互达距离、MST、压缩树、EOM 稳定性提取原理
parameter_selection.rst(源文档)allow_single_cluster 等用法说明
sklearn.cluster.HDBSCAN 文档scikit-learn 实现的参数说明
Campello, Moulavi, Sander (2013), PAKDD原始论文《Density-Based Clustering Based on Hierarchical Density Estimates》
Campello et al. (2015), ACM TKDD扩展期刊版(稳定性提取与离群检测理论)
min_samples 与 cluster_selection_epsilon 的区别(Stack Overflow)三个核心参数的直观对比

附:参数速查表

类别参数
核心结构min_cluster_sizemin_samplescluster_selection_methodallow_single_clustercluster_selection_epsiloncluster_selection_epsilon_maxcluster_selection_persistencemax_cluster_sizealpha
距离度量metricp
性能/算法algorithmleaf_sizeapprox_min_span_treecore_dist_n_jobsmemory
输出/预测/可视化prediction_datagen_min_span_treebranch_detection_datamatch_reference_implementation
本文由作者按照 CC BY 4.0 进行授权