关于igraph中Leiden算法生成社区数量过多的技术问询
igraph实现的Leiden算法社区数量过多的原因及解决方法
核心差异在于目标函数的默认设置:
- igraph的
cluster_leiden()默认使用**CPM(Constant Potts Model)**作为目标函数,分辨率参数resolution_parameter对应CPM的γ值,该参数的尺度与Modularity的分辨率完全不同,即使调低γ值,也可能生成更多社区。 leidenAlg包的find_partition_with_rep()默认使用Modularity作为目标函数,这与Louvain算法的优化目标一致,因此社区划分结果更接近Louvain。
- igraph的
解决方法:在igraph的
cluster_leiden()中显式指定目标函数为"modularity",并调整对应分辨率参数(默认值为1),即可得到与leidenAlg、Louvain相近的社区数量。
修改后的测试代码:
library(igraph) library(leidenAlg) G <- graph_from_literal(1-2:3-4:5-6:7-8:9-10:11-12-13-14:15-16,1-7,10:8-13) clLouv <- cluster_louvain(G) # 使用Modularity目标函数的Leiden clLeid_mod <- cluster_leiden(G, objective_function = "modularity", resolution_parameter = 1, seed = 123) cl_Leid_r <- find_partition_with_rep(G, edge_weights=E(G), seed = 123) # 对比结果 clLouv$membership clLeid_mod$membership cl_Leid_r
- 额外说明:Leiden算法是随机化算法,设置
seed参数可固定随机初始状态,确保多次运行结果一致,便于对比不同实现的差异。
内容的提问来源于stack exchange,提问作者Sebastián
相关产品推荐
相关产品推荐

