用最小生成树创建 N 簇?

问题描述

假设我从具有 M 个节点的图形中创建了一个最小生成树。有没有一种算法可以创建 N 个集群。

我希望切断一些链接,例如我最终得到 N 个集群并标记它们,即给定一个节点 X,我可以查询它属于哪个集群。


我认为一旦我有了 MST,我就会切割 MST 的顶部/最大 M-N 边,然后我会得到 N 个簇?

我的逻辑正确吗?

解决方法

这对我来说似乎是一个好方法。你问它是否“正确”——我不能说,因为我不知道你有什么其他未说明的标准。您实际上所说的只是创建 N 个集群 - 您也可以通过丢弃 MST,将顶点 1 放在第一个集群中,将顶点 2 放在第二个集群中,...,顶点 N-1 中的第一个集群来实现(N-1)th,以及第 N 个中所有剩余的顶点。

如果您使用 Kruskal's algorithm 来构建 MST,您可以通过简单地尽早停止算法来实现您的建议,只要只剩下 N 个组件。

,

树是图边的(非常稀疏的)子集,如果根据它们进行切割,则不会考虑图中(可能的)绝大多数边。

基于您想要使用 M(inimum)ST 算法来创建集群的事实,您似乎想要最小化位于由您的集群引起的 n 路切割中的边集。使用 MST 作为具有非常相似权重边的图的代理可能会产生糟糕的结果。

图聚类是一个深入研究的主题,您是否考虑过使用现有库来完成此任务?如果您坚持要实现自己的算法,我会推荐 spectral clustering 作为起点,因为它可以毫不费力地产生不错的结果。


根据评论中的反馈进行编辑:

如果您的主要瓶颈是相似度矩阵,则应考虑以下几点:

  1. 研究稀疏矩阵/图形表示,同时实施谱聚类之类的东西,这可能会提供比单链接聚类更可靠的结果

  2. 从相似性矩阵中调查你认为不重要的修剪边。如果修剪与相似性矩阵的稀疏表示相结合,这将产生与 MST 方法相当的性能,同时提供平滑的连续统来调整性能与质量。