我们用Infomap来表示在可能的网络分区上最小化Map Equation的搜索算法。下面简要介绍二阶和多阶方案的算法。
1.3.2.1 二阶算法
该算法的核心思想接近Louvain方法(Blondel et al.,2008):模块中加入其邻居节点,随之节点被加入到超级模块,依此类推。首先,每个节点被指派到自己的模块。然后,按照随机序列,每个节点被移动到邻居模块,这样可导致Map Equation最大化的减少。如果没有导致Map Equation减少的移动,那么节点停留在其原始模块。这个过程是重复的,每次按照新的随机序列,直到没有导致Map Equation减少的移动。接着,网络被重建,末阶的模块组织本阶的节点,正如上一阶节点加入模块一样。这种网络层级结构的重建是不断重复的,直到Map Equation不能再被减少。
利用此算法,在较短时间内可以形成网络的一个较好的聚类。让我们回顾核心思想,看看如何改进它。当网络被重建时,被指派到同一模块的节点被迫共同移动。因此,在算法执行早期的最优化移动可能在算法执行后期有相反的作用。按此算法,当网络重建时,两个或多个模块组合在一起并形成一个单独模块,再不会被分开。所以,通过打破核心算法中模块的最终状态来提高算法的准确性,有如下两种方式:
子模块移动。首先,每个聚类被看作是一个网络,主算法被应用于这个网络。对每一模块,这一过程生成一个或多个子模块。然后,所有的子模块被移回到上一步各自的模块。这一阶段,正如同上一步同样的分区,主算法被重新应用,但每个子模块在模块间可随意移动。(www.daowen.com)
单个节点运动。首先,为了让独立节点移动,每个节点被重新指派给它所在模块的单一成员。然后,所有节点移回到前一步的各自模块。这一阶段,正如在前一步的同样的分区,主算法被重新应用,但每个子模块在模块间可随意移动。实践中,只要能改进聚类,我们按顺序对核心算法进行重复两次的扩展。而且,我们递归地应用子模块运动。也就是说,为了找到被移动的子模块,算法先将其划分为子子模块、子子子模块,依此类推直到没有可能再划分。最后,因为算法是随机、快速的,所以每次聚类不能再被改进和算法停止时,我们能重新开始运行。这种应用是直截了当的,而且通过重复搜索超过100次或更多,最终的分区是不太可能与局部最小值相对应的。每一次循环,如果描述长度比之前记录的长度短,我们就记录下聚类。
1.3.2.2 多阶算法
我们已经总结了两阶Map Equation搜索算法来递归搜寻多阶方案。递归搜索在任意阶的模块上运行,可以是整个网络的所有节点或者末阶的一部分节点。对于给定模块,如果这次给出一个更短的描述长度,算法首先生成子模块。如果不是,递归搜索在此分支上不再继续。但是,如果增加的子模块给出更短的描述长度,算法测试是否利用补充索引码书能进一步压缩模块内运动。通过增加一个或多个粗糙的码书来压缩子模块间运动,或者通过增加一个或多个更精细的索引码书来压缩模块间运动,都能够达到进一步的压缩。为了测试所有的组合,算法递归调用自己,不仅在由子模块组成的网络中而且在每个子模块内节点组成的网络中运行。通过这种方式,在搜索最优化等级分区时,算法能持续增加和减少多阶代码结构的不同分支的深度。在每一次将模块划分为子模块时,我们使用上述二阶搜索算法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。