HDBSCAN算法超参数说明
HDBSCAN算法超参数说明
HDBSCAN算法超参数说明
适用对象:
hdbscan库(scikit-learn-contrib 实现)的HDBSCAN类。 注意:sklearn.cluster.HDBSCAN与本文所述的hdbscan库在部分参数默认值与语义上存在差异(详见 §7 两个实现的差异)。
目录
1. 算法简介
HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)由 Campello、Moulavi、Sander 提出,是 DBSCAN 的层次化扩展。其核心流程:
- 核心距离(core distance):用第 k 近邻距离估计每个点的局部密度。
- 互达距离(mutual reachability distance):重新定义点对距离,将低密度点彼此「推远」。
- 最小生成树(MST):在互达距离图上构造 MST。
- 聚类层次(cluster hierarchy):将 MST 转为层次树。
- 压缩树(condensed tree)+ 稳定性提取:依据簇在不同密度阈值下的「稳定性 / 持久度」剪枝,提取扁平聚类,其余点标记为噪声(label = -1)。
相较 DBSCAN,HDBSCAN 能识别不同密度的簇,并通过稳定性自动决定聚类层级,无需指定全局密度半径。
关于「噪声」的正确理解:噪声点(-1)并非「与其他点差异很大」,而是「不属于任何足够密、足够稳定的簇」。当数据整体较均匀、缺乏突出密集核时,可能出现大量甚至全部点被判为噪声的情况——这通常意味着参数设置或数据结构问题,而非「数据差异大」。
2. 与 DBSCAN 的关键区别:没有 eps
| 概念 | 所属算法 | 含义 |
|---|---|---|
eps | DBSCAN 专属 | 全局密度邻域半径,是 DBSCAN 的核心参数 |
cluster_selection_epsilon | HDBSCAN 专属 | 名字含 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_size | 5 | 一个簇被认可的最小样本数 | 越大→簇越少、越大;过大可能导致全噪声 |
min_samples | None(等于 min_cluster_size) | 核心点所需邻居数,控制聚类保守程度 | 越大→越多点判为噪声、簇越紧凑;越小→更宽松 |
cluster_selection_method | 'eom' | 从压缩树提取扁平簇的方式:eom(Excess of Mass,倾向少而大的稳定簇)/ leaf(取叶节点,产生多而小的同质簇) | 想要少而大→eom;想要多而细→leaf |
allow_single_cluster | False | 是否允许返回单一簇 | 当数据本质上是一个大簇、或大尺度结构应只有一类时,设 True;默认 False 时 EOM 因「根簇偏置」拒绝输出单簇 |
cluster_selection_epsilon | 0.0 | 距离小于该阈值的相邻簇将被合并 | 调大→合并碎簇、减少簇数 |
cluster_selection_epsilon_max | inf | 距离大于该阈值的簇将被拆分(仅 eom 有效) | 一般保持 inf;与 approximate_predict 不兼容,慎用 |
cluster_selection_persistence | 0.0 | 按稳定性持久度过滤掉「短命」簇 | 调大→滤除不稳定碎簇 |
max_cluster_size | 0(无限制) | eom 模式下单簇规模上限;leaf 模式无效 | 限制超大簇时使用 |
alpha | 1.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' | 距离度量方式(如 euclidean、manhattan、minkowski 等) |
p | None | 仅当 metric='minkowski' 时使用的阶数 |
提示:在高维稠密数据上,欧氏距离会出现「距离集中」现象(点对距离趋同),通常建议先降维再聚类,或选用更合适的度量。
4.3 性能 / 算法实现参数
| 参数 | 默认值 | 说明 |
|---|---|---|
algorithm | 'best' | MST 构造算法:best 自动选择,可选 generic、prims_kdtree、prims_balltree、boruvka_kdtree、boruvka_balltree;低维下 KD-tree/Ball-tree 更快,高维退化为 generic |
leaf_size | 40 | 空间树(KD/Ball-tree)的叶子大小,影响构树速度与内存 |
approx_min_span_tree | True | 是否使用近似 MST(更快);False 更精确但更慢 |
core_dist_n_jobs | 4 | 计算核心距离的并行进程数;在部分平台(如 Windows)设为 1 可避免多进程序列化大数组导致的内存错误 |
memory | None | 缓存中间计算结果的目录,便于重复运行时加速 |
4.4 输出 / 预测 / 可视化参数
| 参数 | 默认值 | 说明 |
|---|---|---|
prediction_data | False | 设为 True 后保留预测所需数据,才能对新样本调用 approximate_predict(用于「子样本拟合 + 全量近似分配」等扩展场景) |
gen_min_span_tree | False | 是否生成最小生成树对象,供层次结构可视化 |
branch_detection_data | False | 是否保留簇内分支检测所需数据 |
match_reference_implementation | False | 是否对齐参考实现的细节行为 |
5. 调参指南
官方建议:尽管参数众多,真正对结果有显著影响的只有少数几个,调参应集中于此,按以下优先级进行:
min_cluster_size:先确定「多大才算一个有意义的群体」。min_samples:调节保守程度(噪声多少)。通常从等于或小于min_cluster_size开始;越大噪声越多。cluster_selection_method:需要少而大的簇用eom;需要多而细同质的簇用leaf。cluster_selection_epsilon:当存在大量「本应属于同一簇」的碎簇时,调大以合并。allow_single_cluster:当怀疑数据只有一个大尺度结构(或几乎无结构)时启用。alpha:仅在上述参数都无法满足时才考虑,且应谨慎。
一般性原则:优先用
min_samples和cluster_selection_epsilon解决问题;若仍不满足,停下来重新审视数据与特征,而不是盲目堆参数。
6. 典型问题与对应参数
| 现象 | 可能原因 | 可尝试的参数调整 |
|---|---|---|
| 簇被切得过碎(本应是一个群体,却分出很多小簇) | 密度结构内部有次级起伏;min_cluster_size 偏小 | 调大 cluster_selection_epsilon 合并;增大 min_cluster_size;考虑 allow_single_cluster=True |
| 几乎全部样本被判为噪声 | min_cluster_size / min_samples 过大;或数据整体均匀、无突出密集核 | 减小 min_cluster_size、min_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_data、gen_min_span_tree、condensed_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_size、min_samples、cluster_selection_method、allow_single_cluster、cluster_selection_epsilon、cluster_selection_epsilon_max、cluster_selection_persistence、max_cluster_size、alpha |
| 距离度量 | metric、p |
| 性能/算法 | algorithm、leaf_size、approx_min_span_tree、core_dist_n_jobs、memory |
| 输出/预测/可视化 | prediction_data、gen_min_span_tree、branch_detection_data、match_reference_implementation |
本文由作者按照 CC BY 4.0 进行授权
