【问题标题】:What clustering algorithm is suitable for 2d rectangles without knowing the number of clusters ahead of time?什么聚类算法适合二维矩形而不提前知道聚类的数量?
【发布时间】:2014-01-14 21:31:10
【问题描述】:

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

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

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: cluster-analysis hierarchical-clustering r-tree dbscan


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 基本上我希望将相似尺寸的矩形和相似的密度聚集在一起。这是否更清楚地阐明了约束?如果我使用层次聚类并通过相似的密度值(k-means?)确定一个聚类会怎样?
    • 您不能将自定义相似性插入 k-means。你真的需要弄清楚“相似尺寸”对意味着什么。因为没有通用的定义。
    • 类似尺寸的宽度和高度为 +/-20。我刚刚尝试了 DBSCAN,而 epsilon 每次都会为我杀死它。我需要进行长时间的反复试验。 OPTICS 听起来不错(因为不需要 epsilon),但我在 javascript 或 python 中找不到任何实现
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2019-08-23
    • 2016-10-16
    • 2020-12-23
    • 2013-12-12
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多