【问题标题】:Community detection with InfoMap algorithm producing one massive module使用 InfoMap 算法进行社区检测,产生一个庞大的模块
【发布时间】:2013-12-04 01:09:29
【问题描述】:

我正在使用 igraph 包中的 InfoMap 算法在有向和非加权图(34943 个顶点,206366 个边)上执行社区检测。在图中,顶点代表网站,边代表网站之间是否存在超链接。

我在运行算法后遇到的一个问题是,大多数顶点都属于一个庞大的社区(32920 或 94%)。其余的顶点分散到数百个其他小社区。​​p>

我尝试了使用 nb.trials 参数的不同设置(即 50、100,现在运行 500)。但是,这似乎并没有改变结果。

由于算法的运行时间非常长,我感到非常恼火,所以我每次都必须等待结果(还没有运气!!)。

非常感谢。

【问题讨论】:

  • 您是否尝试过可视化图表来查看您期望的社区结构类型?也许尝试整个网络的热图,或者生成的社区结构的圆形图——这将帮助您确定找到的社区结构是否正确,或者检测算法是否做得不好(并给您一个想法从那里去哪里)。
  • 嗨@Manetheran,感谢您的建议。我以前没有使用过热图或圆形图。你能指点我正确的包或功能吗?谢谢。
  • 我会说,尝试其他方法,看看这些结果是否有意义。只是为了确保它不是实现中的错误。
  • @timothyjgraham 大多数社区检测方法仅支持无向图的原因之一是不清楚社区在有向图中的含义。 InfoMap 算法说,当您在图上执行随机游走时,社区是难以逃脱的东西,因此对于有向图是有意义的。基于模块化的算法说,社区是一个子图,其中的边比具有相同度数分布的随机图所期望的要多 - 但请注意,这完全忽略了边的方向。
  • 我在这里玩游戏有点晚了,但也试试multilevel.community。它可以扩展到相当大的图表(我目前正在一个有 250 万条边的图表上使用它)。它还为您提供了社区层次结构,因此您不仅限于它选择的具有最高模块化的单一结果。

标签: r igraph sna


【解决方案1】:

感谢所有优秀的 cmets。最后,我通过下载并运行 Infomap 的源代码来实现它,该源代码位于:http://www.mapequation.org/code.html

由于许可证问题,最新代码尚未与igraph 集成。

这解决了太多节点被“集中”到一个庞大的社区中的问题。

具体来说,我在命令行中使用了以下选项:-N 10 --directed --two-level --map

感谢 Infomap 项目的 Martin Rosvall 为我提供了解决此问题的详细帮助。

对于感兴趣的读者,这里是关于这个问题的更多信息:

当一个网络崩溃成一个主要集群时,通常是因为一个非常密集和随机的链接结构......在 iGraph 中实现的有向网络的代码中,隐形传输被编码。如果许多节点没有外链,则传送的效果可能非常显着,因为它随机连接节点。我们在这里提供了新代码:http://www.mapequation.org/code.html,它可以在不编码使动态遍历所需的随机隐形传输的情况下对网络进行集群。详情见本文:http://pre.aps.org/abstract/PRE/v85/i5/e056107

【讨论】:

  • 你能帮我解决一下 infomap 代码吗,我收到错误 1 ​​吗?
  • 嗨@academic.user,您能否提供有关错误代码的更多信息。您能否还提供有关您正在分析哪种图形的信息(例如顶点/边的数量?有向?加权?密度?等)。另外,当错误发生时你在做什么或试图做什么。
  • 文件本身有问题,我从 Bitbucket 下载了它。成功了,再次感谢您的回复
  • 再次抱歉@timothyjgraham,我想知道您是否创建了一个Multiplex输入数据来使用infomap,请参阅这个问题:stackoverflow.com/questions/28818695/…
【解决方案2】:

我打算把它放在评论中,但它最终太长而且很难以这种格式阅读,所以这是一个切线相关的答案。

您应该做的一件事是评估算法在寻找社区结构方面是否做得很好。您可以尝试可视化您的网络来建立:

  1. 返回社区结构的算法是否有意义?也许有一个庞大的社区?
  2. 如果没有,可视化是否提供了关于原因的洞察?

这将有助于您了解后续步骤。也许网络的结构需要不同的算法?

我发现对大型网络有用的一件事是将边缘绘制为热图。如果您将边缘存储在邻接矩阵中,这很容易做到。

为此,您可以使用image 函数,将边矩阵作为参数z 传递。希望这能让您直观地了解社区结构。

但是,您还想评估算法的正确性,因此您想按节点(邻接矩阵的行和列)被分配到的社区对其进行排序。

要注意的另一件事是,如果您的边缘是定向的,则可能更难以用肉眼评估,因为边缘可能出现在热图对角线的任一侧。您可以做的一件事是绘制underlying graph - 这是假设您的边缘是无向的邻接矩阵。

如果您的算法运行良好,您会期望看到沿对角线的方块,每个检测到的社区对应一个方块。

【讨论】:

  • 您好,感谢您的建议。我通过绘制边缘邻接矩阵尝试了热图方法 - “热量”全部集中在绘图顶部 10% 左右的矩形中(即沿 y 轴延伸的矩形块,向下延伸约 10%从 y 轴的顶部)。图的其余部分大部分是空白区域(有几个小热点,不超过几个像素。
  • 该算法似乎没有返回有意义的社区结构。大约 95% 的节点在一个社区中,另外 5% 的节点大多占据一个社区(即每个社区一个节点)。所以每个节点要么在庞大的社区中,要么在自己的社区中!我正在使用 InfoMap 算法,因为它支持有向图,而其他社区检测算法不支持。我尝试了 Spinglass,它返回了有意义的社区(总共 7 个社区)——但是它忽略了图形的方向性。
猜你喜欢
  • 2018-07-09
  • 2015-06-03
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2015-05-11
  • 2013-06-21
相关资源
最近更新 更多