try ai
科普
编辑
分享
反馈
  • HDBSCAN

HDBSCAN

SciencePedia玻尔百科
核心要点
  • HDBSCAN 擅长在密度可变的数据中寻找簇,而这正是 DBSCAN 等传统算法通常难以应对的挑战。
  • 它利用核心距离和相互可达距离来变换数据空间,从而创建一个尊重密度的景观。
  • 该算法构建了一个包含所有潜在簇的完整层次结构,然后根据稳定性度量智能地选择最持久的簇。
  • 其处理可变密度的能力使其成为医学患者表型分析和分子物理学等复杂领域中的强大工具。

引言

在数据科学领域,聚类——即在数据中寻找自然分组——是一项基础性任务。然而,许多经典算法都基于一个有缺陷的假设:所有有意义的簇在密度上大致相似。在复杂、真实的现实世界数据集中,情况 rarely 如此。从天文观测到医疗记录,稠密、紧凑的群体常常与稀疏、 sprawling 的群体共存。像 DBSCAN 这样的算法虽然强大,但它迫使用户选择一个单一的、全局性的密度阈值,这种妥协可能会掩盖数据的真实结构。这一差距催生了对一种更灵活、更由数据驱动的方法的需求。

本文探讨了 HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise,即层次化基于密度的带噪声应用空间聚类),这是一种巧妙解决可变密度聚类问题的先进算法。它摒弃了对全局密度参数的需求,转而让数据在多个尺度上揭示其自身的内在结构。我们将分两部分来理解这一强大技术。首先,在“原理与机制”一章中,我们将剖析该算法的核心概念,从其对距离的巧妙重新定义到其对聚类稳定性的创新应用,揭示驱动其发现的数学引擎。随后,“应用与跨学科联系”一章将展示 HDBSCAN 的实际应用,演示它如何应对医学中患者表型分析这一艰巨挑战,以及其基本原理如何与分子物理学等遥远领域的概念产生共鸣。

原理与机制

想象你是一位天文学家,正在凝视一张新的夜空照片。你看到了像昴星团那样紧凑而明亮的星团,也看到了像猎户座鬼魅面纱般的广阔、弥散的星云。你的任务是为每一个独特的天体画上圈。你会怎么做?如果使用小圈,你可以圈出紧凑星团中的每一颗星星,但 sprawling 的星云就会被错过,其微弱的气体将与黑暗的背景无法区分。如果使用一个巨大的圈,你可以包围整个星雲,但你将不可避免地把紧凑的星团及其所有邻居归为一个巨大而无意义的 blob。

这就是聚类的经典困境,也正是困扰许多传统算法的问题。它们要求我们这些观察者选择一个单一的、全局的尺度——一个单一的圆圈大小,或者用著名的 ​​DBSCAN​​ 算法的语言来说,一个单一的距离阈值 ε\varepsilonε。但自然界 rarely 如此统一。从在医疗数据中发现患者表型到在社交网络中识别社群,现实世界的数据几乎总是稠密、紧凑的群体与稀疏、延展的群体的混合体。单一的 ε\varepsilonε 是一种暴政;它将一种“邻近”的定义强加于一个以多样性为荣的宇宙。要真正理解我们数据的结构,我们需要一种更民主的方法。我们需要一种能同时看到昴星团和猎户座星云的算法。

一种民主化的密度观

​​HDBSCAN​​(Hierarchical DBSCAN)所做的哲学飞跃是放弃单一、全局密度阈值的想法。相反,它让数据本身来定义“稠密”的含义,并允许这个定义随处变化。这段旅程始于一个简单而优雅的概念:​​核心距离 (core distance)​​。

想象每个数据点都是居住在城市中的一个人。要想觉得自己身处一个“稠密”的社区,你可能希望在一定的步行距离内至少有 kkk 个邻居。HDBSCAN 反其道而行之。对于每个点,它会问:“我要走多远才能找到我的第 kkk 个最近的邻居?”这个距离就是该点的​​核心距离​​,记作 dcore,k(x)d_{\mathrm{core},k}(\boldsymbol{x})dcore,k​(x)。

如果一个点位于繁华的市中心(一个高密度区域),它的核心距离会非常小;它的第 kkk 个邻居就在街对面。如果一个点位于宁静的郊区(一个低密度区域),它的核心距离会大得多;它的第 kkk 个邻居可能在几个街区之外。参数 kkk(通常称为 min_samples)是我们唯一需要调整的“旋鈕”,它有一个直观的含义:它设定了我们认为构成一个局部“社群”的最小点数。通过为每个点计算这个核心距离,我们有效地为每个点赋予了一个个性化的、局部的对其周围密度的度量。

相互可达距离:一个被密度重塑的地貌

有了这种新的、局部化的尺度感,我们现在可以重新思考点与点之间距离的概念。两点之间的直线欧几里得距离就像两个城镇之间的“直线”距离。但如果其中一个城镇位于广袤无垠、无法逾越的沙漠中央呢?简单的直线距离并不能捕捉到它们之间旅行的真实困难。你首先必须忍受漫长的旅程才能走出沙漠。

HDBSCAN 用一个优美的概念——​​相互可达距离 (mutual reachability distance)​​——将这种直觉形式化。从点 a\boldsymbol{a}a 到点 b\boldsymbol{b}b 的“困难程度”不再仅仅是它们的直接距离 d(a,b)d(\boldsymbol{a},\boldsymbol{b})d(a,b)。它现在被定义为以下三个值中的最大值:

  1. 点 a\boldsymbol{a}a 的核心距离(“逃离”其自身局部密度的成本)。
  2. 点 b\boldsymbol{b}b 的核心距离(“逃离”其局部密度的成本)。
  3. 原始欧几里得距离 d(a,b)d(\boldsymbol{a},\boldsymbol{b})d(a,b)。

在数学上,这表示为:

dmr,k(a,b)=max⁡{dcore,k(a),dcore,k(b),d(a,b)}d_{\mathrm{mr},k}(\boldsymbol{a},\boldsymbol{b}) = \max\{d_{\mathrm{core},k}(\boldsymbol{a}), d_{\mathrm{core},k}(\boldsymbol{b}), d(\boldsymbol{a},\boldsymbol{b})\}dmr,k​(a,b)=max{dcore,k​(a),dcore,k​(b),d(a,b)}

这个新的距离度量意义深远。它具有“拉伸”空间的效果。在核心距离较大的稀疏区域,涉及这些点的所有距离都被向外推,使它们更难与任何东西连接。在核心距离较小的稠密区域,相互可达距离实际上退化为原始的欧几里得距离。通过执行这种转换,我们创建了一幅新的、扭曲的数据地图——一个被密度重塑的地貌,其中稠密的簇成为紧密相连的岛屿,被广阔、难以逾越的低密度海洋所分隔。

构建层次结构:一个簇的宇宙

既然我们有了这个新的、尊重密度的地貌,我们如何找到簇呢?我们可以将数据点视为这张新地图上的岛屿。我们希望建造桥梁将它们全部连接成一个大陆,但我们希望尽可能高效地做到这一点,使用最短的桥梁(最小的相互可达距离)。这是图论中的一个经典问题,解决方案是​​最小生成树 (Minimum Spanning Tree, MST)​​。

MST 是一个图,它使用总权重最小的边集连接所有数据点(其中权重是相互可达距离)。这棵树是我们数据密度结构的骨架。奇迹般地,这棵树本身包含了一个完整的层次结构,囊括了所有可能的密度水平下的所有可能簇。

想象 MST 已经完全构建好了。现在,我们开始将其拆解。我们从一个非常高的密度阈值开始,这对应于一个非常小的距离。在这个水平上,我们树中的所有边都是“断开的”,每个点都是它自己的小岛。当我们逐渐放宽密度要求(相当于增加允许的距离阈值,或者用 HDBSCAN 的术语来说,减小参数 λ=1/dmr\lambda = 1/d_{\mathrm{mr}}λ=1/dmr​)时,我们开始“重建”桥梁,从最短的开始。点连接形成小组。这些小组连接形成更大的簇。这个基于 MST 排序边权连接组件的过程,正是单链接层次聚类所做的。MST 为我们提供了一种有效的方式来观察簇的整个嵌套结构,从最微小、最稠密的核心到最大、最 sprawling 的超級簇。这就是密度聚类树。

寻找真正的簇:稳定性原则

层次结构为我们提供了一个充满可能簇的宇宙,但哪些是“真实”的?传统的树状图只显示合并高度,这只是距离值;它们并不告诉我们一个簇是否有意义,还是仅仅是链接过程中的偶然产物。HDBSCAN 引入了一个更物理、更直观的标准:​​稳定性 (stability)​​。

把层次结构中的簇想象成云中的形状。当你观察时,一些蒸汽的细丝瞬间形成又消散。它们是不稳定的。其他巨大的雷雨云则持续数小时,顶着风保持其形状。它们是稳定的。HDBSCAN 在数据中寻找的就是这些稳定的雷雨云。

当一个簇从一个更大的父组件中分离出来时,它就在层次结构中诞生了。当它自身分裂成更小的部分时(或者从另一个角度看,被合并到一个更大的结构中),它就“死亡”了。如果一个簇能持续很长时间——也就是说,跨越一个很大的密度范围(一个很大的 λ\lambdaλ 范围),那么它就被认为是​​稳定的​​。一个簇 CCC 的稳定性被正式计算为其每个点的持久性之和。对于簇中的每个点 p\boldsymbol{p}p,我们测量它属于 CCC 的 λ\lambdaλ 值范围,从簇诞生那一刻 (λbirth\lambda_{\text{birth}}λbirth​) 到该点脱离簇的那一刻 (λout\lambda_{\text{out}}λout​)。

S(C)=∑p∈C(λout(p)−λbirth(C))S(C) = \sum_{\boldsymbol{p} \in C} (\lambda_{\text{out}}(\boldsymbol{p}) - \lambda_{\text{birth}}(C))S(C)=p∈C∑​(λout​(p)−λbirth​(C))

这个值本质上是簇的总“质量-寿命”乘积。稠密、连贯的簇将在高密度水平上诞生,并存活很长时间才分裂,从而获得高稳定性得分。相比之下,那些仅在特定密度水平上偶然连接起来的稀疏点链,其寿命会非常短,因此稳定性非常低。

剪枝的艺术:从层次结构到最终答案

我们来到了最后、美妙的一步。我们有了一个簇的层次结构,每个簇都有一个稳定性得分。现在,算法只需遍历这棵树,并做出一系列局部的、民主的决策。

当一个簇分裂成子簇时,算法会问:“父簇是否比其子簇的稳定性之和更稳定?”

  • 如果父簇更稳定,这意味着这次分裂不显著。子簇被视为仅仅是波动,而父簇被选中。
  • 如果子簇的稳定性之和更大,这意味着这次分裂是有意义的,创造了更稳健的结构。父簇被丢弃,取而代之的是其更稳定的后代。

通过在树上递归地应用这个简单的规则,HDBSCAN 自动选择了一组不重叠的簇,它们代表了数据在所有尺度上最稳定、最持久的结构。作为最后的实际操作,一个 min_cluster_size 参数告诉算法简单地忽略任何从未包含至少那么多点的“簇”,从而修剪掉无意义的尘埃。

尺度的交响曲

HDBSCAN 的历程证明了从第一性原理出发构建的力量。我们从可变密度这个简单而令人沮丧的问题开始。通过使距离成为一个局部的、民主的概念(核心距离),我们重塑了数据的几何形状(相互可达距离)。这使我们能够构建一个单一的、包罗万象的簇层次结构(MST)。最后,凭借一个物理的持久性概念(稳定性),我们可以智能地从这个层次结构中选择最有意义的结构。

整个过程从未选择过任何单一、专制的 ε\varepsilonε。相反,算法倾听数据,让它在一曲尺度的交响乐中揭示自己的结构。这就是为什么 HDBSCAN 在生物信息学等领域如此强大,它能同时识别单个癌症活检样本中的“罕见、紧凑的免疫微环境”和“更广泛、弥散的恶性亚群”——这项任务要求在同一幅令人叹为观止的视图中既能看到恒星,又能看到星云。

应用与跨学科联系

在上一章中,我们深入探讨了 HDBSCAN 精妙的内部机制。我们看到它如何超越其前身 DBSCAN 僵化的全局密度假设,构建出一个丰富的簇层次结构,并最终选择那些在密度连续体上最“稳定”的簇。这是一个优美的数学推理过程。但是,一个算法,无论多么优雅,其真正的意义在于应用。它是一个工具,而任何工具的价值在于它让我们能够建造什么——或者,在我们的案例中,在于它让我们能够发现什么。

现在,我们将踏上一段旅程,去看看这个工具的实际应用。我们将离开抽象点云的纯净世界, venturing into the messy, complex, and fascinating landscapes of real-world data. 我們將看到密度、層次和穩定性等原則如何成為探索的有力鏡頭,成為檢視我們世界隱藏結構的實體顯微鏡。我們這次探險的主要嚮導將是醫學領域,這裡的風險很高,數據也極其複雜。在這裡,「聚類」這個抽象任务转变为具体而至关重要的使命:患者表型分析 (patient phenotyping)——从患者的健康记录中发现新的、有意义的患者亚群,这项任务与仅仅预测风险或应用旧规则截然不同。

第一道难关:学会距离的语言

在我们要求算法寻找“稠密”区域之前,我们必须首先回答一个看似简单的问题:两个病人“接近”意味着什么?一个病人的电子健康记录(EHR)并不是空间中的一个简单点。它是一个 sprawling、异构的数据集合:诊断史、用药清单、单位各异的实验室结果流、在不固定时间间隔测量的生命体征,以及数页的非结构化临床笔记。对于一个只懂数字和距离语言的聚类算法来说,这是一种外语。

因此,我们的首要任务是成为翻译家——创造一个统一的表示,使得距离具有临床意义。想象一下,试图计算一个患有糖尿病和高血压的病人与另一个患有哮喘和特定基因标记的病人之间的距离。你如何量化这个距离?一个绝妙的方法是为数据类型构建一个“罗塞塔石碑”。例如,Gower 相异性 (Gower dissimilarity) 就是一个聪明的配方。它为每个特征在一个从 000 到 111 的共同尺度上计算一个部分相异性。对于一个连续的实验室值,距离是其归一化后的差值。对于一个分类的诊断,如果它们匹配,距离就是 000,如果不匹配就是 111。关键在于,它能处理不对称的特征——例如,共同缺失一种罕见疾病是无信息的,所以这种比较就被简单地忽略了。通过仅对给定一对病人可比较的特征计算这些部分分数的平均值,我们即使面对混合数据类型和缺失值,也能构建一个稳健、有意义的病人间距离矩阵。

这种翻译可能成为一项巨大的工程壮举。一个现代的病人向量不仅仅是几个特征;它是由健康记录的每一条线索编织而成的高维织锦。我们可能会定义时间窗口——近期、中期、历史——并总结每个窗口内的数据。稀疏的诊断和药物代码可以用信息检索中借鉴的技术来表示,比如 TF-IDF,它巧妙地提高了罕见、信息量大的事件的权重。实验室值和生命体征流则用稳健的统计量来总结。甚至临床笔记中丰富的叙述也可以使用像 BERT 这样的强大语言模型提炼成密集的数值向量。最终的结果是为每个病人生成一个单一、巨大的向量,经过精心构建,成为他们临床历程的忠实、可比较的摘要。这种特征工程不仅仅是主要工作的序曲;它本身就是一项关键的科学努力。垃圾进,垃圾出。像 HDBSCAN 这样复杂的算法,如果没有一个经过深思熟虑构建的空间来操作,也是无能为力的。

高级工艺:融入人类知识

有时,我们的数据具有通过数十年科学工作而为我们所知的结构。为什么不利用它呢?思考一下国际疾病分类 (ICD),这是诊断的标准本体。它不是一个扁平的列表;它是一棵树。“非霍奇金淋巴瘤”是“淋巴组织恶性肿瘤”的一种,而后者又是“癌症”的一种。直观上,两种密切相关的癌症之间的距离应该小于一种癌症和一种病毒感染之间的距离。

我们可以将这种人类知识直接融入我们的几何学中。把 ICD 本体想象成一个图。我们可以将两个诊断代码之间的距离定义为它们在这个图上的最短路径。但我们可以更聪明。我们可以给边赋予权重,使得树的深层、特定叶子节点处的路径比靠近主干的路径“更短”。有了在代码上定义的这样一种基础距离,我们就可以使用数学中的高级工具,如最优传输 (optimal transport) 或核方法,来计算两个病人之间的距离,这两个病人被表示为这些代码的分布。一个有十个诊断的病人现在是本体图上的一个点“云”,而两个病人之间的距离是移动一个云以匹配另一个所需的“功”。这种数据驱动方法与专家知识结构的卓越融合,产生了一个远比之前更细致、更具临床相关性的病人相似性概念 [@problemid:5180837]。

核心挑战:在干草堆里找由干草组成的针

定义了一个有意义的空间后,我们终于可以开始寻找簇了。而在这里,我们遇到了 HDBSCAN 正是为了解决的问题。考虑一种常见的临床综合征——一种影响许多病人的广泛、弥散的病症。它在我们的特征空间中的表示是一个大的、低密度的云。现在,想象一下,在这个综合征内部隐藏着几种罕见的、独特的亚型,每一种都有独特的 underlying pathology。这些亚型表现为小的、紧密的、高密度的点簇,位于那个更大的、稀疏的云内部。我们不是在干草堆里找针,而是在一个由干草组成的干草堆里找针——一个可变密度的地貌。

这就是简单算法会失败的地方。像 kkk-means 这样寻找相似方差的球形簇的算法会 hopelessly lost。像 DBSCAN 这样的经典密度算法面临一个可怕的困境。如果我们将它的半径参数 ε\varepsilonε 设置得足够小以检测那些紧密的、罕见的亚型,我们将会把大多数常见综合征的病人分类为“噪声”。如果我们将 ε\varepsilonε 设置得足够大以捕捉那个弥散的常见综合征,那些亚型的更高密度将导致它们被吞噬,它们的边界在被并入更大群体时被抹去。

HDBSCAN 以其层次化的视角,优雅地解决了这个悖论。通过探索所有可能的密度水平,它在每个尺度上都能找到稳定的簇。那些小的、稠密的亚型被识别为在高密度阈值(小 ε\varepsilonε)下稳定的簇。那个大的、弥散的综合征被识别为在低密度阈值(大 ε\varepsilonε)下稳定的簇。它不强加单一的“稠密”定义,而是让数据揭示其自身的内在尺度。它既找到了针,也找到了干草堆,并保留了每一个的身份。

一个宇宙级的联系:从病人到蛋白质

这个原则——在不同密度中识别结构——并不局限于医学领域。它是自然界中出现的一种基本模式。让我们从医院转向分子物理学的世界。科学家使用分子动力学模拟来观察蛋白质的折叠和功能。这些模拟产生大量的原子坐标系综,采样了蛋白质可能的形状或“构象”。

蛋白质的能量景观很像我们的病人数据。这个景观中的深谷对应于蛋白质大部分时间所处的稳定、低能量构象。这些是密集采样的区域。这些山谷之间的高能山口是过渡态,蛋白质很少且迅速地穿越它们。这些是稀疏采样的桥梁。生物物理学家的任务是识别稳定状态并理解它们之间的转变。这又一次是一个可变密度聚类问题。

在这里,联系变得深刻。HDBSCAN 对“簇持久性”——即当密度阈值放宽时一个簇能存活多久——的度量,有一个直接的物理类比。一个高度持久的簇对应于一个被一个大的、稀疏 populated 区域包围的状态。用物理术语来说,这意味着它坐落在一个深的自由能盆地中,被一个高能垒与其他状态隔开。高持久性意味着高稳定性和构象态的长寿命。算法的抽象数学稳定性反映了分子的具体物理稳定性。这是跨越不同科学领域概念统一性的一个惊人例子。

科学过程:从发现到验证

然而,找到簇并不是故事的结局。它是一条新探究路线的开始。我们找到了分组;现在我们必须问:“它们是什么?它们是真的吗?它们有用吗?”这是验证和解释的关键、严谨的工作。

一个常见的陷阱等待着粗心的人。许多实践者首先使用像 t-SNE 或 UMAP 这样的可视化算法将他们的高维数据投射到一个漂亮的二维图上,然后在图上运行聚类算法。这是一个严重的错误。这些可视化技术通过扭曲空间来工作,将邻居拉近,将非邻居推远,常常在原始数据中不存在的地方制造出分离良好、稠密的簇的错觉。对嵌入进行聚类可能导致大量无意义的“微簇”的出现,这是可视化扭曲密度的产物。基本原则是:​​对高维数据进行聚类,然后使用可视化来查看结果标签​​。聚类必须在真实空间中进行,而不是在美丽的幻象中。

一旦我们有了有效的簇,解释工作就开始了。我们必须描述它们。对于每个簇,我们可以进行系统的富集分析。我们遍历每一个特征——每一个诊断、药物或实验室异常——然后问:“这个特征在这个簇内的出现频率是否显著高于簇外?”通过使用严格的统计检验,并纠正我们同时进行数千个假设检验的事实(例如,通过控制错误发现率),我们可以为每个簇生成一个画像。我们可能会发现,簇 3 的定义是肾衰竭诊断、特定的透析程序和异常肌酐水平的富集。我们为一个抽象的点集合赋予了临床的面孔 [@problemid:5180849]。

最后的,也许也是最重要的测试,是表面效度。这些数据驱动的表型对人类专家来说有意义吗?在这里,我们进入“临床医生在环”过程。我们准备一份病人病历样本,严格去除任何关于聚类的信息。这些盲化的摘要交给两位独立的医生,他们被要求对病人进行分类。他们的独立判断的一致程度(用 Cohen's κ\kappaκ 等统计数据衡量)告诉我们我们的表型有多“真实”。他们的专家指定标签与我们算法标签的匹配程度告诉我们我们是否发现了具有临床意义的东西。这一步弥合了数学模式与床边现实之间的鸿沟,确保我们的发现不仅在统计上显著,而且在临床上也是可操作的。

这整个工作流程——从细致的数据准备和算法选择,到严格的结果无关调优,再到在独立数据集上的外部验证和专家解释——构成了该领域可重复科学的基石。这是一个严谨的过程,旨在防止偏见和一厢情愿,确保我们发现的是世界的真实特征,而不是我们自己方法的产物。

HDBSCAN 及其相关方法不仅仅是聚类算法。它们是一台强大的显微镜,让我们能够窥视复杂数据的错综复杂的结构。通过适应数据的局部地貌,它们揭示了所有尺度上的模式,从最精细的细节到最广阔的轮廓。在从医学到分子物理学的领域里,这种能力将抽象数据转化为 tangible insights,将特征空间的高维几何学转变为新科学发现的基础。