首页 > 解决方案 > 基于边权重的图聚类

问题描述

我使用 networkx 构建了一个图表,它是一个以人为节点、消息频率为边权重的社交网络。我想把这个网络聚集到不同的人群中。经常互相发信息的人往往在同一组中。我该怎么做?我应该使用哪种聚类算法?另外,我如何像树状图树一样可视化分组?

提前致谢!:D PS:我尝试过使用 python-louvain 进行分区,但这会产生不准确的结果,例如即使他们的消息传递频率非常高,它也会将两个用户划分为不同的组

标签: pythongraphcluster-analysisnetworkx

解决方案


我曾尝试使用 python-louvain 进行分区,但结果不准确[...]

Louvain 方法并不完美,也没有完美的方法,它们始终取决于您要达到的目标(请参阅本文的结论)。

[...] 就像它将两个用户分成不同的组,即使他们的消息传递频率非常高。

看来这个用户可能属于多个社区......也许可以尝试一种允许重叠社区的分区方法,例如K-Clique。这种划分方法允许节点属于多个社区。

算法:

以下是我发现的一些替代算法:

  1. networkX 包中已经包含了许多算法(这里)。我会建议girvan_newman,但它需要大量的计算能力......

  2. CDLib 包还具有许多用于 networkX(此处)的算法,包括一些允许重叠社区的算法。另外,检查leiden 算法,您可能更喜欢它而不是 louvain,它应该更好(根据他们的论文

  3. 对于清晰的社区,我仍然建议使用python-louvain

祝你好运!


推荐阅读