python 中的模块化最大化和 GenLouvain 实现

Modularity maximization and GenLouvain implementation in python

我有一个时间多层网络,我想通过使用模块化最大化来找到社区。

我想知道 Python 中是否有等效版本的 Matlab GenLouvain 用于最大化社区检测中的模块化?

初步搜索找到了这个库,但是相应的 GitHub 存储库不见了。

https://pypi.org/project/louvain/

还有其他几种算法,例如 Leiden 算法 (https://www.nature.com/articles/s41598-019-41695-z) for maximizing modularity with python implementation (https://github.com/vtraag/leidenalg),但我目前正在尝试探索我的选择,运行 我拥有的超模块化矩阵上的不同求解器。所以,我想从好的旧 GenLouvain 开始,然后比较不同的求解器与 python 实现。

有人有什么建议吗?

我目前使用 leidenalg 的 CPMVertexPartion 来分析我的网络。通过改变分辨率参数,我可以找到最大的模块化 Q。 我的网络很密集,beta 大约 >10,模块化可以提高 0.5

我发布这个问题已经有一段时间了,但如上所述,我发现 leidenalg 是 Python 中多层模块化最大化 (MMM) 的最佳实现,并改进了中间细化步骤,适当地处理任意断开连接的社区。

这是一段代码,我用配置空模型来实现 MMM。

def leiden(self, G, interslice, resolution):
    ## G: the appropriate igraph as explained in the documentation
    ## interslice: float, interlayer edge weights for the diagonal coupling of consecutive layers
    ## resolution: float, spatial resolution parameter
    
    layers, interslice_layer, G_full = la.time_slices_to_layers(G, interslice_weight = interslice)
    
    partitions = [la.RBConfigurationVertexPartition(H, 
                                        weights = 'weight', 
                                        resolution_parameter = resolution) for H in layers]

    ## resolution parameter below has to be 0 to recover the original multilayer modularity equation
    interslice_partition = la.RBConfigurationVertexPartition(interslice_layer, 
                                                             weights = 'weight',
                                                             resolution_parameter = 0)
                                                 
    optimiser = la.Optimiser()
    
    diff = optimiser.optimise_partition_multiplex(partitions + [interslice_partition])

    return(partitions, interslice_partition)

话虽如此,MMM 并不是执行动态社区检测的最佳方法。文献中有更多使用 random walks, stochastic block models, tensor factorization 方法的时间社区检测工具,我们应该检查一下。