HDBSCAN和基于密度的群集的简单介绍

2020-07-12 23:34:04

“具有噪声的应用程序的基于层次密度的空间集群”(多么冗长的…)。HDBSCAN是我的首选集群算法之一。我觉得这是每个人都应该包括在他们的数据科学工具箱中的一种方法。

在我之前的博客文章中,我已经写过这方面的内容,在那里我试图尽可能深入地解释HDBSCAN。这一次,我采取了相反的方法:我将尽可能简洁地解释HDBSCAN和基于密度的集群的主要思想。

我认为(也希望)这本关于HDBSCAN的入门读物对数据科学的初学者和新手会更友好。

即使提供了正确的簇数,K-Means显然也会给出不好的结果。我们上面确定的一些群集被分成两个或多个群集。另一方面,HDBSCAN为我们提供了预期的集群。

与K-均值不同,基于密度的方法即使在数据不干净且群集形状怪异的情况下也能很好地工作。

HDBSCAN是如何做到这一点的?在较高级别上,我们可以将基于密度的群集过程简化为以下步骤:

我们需要一些方法来估计某些点附近的密度。一种常见的方法是使用“核心距离”。这是一个点到它的第K个最近邻居的距离。

密集区域中的点将具有较小的核心距离,而较稀疏区域中的点将具有较大的核心距离。核心距离是使这些方法“基于密度”的原因。

在给定核心距离的情况下,我们可以通过求密度的倒数来推导出密度的估计值。通过这些估计,我们可以了解密度景观是什么样子。

如果我们绘制这些密度图,我们可以看到这种密度景观的山脉与不同的数据簇相对应。

选择群集的一种方法是选择全局阈值。通过获得密度高于阈值的点,并将这些点分组在一起,我们就得到了我们的聚类。

想象一下海洋上的岛屿,那里的海平面是门槛,不同的岛屿是你的集群。海平面以下的陆地是嘈杂的。随着海平面下降,新的岛屿出现,一些岛屿合并形成更大的岛屿。

这种方法接近于DBSCAN所做的事情。虽然很简单,但这需要我们找到合适的阈值来获得有意义的聚类。

如果将阈值设置得太高,过多的点会被认为是噪波,并且会出现分组不足的情况。如果将其设置得太低,则可能会过度分组这些点,并且所有内容都只是一个簇。

使用全局阈值方法,当簇具有不同的密度时,您可能会遇到困难。如果我们在下面的示例中只使用一个阈值,我们要么对蓝色和黄色群集进行过度分组,要么无法包括整个红色群集。

您可能会认为密度中的每个峰值都应该是一个簇,然而,这并不总是最佳的。

请看下图。在左边,应该有3个簇,在右边,应该有2个簇。

HDBSCAN首先构建一个层次结构,以找出哪些峰值最终会合并在一起,并以什么顺序合并,然后它会问每个集群,是保留这个集群还是将其拆分成它的子集群更好?在上图中,我们应该选择蓝色和黄色区域还是只选择绿色区域?

考虑到密度景观,你可以认为每座山都是一簇。我们必须决定两座山峰是否是同一座山的一部分。是有两座山,还是只有一座山有两个山峰?

要做出选择,我们要看哪一个更“坚持”。我们看到的山峰是更集中还是更分散?群集稳定性(持久性)由层次图中不同颜色区域的面积表示。我们用星团稳定性来回答我们的山脉问题。

当两个山峰实际上是两座山时,两个山峰的体积之和大于它们底部的体积。当山峰只是一座山的特征时,底部的体积就会大于山峰体积的总和。

使用此启发式方法,HDBSCAN能够决定是否将集群细分为其子集群。通过这样做,它会自动选择要提取的群集。

我们根据核心距离估计密度,并形成密度景观(是什么使这些以密度为基础)。

我们可以使用全球阈值将海平面设置为并识别岛屿(DBSCAN)

我们可以试试看,这是几座山还是一座山多峰?(HDBSCAN)。

我希望这能给您提供DBSCAN/HDBSCAN如何工作的依据,以及是什么使这些方法“基于密度”。光学或DEBACL等其他方法使用类似的概念,但它们选择区域的方式不同。

如果您想更多地了解HDBSCAN的统计动机、如何将点组合在一起的实现细节,或者HDBSCAN如何构建层次结构,您可以查看博客帖子,我将在那里进行更详细的介绍。

技术说明:此处绘制的估计密度不只是1/core_Distance。我不得不对数据进行一些转换,使其在视觉上更具吸引力。