使用InfoMap算法进行社区检测,生成一个大型模块

时间:2013-12-04 01:09:29

标签: r igraph sna

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

运行算法后遇到的一个问题是,大多数顶点都具有单个大型社区的成员资格(32920或94%)。其余的顶点分散在数百个其他小社区中。

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

我感到相当恼怒,因为算法的运行时间非常高,所以我每次都要等待结果(没有运气!!)。

非常感谢。

2 个答案:

答案 0 :(得分:8)

感谢所有出色的评论。最后,我通过下载并运行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

答案 1 :(得分:5)

我打算把它放在评论中,但结果太长了,难以用这种格式阅读,所以这是一个切线相关的答案。

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

  1. 算法是否返回有意义的社区结构?也许有一个庞大的社区?
  2. 如果没有,可视化提供了关于原因的见解?
  3. 这有助于您了解后续步骤。也许网络的结构需要不同的算法?

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

    为此,您可以使用image函数,将您的边矩阵作为参数z传递。希望这可以让您通过眼睛看到社区结构。

    但是,您还想评估算法的正确性,因此您希望按照已分配给它们的社区对节点(邻接矩阵的行和列)进行排序。

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

    如果您的算法做得很好,您可能会看到对角线上的方块,每个检测到的社区都有一个块。