由于community_fastgreedy()
无法处理有向图(定向未加权图),我不得不从使用community_edge_betweenness()
转为community_fastgreedy()
。
我的理解是community_fastgreedy()
是自下而上的方法,而community_edge_betweenness()
是自上而下的,并且都遵循找到最大化模块性的社区的原则,一个是通过合并社区而另一个是通过去除边缘
M.Girvan和M.E.J.Newman的原始论文"社会和生物网络中的社区结构" ,没有提及它能够处理有向图。这用于community_edge_betweenness()
。
我提到了here和Link文档,以获取有关定向网络算法的更多信息。
我的问题是 -
我对python-igraph中的community_fastgreedy()
和community_edge_betweenness()
实现的理解取决于最大化模块化,正确。
您能否请指出如何实施community_edge_betweenness以处理python-igraph中的定向网络或Girvan和Newman撰写的更新版本的文档。
由于我是社区检测新手,因此任何指针都很有用。 我知道更好的方法(Louvain,Infomap),但仍然需要使用CNM或GN进行比较。
感谢。
答案 0 :(得分:3)
community_edge_betweenness()
不尝试最大化模块化。模块化仅用作经验法则来决定在哪里切割"如果用户坚持使用算法生成的树形图,那么该算法会产生一个"平面"社区结构而不是平坦的树状图。
community_edge_betweenness()
"处理"当计算边缘的边缘间隙分数(然后依次用于决定在特定步骤中移除哪个边缘)时,简单地通过寻找有向路径而不是无向路径来定向图。据我所知,没有研究过这种方法在科学上是否正确和正确。
大多数社区检测方法(尤其是模块化程度最大化的方法)不能满足有向图的原因是因为社区的概念和#34;对于有向图没有明确的定义 - 大多数算法在图中寻找的部分比偶然的预期密度更高,但是这个模糊的定义并没有说明边缘的方向应该如何用过的。此外,有向图的模块化分数有多个(冲突的)扩展。
据我所知,igraph中唯一具有"正式"有针对性的网络中社区问题的处理是InfoMap algorithm。 InfoMap基于图表中随机游走的最小编码来定义社区,因此它能够准确地考虑边缘方向 - 粗略地说,InfoMap算法找到的社区是随机游走者的概率很小的节点组。 34;逸出"来自小组。 (InfoMap主页有一个很好的visual explanation)。所以,如果你真的需要在有向图中找到社区,我建议使用InfoMap方法。