当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX louvain_communities用法及代码示例


本文简要介绍 networkx.algorithms.community.louvain.louvain_communities 的用法。

用法:

louvain_communities(G, weight='weight', resolution=1, threshold=1e-07, seed=None)

使用 Louvain 社区检测算法找到图的最佳分区。

Louvain社区检测算法是一种提取网络社区结构的简单方法。这是一种基于模块化优化的启发式方法。 [1]

该算法分两步工作。第一步,它将每个节点分配到自己的社区中,然后对于每个节点,它试图通过将每个节点移动到其所有邻居社区来找到最大的正模块化增益。如果没有获得正收益,该节点将保留在其原始社区中。

通过将孤立节点 移动到社区 获得的模块化增益可以通过以下公式轻松计算(结合[1] [2]和一些代数):

其中 是图的大小, 是从 中的节点的链接的权重之和, 是入射到节点的链接的权重之和 是连接到 中节点的链接的权重之和, 是分辨率参数。

对于有向情况,可以根据[3]使用此公式计算模块化增益

其中 , 是节点 的外部和内部加权度, 是 in-going 和 out-going 链接到 中节点的总和。

第一阶段一直持续到没有单独的动作可以提高模块化程度。

第二阶段包括建立一个新网络,其节点现在是第一阶段中发现的社区。为此,新节点之间的链接权重由相应两个社区中节点之间的链接权重之和给出。一旦这个阶段完成,就可以重新应用第一阶段,创建更大的社区,增加模块化。

执行上述两个阶段,直到没有获得模块化增益(或小于 threshold )。

参数

GNetworkX 图
weight字符串或无,可选(默认=”weight”)

保存用作权重的数值的边属性的名称。如果 None 则每条边的权重为 1。

resolution浮点数,可选(默认=1)

如果分辨率小于 1,则该算法有利于更大的社区。大于 1 有利于较小的社区

threshold浮点数,可选(默认=0.0000001)

每个级别的模块化增益阈值。如果算法的 2 个级别之间的模块化增益小于给定阈值,则算法停止并返回结果社区。

seed整数、random_state 或无(默认)

随机数生成状态的指示符。请参阅随机性。

返回

列表

集合列表(G 的分区)。每个集合代表一个社区并包含构成它的所有节点。

注意

考虑节点的顺序会影响最终输出。在算法中,排序是使用随机洗牌发生的。

参考

1(1,2)

Blondel, V.D. et al. Fast unfolding of communities in large networks. J. Stat. Mech 10008, 1-12(2008). https://doi.org/10.1088/1742-5468/2008/10/P10008

2

Traag, V.A., Waltman, L. & van Eck, N.J. From Louvain to Leiden: guaranteeing well-connected communities. Sci Rep 9, 5233 (2019). https://doi.org/10.1038/s41598-019-41695-z

3

Nicolas Dugué, Anthony Perez. Directed Louvain : maximizing modularity in directed networks. [Research Report] Université d’Orléans. 2015. hal-01231784. https://hal.archives-ouvertes.fr/hal-01231784

例子

>>> import networkx as nx
>>> import networkx.algorithms.community as nx_comm
>>> G = nx.petersen_graph()
>>> nx_comm.louvain_communities(G, seed=123)
[{0, 4, 5, 7, 9}, {1, 2, 3, 6, 8}]

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.community.louvain.louvain_communities。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。