【问题标题】:Why Kruskal clustering generates suboptimal classes?为什么 Kruskal 聚类会生成次优类?
【发布时间】:2013-12-21 20:44:31
【问题描述】:

我正在尝试开发一种聚类算法,其任务是在一组 2D 点上查找 k 个类(将 k 作为输入),使用经过轻微修改的 Kruskal 算法来查找 k 个生成树而不是一个。

我使用 rand 指数将我的输出与建议的最优值 (1) 进行了比较,k = 7 的结果为 95.5%。比较可以在下面的链接中看到。

问题:

该集合有 5 个间隔明显的簇,很容易被算法分类,但是当 k > 5 时,结果相当令人失望,这时事情开始变得棘手。我相信我的算法是正确的,也许数据对于 Kruskal 方法来说特别糟糕。众所周知,Kruskal 等单链接聚合聚类在某些问题上表现不佳,因为它将聚类质量的评估降低到一对点之间的单一相似性。

算法的思路很简单:

  • 用数据集做一个完整的图,边的权重 是这对之间的欧几里得距离。
  • 按权重对边缘列表进行排序。
  • 对于每条边(按顺序),如果它不形成循环,则将其添加到生成林中。当所有的边都被遍历完或者剩余的森林有 k 棵树时停止。

底线: 为什么算法会这样失败?是克鲁斯卡尔的错吗?如果是这样,为什么?有什么建议可以在不放弃 Kruskal 的情况下改进结果?

(1):Gionis, A.、H. Mannila 和 P. Tsaparas,聚类聚合。 ACM 交易 从数据中发现知识(TKDD),2007.1(1):p.1-30。

【问题讨论】:

    标签: algorithm tree cluster-analysis minimum-spanning-tree kruskals-algorithm


    【解决方案1】:

    这称为单链接效应

    Kruskal 似乎是一种计算单链接聚类的半聪明方法。 “分层聚类”的幼稚方法是 O(n^3),而 Kruskal 方法应该是 O(n^2 log n),因为必须对 n^2 边进行排序。

    请注意,SLINK 可以在 O(n^2) 运行时和 O(n) 内存中进行单链接聚类。

    您是否尝试过加载数据集,例如进入ELKI,并将您的结果与单链接聚类进行比较。

    要获得更好的结果,请尝试其他链接(通常在 O(n^3) 运行时)或基于密度的聚类,例如 DBSCAN(在不带索引的 O(n^2) 和带索引的 O(n log n) 中)。在这个玩具数据集上,epsilon=2minPts=5 应该可以正常工作。

    【讨论】:

      【解决方案2】:

      应该不同的集群之间的桥梁是 Kruskal 出错的典型例子。您可以尝试,对于每个点,用距该点的第二最短距离覆盖距该点的最短距离 - 这可能会增加桥梁的长度而不增加其他长度。

      从肉眼看来,这看起来像 K-means 可能做得很好 - 除了左上角,这些簇几乎是圆形的。

      【讨论】:

      • 我想我不明白。你建议我对每对点使用第二短的边吗?这不会导致同样的问题吗?为什么 Kruskal 在这类问题上失败了?
      • Kruskal 将两个蓝色星团连接起来只是因为它们之间有一条长链。克鲁斯卡尔经常这样做。在一个集群中,每个节点都有许多其他靠近它的节点。在长链中,每个节点附近只有两个节点。如果您可以足够地增加链中节点之间的链接长度,则可能会使链失败。如果您将每个节点的第 1..k 个最短链接的长度替换为该节点的第 k+1 个最短链接的长度 - 我认为 k=1但也许 k=2 会更好。
      【解决方案3】:

      您可以尝试曼哈顿距离,但为了变得更好,您可以尝试经典的直线和圆检测算法。

      【讨论】:

      • 为什么曼哈顿距离会有帮助?没错,形状检测确实会提高结果,但我应该只使用 Kruskal。
      猜你喜欢
      • 2020-09-19
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多