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 方法的时间社区检测工具,我们应该检查一下。
我有一个时间多层网络,我想通过使用模块化最大化来找到社区。
我想知道 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 方法的时间社区检测工具,我们应该检查一下。