根据我对DBSCAN的了解,您可以指定100米的epsilon,并且-因为DBSCAN 在查找群集时考虑了 密度可及性 而 不是 直接密度可及性 -最终以最大距离的群集结束两点之间的距离> 100米。更有可能的是,您可以将epsilon设置为100米,最后得到1公里的簇: 参见scikit的此图像数组中的[2] [6],以获取有关何时可能发生的示例。(我很乐意被告知我是个白痴,如果这是正在发生的事情,我会误解DBSCAN。)
是否有像DBSCAN这样的基于密度的算法,但考虑了某种阈值来确定群集中任意两点之间的最大距离?
实际上,DBSCAN不会对群集施加总大小限制。
最好将epsilon值解释为 分隔两个簇 (最多可能包含minpts-1个对象) 的间隙 的 大小 。
我相信,您实际上根本没有在寻找集群:集群是 发现数据结构 的任务。结构可以更简单(例如k均值)或复杂(例如通过层次聚类和k均值发现的任意形状的簇)。
您可能正在寻找矢量量化 -将数据集缩小为较小的代表集 -或集覆盖 -寻找给定集的最佳覆盖-而不是。
但是,我也有一种印象,就是您不确定自己需要什么以及为什么。
DBSCAN的优势在于,它以密度连接组件的形式对 结构 进行了 数学定义 。这是一个强大且明确的数学概念(除了一些罕见的边界情况),DBSCAN算法是发现这种结构的最佳高效算法。
__但是, 直接 密度可及性并未定义有用的(分区)结构。它只是 不会将数据 划分为不相交的分区。
如果您不需要这种强大的结构(即,您不像“结构发现”中那样进行聚类,而只是想像矢量量化中那样压缩数据),则可以尝试“机盖预聚类”。可以将其视为为群集设计的预处理步骤。从本质上讲,它类似于DBSCAN,不同之处在于它使用两个epsilon值,并且不能保证该结构以任何方式均是最佳的,但它在很大程度上取决于数据的顺序。如果您随后对其进行适当的预处理,它仍然会很有用。除非您处于分布式环境,否则机盖预群集至少要比完整的DBSCAN运行昂贵。由于宽松的要求(尤其是“集群”可能会重叠,并且对象应属于多个“集群”),
哦,您可能还只是在寻找 完整链接的层次集群 。如果将树状图切成所需的高度,则生成的群集在所有两个对象之间都应具有所需的最大距离。唯一的问题是层次聚类通常是O(n^3),即它不能扩展到大型数据集。DBSCAN O(n log n)在良好的实现中运行(具有索引支持)。
O(n^3)
O(n log n)