
上一个帖子介绍了infomap的基本逻辑infomap-CSDN博客这个帖子介绍层次infomap。基本的infomap只能得到单层模块但是现实世界中也存在着“模块套模块”的情况例如对某一个个人他可能在xx企业的xx国家的分公司的xx城市分部工作。层次infomap就力求发现这样的层次嵌套结构。infomap的核心损失函数前面一部分是在模块间切换的熵率后面一部分是在每个模块内发生事件visit不同的节点退出模块的熵率。对于层次infomap的话其实就是把L(M)扩展成三个公式第一个公式在最顶层模块间切换的熵率(1)其中是在最顶层不同i模块之间切换的事件的概率和q左箭头H(Q)就是熵率。后面一部分就是在i模块内发生的事件切换的熵率。第二个公式中间层模块事件的熵率前面一项就是在中间层模块i会发生的事件的概率之和包括退出i模块以及进入i模块中的某一个j模块的事件概率后面一项就是在i模块下面的j模块会发生的事件的熵率第三个公式底层模块内事件的熵率这个就和单层infomap的公式的第二项一样了最底层模块不再包含更细粒度的模块直接对应每一个节点。在这个模块内发生的事件就是visit每一个节点或者退出这个模块。损失函数定义就说完了那么具体怎么进行模块划分呢算法可以从粗粒度和细粒度两个方向上实现层次聚类“粗粒度”就是把不同子模块合并起来“细粒度”就是对每一个子模块进行细分看合并/细分操作能否降低L(M)。对某一个分支如果不能进一步降低L(m)那么递归搜索就不会继续沿这一分支向更深层级搜索。