python – dbscan – 最大集群跨度的设置限制

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

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

解决方法:

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

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

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

您可能正在寻找vector quantization – 将数据集减少到较小的代表集 – 或者set cover – 找到给定集合的最佳覆盖 – 而不是.

但是,我的印象是你不确定你需要什么以及为什么.

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

然而,直接密度可达性不定义有用的(分区)结构.它只是不将数据分区为不相交的分区.

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

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

上一篇:python-根据空间接近度对几何点进行分组


下一篇:python – 用于聚类地理位置数据的DBSCAN