Python dbscan-设置最大群集范围的限制

Python dbscan-设置最大群集范围的限制,python,algorithm,cluster-analysis,data-mining,dbscan,Python,Algorithm,Cluster Analysis,Data Mining,Dbscan,根据我对DBSCAN的理解,您可以指定一个ε,比如说100米,并且-因为DBSCAN在查找簇时考虑了密度可达性和非直接密度可达性-最终得到一个任意两点之间的最大距离>100米的簇。在更极端的可能性中,似乎可以将epsilon设置为100米,最终得到1公里的簇: 以获取可能发生这种情况的时间示例。(我非常愿意被告知我是一个十足的白痴,如果这就是这里发生的事情,我可以做到。) 是否有一种算法像DBSCAN一样基于密度,但考虑到簇中任意两点之间最大距离的某种阈值?DBSCAN确实没有对簇施加总大小约束

根据我对DBSCAN的理解,您可以指定一个ε,比如说100米,并且-因为DBSCAN在查找簇时考虑了密度可达性和直接密度可达性-最终得到一个任意两点之间的最大距离>100米的簇。在更极端的可能性中,似乎可以将epsilon设置为100米,最终得到1公里的簇: 以获取可能发生这种情况的时间示例。(我非常愿意被告知我是一个十足的白痴,如果这就是这里发生的事情,我可以做到。)


是否有一种算法像DBSCAN一样基于密度,但考虑到簇中任意两点之间最大距离的某种阈值?

DBSCAN确实没有对簇施加总大小约束

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

我相信,事实上,您甚至没有在寻找集群:集群是发现数据结构的任务。该结构可以是简单的(如k-means)或复杂的(如通过层次聚类和k-means发现的任意形状的聚类)

您可能正在寻找—将一个数据集缩减为一个较小的代表集—或者—为给定的数据集找到最佳覆盖—取而代之

然而,我也有这样的印象,你并不确定你需要什么以及为什么

DBSCAN的一个优点是,它具有密度连接组件形式的结构数学定义。这是一个强大且(除了一些罕见的边界情况)定义良好的数学概念,DBSCAN算法是发现此结构的最有效算法

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

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

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