什么聚类算法适合在不知道聚类数的情况下的二维矩形?

jav*_*ent 5 cluster-analysis hierarchical-clustering r-tree dbscan

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

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

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

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

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

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

在此处输入图片说明

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

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

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

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

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

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

Ano*_*sse 4

You certainly will need to take all your constraints into account.

In general, your task looks more like constraint satisfaction to me than clustering.

Maybe some constraint clustering approaches are useful to you, but I'm not sure if they allow your kind of constraints. Usually, they only support must-link and must-not-link constraints.

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

请注意,R 树会将“离群值”放入某些叶子中,以确保最小填充。

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