dbscan - 最大簇跨度的设置限制

时间:2013-08-31 10:29:21

标签: python algorithm cluster-analysis data-mining dbscan

根据我对DBSCAN的理解,您可以指定100米的epsilon,因为DBSCAN考虑了密度可达性 <当找到簇时,em>直接密度可达性 - 最终得到一个簇,其中任意两点之间的最大距离> 100米在更极端的可能性中,似乎可以设置100米的epsilon并最终得到1公里的簇: see [2][6] in this array of images from scikit learn以获取何时可能发生的示例。 (我非常愿意被告知我是一个完全白痴并且误解了DBSCAN,如果这就是这里发生的事情。)

是否存在基于密度的算法,如DBSCAN,但是考虑到群集中任意两点之间的最大距离的某种阈值?

1 个答案:

答案 0 :(得分:14)

DBSCAN确实没有对群集施加总大小限制。

最好将epsilon值解释为分隔两个簇的间隙的大小(最多可能包含minpts-1个对象)。

我相信,你实际上甚至都没有寻找聚类:聚类是发现数据结构的任务。结构可以更简单(例如k-means)或复杂(例如通过分层聚类和k-means发现的任意形状的聚类)。

您可能正在寻找vector quantization - 将数据集缩减为较小的代表集 - 或set cover - 找到给定集合的最佳封面 - 而不是。

然而,我的印象是你不确定你需要什么以及为什么。

DBSCAN的优势在于它具有密度连接组件形式的结构的数学定义。这是一个强大的(除了一些罕见的边界情况)明确定义的数学概念,而DBSCAN算法是发现这种结构的最佳效率算法。

直接密度可达性但是,没有定义有用的(分区)结构。只是不会将数据分区为不相交的分区。

如果您不需要这种强大的结构(即您不像“结构发现”那样进行聚类,但是您只想像在矢量量化中一样压缩数据),则可以给出“冠层预聚类”一试。它可以看作是为聚类设计的预处理步骤。本质上,它就像DBSCAN,除了它使用两个epsilon值,并且不保证结构在任何方面都是最优的,但在很大程度上取决于数据的排序。如果你然后适当地预处理它,它仍然是有用的。除非您处于分布式设置中,否则冠层预聚类至少与完整的DBSCAN运行一样昂贵。由于需求松散(特别是“群集”可能重叠,并且预期对象属于多个“群集”),因此更容易并行化。

哦,您可能也只是在寻找完整链接层次聚类。如果将树形图切割到所需高度,则生成的簇应在所有两个对象之间具有所需的最大距离。唯一的问题是层次聚类通常是O(n^3),即它不能扩展到大型数据集。 DBSCAN在O(n log n)中以良好的实现方式运行(具有索引支持)。