我在igraph
包中使用InfoMap算法在有向和非加权图(34943顶点,206366边)上执行社区检测。在图中,顶点表示网站,边表示网站之间存在超链接。
运行算法后遇到的一个问题是,大多数顶点都具有单个大型社区的成员资格(32920或94%)。其余的顶点分散在数百个其他小社区中。
我尝试了nb.trials
参数的不同设置(即50,100,现在运行500)。但是,这似乎没有太大改变结果。
我感到相当恼怒,因为算法的运行时间非常高,所以我每次都要等待结果(没有运气!!)。
非常感谢。
答案 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)
我打算把它放在评论中,但结果太长了,难以用这种格式阅读,所以这是一个切线相关的答案。
您应该做的一件事是评估算法是否在寻找社区结构方面做得很好。您可以尝试可视化您的网络以建立:
这有助于您了解后续步骤。也许网络的结构需要不同的算法?
我认为对大型网络有用的一点是将边缘绘制为热图。如果将边存储在邻接矩阵中,这很容易做到。
为此,您可以使用image
函数,将您的边矩阵作为参数z
传递。希望这可以让您通过眼睛看到社区结构。
但是,您还想评估算法的正确性,因此您希望按照已分配给它们的社区对节点(邻接矩阵的行和列)进行排序。
另外需要注意的是,如果您的边缘被定向,则可能更难以通过眼睛评估,因为边缘可能出现在热图的对角线的两侧。您可以做的一件事是绘制underlying graph
- 即邻接矩阵,假设您的边缘是无向的。
如果您的算法做得很好,您可能会看到对角线上的方块,每个检测到的社区都有一个块。