5

我遇到的问题是矩形中有矩形。想想一张地图,除了以下特征,关键点是:具有相似密度的矩形通常与其他矩形共享相似的尺寸和在 x 轴上的相似位置,但有时这些矩形之间的距离可能很大但通常很小。如果 x 轴上的位置或尺寸明显偏离,它们就不会相似。

  • 矩形不相交,较小的矩形完全位于较大的矩形内。

  • 矩形通常具有相似的 x 位置和相似的尺寸(相似的高度和宽度),并且内部具有较小的矩形。矩形本身将被视为它自己的集群。

  • 有时这些集群与另一个集群的距离可能相当大(想想岛屿)。通常这些簇共享相同或相似的维度以及相同或相似的子矩形密度。如果是这样,尽管两个集群之间存在距离,但它们应被视为同一集群的一部分。

  • 矩形越密集(内部的矩形越小),附近有相似或相同的密集矩形共享相同或相似维度的可能性就越大。

我附上了一张图表来更清楚地描述这种情况:

在此处输入图像描述

  • 红色边框表示这些组是异常值,不属于任何集群并被忽略。

  • 蓝色边框有很多簇(黑色边框包含黑色实心矩形)。由于上述标准(相似的宽度、相似的 X 位置、相似的密度),它们形成了一组相似的集群。由于标准(相似的宽度、相似的 X 位置、相似的密度),即使是右下角的集群仍然被认为是该组的一部分。

  • 绿松石边框有很多簇(黑色边框包含黑色实心矩形)。然而,这些集群在维度、x 位置和密度上与蓝色边框中的集群不同。他们被认为是他们自己的一个群体。

到目前为止,我发现 DBSCAN 之类的密度聚类似乎很完美,因为它考虑了噪声(异常值),而且您不需要提前知道会有多少聚类。

但是,您需要定义形成集群所需的最小点数和阈值距离。如果您不知道这两个会发生什么,并且它可能会根据上述问题而有所不同?

另一个看似合理的解决方案是分层(凝聚)聚类(r-tree),但我担心我仍然需要知道树深度级别的截止点以确定它是否是一个集群。

4

1 回答 1

4

您当然需要考虑所有限制因素。

一般来说,你的任务对我来说更像是约束满足而不是聚类。

也许一些约束聚类方法对你有用,但我不确定它们是否允许你的约束。通常,它们只支持 must-link 和 must-not-link 约束。

但是当然您应该尝试 DBSCAN(特别是:广义 DBSCAN,因为泛化可能允许您添加您拥有的约束!)和 R-trees(实际上不是聚类算法,而是数据索引)。

请注意,R-trees 会将“异常值”放入某个叶子中,以确保最小填充。

照原样,我不能给你更详细的建议,因为即使从上面的草图来看,你的约束也没有很好地定义恕我直言。尝试将它们放入伪代码中。您可能只有少量矩形(例如 100 个);因此您可以负担得起运行非常昂贵的算法,例如使用自定义链接标准的链接聚类。将您的标准放入代码中可能已经完成了 99% 的工作!

于 2013-12-27T10:13:44.460 回答