【问题标题】:Algorithm of community_edge_betweenness() in python-igraph implementationpython-igraph实现中community_edge_betweenness()的算法
【发布时间】:2015-10-08 16:51:01
【问题描述】:

由于community_fastgreedy() 无法处理有向图(有向未加权图),我不得不从使用community_fastgreedy() 转换为community_edge_betweenness()

我的理解是,community_fastgreedy() 是自下而上的方法,而 community_edge_betweenness() 是自上而下的方法,两者的工作原理都是找到最大化模块化的社区,一个是通过合并社区,另一个是通过去除边缘。

在 M.Girvan 和 M.E.J.Newman “社会和生物网络中的社区结构”的原始论文中,没有提到它能够处理有向图。这用于community_edge_betweenness()

我参考了hereLink 文档以获取有关定向网络算法的更多信息。

我的问题是 -

  1. 我的理解是,community_fastgreedy()community_edge_betweenness() 在 python-igraph 中的实现依赖于最大化模块化,正确的。

  2. 能否请您指出关于如何在 python-igraph 中实现 community_edge_betweenness 以处理有向网络的文档或 Girvan 和 Newman 的论文的更新版本。

由于我是社区检测的新手,因此任何指针都是有用的。 我知道更好的方法(Louvain、Infomap),但仍需要使用 CNM 或 GN 进行比较。

谢谢。

【问题讨论】:

    标签: python igraph


    【解决方案1】:
    1. community_edge_betweenness() 尝试最大化模块化。如果用户坚持使用“扁平”社区结构而不是扁平树状图,模块化仅用作经验法则​​来决定在哪里“切割”算法生成的树状图。

    2. community_edge_betweenness() “处理”有向图只需在计算边的边介数分数时寻找有向路径而不是无向路径(然后依次用于决定在特定位置删除哪条边)步)。据我所知,目前还没有研究过这种方法是否科学合理和正确。

    大多数社区检测方法(尤其是那些最大化模块化的方法)不适合有向图的原因是因为“社区”的概念对于有向图没有明确定义 - 大多数算法都在寻找部分在图中“比偶然预期的更密集”,但这个模糊的定义并没有说明应该如何使用边缘的方向。此外,有向图的模块化分数有多个(冲突的)扩展。

    据我所知,igraph 中唯一对有向网络中的社区问题进行“正式”处理的方法是InfoMap algorithm。 InfoMap 基于图中随机游走的最小编码来定义社区,因此它能够准确地考虑边缘方向——粗略地说,InfoMap 算法找到的社区是随机游走者“逃逸”概率很小的节点组“来自小组。 (InfoMap 主页有一个很好的visual explanation)。所以,如果你真的需要在有向图中找到社区,我建议使用 InfoMap 方法。

    【讨论】:

    • 感谢您的明确解释。很有帮助。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多