1

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

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

初步搜索得到了这个库,但是对应的 GitHub 存储库已经不见了。

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

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

有没有人有什么建议?

4

2 回答 2

0

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

于 2021-02-15T09:08:33.167 回答
0

我发布这个问题已经有一段时间了,但如上所述,我发现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 并不是执行动态社区检测的最佳方法。文献中有更多的时间社区检测工具正在利用随机游走随机块模型张量分解方法,应该检查一下。

于 2021-02-24T15:40:14.933 回答