DBSCAN:如何用一个巨大的集群对大型数据集进行集群



我正在尝试对1800万个数据点执行DBSCAN,到目前为止只有2D,但希望能达到6D。我一直找不到在这么多点上运行DBSCAN的方法。我和ELKI最接近的一次是100万,花了一个小时。我以前使用过Spark,但不幸的是它没有可用的DBSCAN。

因此,我的第一个问题是,是否有人可以推荐一种在这么多数据上运行DBSCAN的方法,可能是分布式的?

接下来,我的数据的性质是,85%的数据位于一个巨大的集群中(异常检测(。我唯一能想到的允许我处理更多数据的技术是用一个数据点替换这个巨大集群的一大块,这样它仍然可以到达所有邻居(删除的块比epsilon小(。

当你知道大多数数据都在一个以(0.0,0.0(为中心的集群中时,有人能提供任何提示吗?无论我做得对,还是有更好的方法来降低DBSCAN的复杂性?

  1. 您是否向ELKI添加了索引,并尝试了并行版本?除了git版本外,ELKI不会自动添加索引;即使这样,微调问题的索引也会有所帮助。

  2. DBSCAN是而不是异常检测的好方法-噪声与异常不同。我宁愿使用基于密度的异常检测。如果你知道自己只对前10%感兴趣,有些变体会更有效地跳过"clear inliers"。

  3. 如果你已经知道你的大部分数据都在一个巨大的集群中,为什么不直接建模那个大集群,并用较小的近似值删除/替换它呢。

  4. 子样本。使用整个数据通常几乎没有任何好处。即使(或特别是(如果你对"噪声"对象感兴趣,也有一种琐碎的策略,即将数据随机划分为32个子集,然后对这些子集中的每一个子集进行聚类,并将结果连接回来。这32个部分可以在单独的核心或计算机上并行处理;但由于潜在问题本质上是二次型的,因此加速将在32到32*32=1024之间。DBSCAN尤其适用于此:较大的数据通常意味着您还希望使用更大的minPts。但是,结果将与具有较小minPts的子样本没有太大区别。

但无论如何:在扩展到更大的数据之前,请确保您的方法解决了您的问题,并且是解决此问题的最聪明的方法。异常检测的聚类就像试图用锤子把螺丝钉砸向墙上。这是有效的,但也许用钉子而不是螺丝钉是更好的方法。

即使你有"大"数据,并且以做"大数据"为荣,也要从子样本开始。除非你能证明结果质量随着数据集大小的增加而增加,否则不要麻烦扩展到大数据,除非你能证实,否则开销太高。

相关内容

  • 没有找到相关文章

最新更新