为什么 OPTICS 使用核心距离作为可达距离的最小值?

数据挖掘 聚类
2021-09-29 13:44:49

OPTICS聚类算法定义

core-distε,MinPts(p)={UNDEFINEDif |Nε(p)|<MinPtsMinPts-th smallest distance to Nε(p)otherwise

reachability-distε,MinPts(o,p)={UNDEFINEDif |Nε(p)|<MinPtsmax(core-distε,MinPts(p),dist(p,o))otherwise

为什么不简单

reachability-distε,MinPts(o,p)={UNDEFINEDif |Nε(p)|<MinPtsdist(p,o)otherwise

4个回答

有几种看待这个的方法。为了使这更容易,我将使用 HDBSCAN* 来描述事物,它是 OPTICS 的继任者。HDBSCAN* 本质上与 OPTICS 相同,只是去掉了ε参数(或者,如果你喜欢,修复ε=)。HDBSCAN* 也有不同的聚类提取方法,但这在这里并不过分相关。因此,在 HDBSCAN* 下,我们定义

core-distMinPts(p)=Distance the the MinPts nearest neighbor of p

mutual-reachability-distMinPts(o,p)=max(core-distMinPts(p),core-distMinPts(o),dist(p,o))

与 OPTICS 非常相似,但现在我们不需要任何未定义的值(我们还包括o 以确保相互可达性是一个指标)。

可以将 OPTICS 和 HDBSCAN* 视为 DBSCAN 的扩展。DBSCAN 有两个参数 MinPts 和ϵ (请注意,这是与 OPTICS 不同的 epsilon 用法——如果我们关注没有此类参数的 HDBSCAN*,我们可以避免混淆:epsilon 将仅指 DBSCAN 中使用的参数)。

HDBSCAN* 为一系列可能的聚类生成完整的层次结构 ϵ 值,因此对于任何固定 ϵ 您希望层次结构中该级别的集群成为 DBSCAN 将为此提供的集群的值 ϵ 值(OPTICS 的工作方式类似,但只是限制了 ϵ可能采取)。要成为 DBSCAN 中的集群,您必须是核心点(我现在将忽略边界点);也就是说,该点必须在半径球内至少有 MinPts 其他点ϵ本身。如果一个点不是核心点,那就是噪音。HDBSCAN*(和 OPTICS*)可达距离通过确保点在 DBSCAN 之前不加入集群来捕捉这种区别ϵ值使得该点位于集群中其他点的相关距离内,并且该点是该 DBSCAN 的核心点ϵ价值。您建议的替代可达距离涵盖了第一部分,但不包括第二部分:只要噪声点足够接近,它们就会包含在集群中——并且通过传递链接,这可能导致集群通过噪声点过早地合并在一起。

另一种看待这个问题的方法是与其他算法进行比较,如鲁棒单链接(它也产生一个集群层次结构)。鲁棒单链接旨在通过使其对噪声更鲁棒来改进单链接聚类。在每个距离尺度上单联动r 如果它们在范围内,则通过将点与边缘连接来形成图形 r 彼此,然后在级别上进行聚类 r层次结构只是该图的连接组件。问题是单一链接很容易受到噪音的影响——错误位置的一两个点可以将集群连接在一起,而这些集群可能不应该这样做。健壮的单连杆试图通过要求一个点至少有来解决这个问题k 内的邻居 αr在向其添加任何边缘之前对其进行处理。这将稀疏点打折,直到更大的距离尺度,并使该方法对噪声更加鲁棒。可以证明,这种方法提供了与生成数据的 PDF 的水平集树的收敛性——即它很好地解决了噪声问题!如果我们修复α=1k=MinPts然后我们恢复 HDBSCAN*;如果我们修复rε然后我们基本上得到了光学。我们再次使用核心距离来降低噪声,并使聚类更加稳健。

如果你使用 dist 代替 core-dist,然后你会得到单链接聚类(分层凝聚聚类),这可能是最古老的聚类方法。如果你设置也会发生同样的情况minPts=1.

从本质上讲,您在算法中几乎失去了任何“密度”的概念。

使用 OPTICS 时,需要一个可达性图作为输出,从中可以读取集群的数量,具体取决于 ε. 如果dist 被用来代替 reachability-dist,那么某些点在可达性图中的距离会更短。这可能会导致错误的结论,即对于一些小的集群会有更多的集群ε.

Leland McInnes 回答的关键是:

您建议的替代可达距离(仅使用 dist)涵盖第一部分,但不包括第二部分:只要噪声点足够接近,它们就会包含在集群中 - 通过传递链接,这可能导致集群过早合并在一起通过噪声点。

考虑两个由一组点连接的密集集群,这些点相互靠近(一个到下一个),但不是核心点(不密集)。使用 dist 而不是 core-dist 会导致这些点被添加到同一个集群中(因为它们都具有相同的距离)。相反,使用核心距离,对于“链中间”的点来说,核心距离更高,它们将被放在输出的 OrderedList 中更远的位置,从而导致不同的集群。

一个会因 dist 而失败的集群示例