【问题标题】:"Agglomerative" clustering of a graph based on node weight in network X?基于网络 X 中节点权重的图的“凝聚”聚类?
【发布时间】:2014-10-02 01:48:11
【问题描述】:

我有一个非常大的连接图(数百万个节点)。每条边都有一个权重——识别连接节点的接近程度。我想在图中找到“集群”(非常靠近的节点集)。例如,如果节点是美国的每个城市,边缘是城市之间的距离——集群可能是 {Dallas, Houston, Fort Worth} 和 {New York, Bridgeport, Jersey City, Trenton}。

集群不必具有相同的大小,并且并非所有节点都必须在一个集群中。相反,集群需要有一些平均最小权重,W 等于(集群中的权重总和)/(集群中的边数)。

我最擅长 Python,而 NetworkX 似乎是这方面的标准工具

这似乎不会太难编程,虽然不是特别有效。我描述的算法有名称吗? NetworkX 中是否已经有实现?

【问题讨论】:

    标签: python graph graph-theory networkx


    【解决方案1】:

    我知道一些图形划分算法,它们的目标是使所有部分的大小大致相同,边切尽可能小,但正如您所描述的,您不需要这样的算法。无论如何,我认为您的问题像许多其他图形分区问题一样是 NP 完全的。 也许有一些算法可以很好地解决你的问题(我认为有但我不知道它们),但我认为你仍然可以找到好的和可接受的解决方案,只需稍微改变一些最初用于寻找最小边缘切割的算法具有相同的组件大小。

    例如查看this。我认为您可以使用多级 k 路分区进行一些更改。 例如在粗化阶段,您可以使用 Light Edge Matching。 考虑一种情况,在粗化阶段,您将 A 和 B 匹配到一组,并将 C 和 D 匹配到另一组。这两组之间的边权重是其成员彼此的边的总和,例如W=Wac+Wad+Wbc+Wbd 其中 W 是边权重,Wac 是 A 和 C 之间的边权重,依此类推。我也认为考虑 Wac、Wad、Wbc 和 Wbd 的平均值而不是它们的总和也值得一试。

    根据我的经验,这个算法非常快,我不确定你能否在 python 中找到预编码的库来对其进行更改。

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2011-12-22
      • 2017-12-03
      • 1970-01-01
      • 2017-10-24
      • 2014-06-28
      • 2020-11-30
      • 1970-01-01
      相关资源
      最近更新 更多