python - 基于边权重的图聚类
问题描述
我使用 networkx 构建了一个图表,它是一个以人为节点、消息频率为边权重的社交网络。我想把这个网络聚集到不同的人群中。经常互相发信息的人往往在同一组中。我该怎么做?我应该使用哪种聚类算法?另外,我如何像树状图树一样可视化分组?
提前致谢!:D PS:我尝试过使用 python-louvain 进行分区,但这会产生不准确的结果,例如即使他们的消息传递频率非常高,它也会将两个用户划分为不同的组
解决方案
我曾尝试使用 python-louvain 进行分区,但结果不准确[...]
Louvain 方法并不完美,也没有完美的方法,它们始终取决于您要达到的目标(请参阅本文的结论)。
[...] 就像它将两个用户分成不同的组,即使他们的消息传递频率非常高。
看来这个用户可能属于多个社区......也许可以尝试一种允许重叠社区的分区方法,例如K-Clique。这种划分方法允许节点属于多个社区。
算法:
以下是我发现的一些替代算法:
networkX 包中已经包含了许多算法(这里)。我会建议
girvan_newman
,但它需要大量的计算能力......CDLib 包还具有许多用于 networkX(此处)的算法,包括一些允许重叠社区的算法。另外,检查leiden 算法,您可能更喜欢它而不是 louvain,它应该更好(根据他们的论文)
对于清晰的社区,我仍然建议使用python-louvain
祝你好运!
推荐阅读
- c# - 编辑器中的 Unity 自定义类
- typescript - VS Code 中的一个库显示重复的自动完成建议
- javascript - 为什么 XMLHttpRequest() 似乎无法更新?
- android - 将 firebase_messaging 依赖项添加到颤振项目时出错?
- matlab - 当我们使用 `axes0` 函数时,如何在图中显示网格?
- ubuntu - Ubuntu grep 不会删除不需要的行
- applescript - 如何在 Java 运行时激活 ControllerMate?AppleScript 进程检查?
- php - Laravel 8 不广播事件(推动者)
- python - 我怎样才能在 tkinter 的文本中得到文字
- validation - 检查一个范围是否包含来自另一个范围的文本