LFR_benchmark_graph#

LFR_benchmark_graph(n, tau1, tau2, mu, average_degree=None, min_degree=None, max_degree=None, min_community=None, max_community=None, tol=1e-07, max_iters=500, seed=None)[源代码]#

返回LFR基准图。

该算法的过程如下:

  1. 求一个具有幂律分布和最小值的度序列 min_degree ,近似平均度 average_degree . 这可以通过以下两种方式实现:

    1. 指定 min_degree 而不是 average_degree

    2. 指定 average_degree 而不是 min_degree 在这种情况下,将找到合适的最低学位。

    max_degree 也可以指定,否则将设置为 n . 每个节点 u 将有 mu mathrm{{deg}}(u) 边缘将其连接到社区中的节点,而不是其自身和 (1 - mu) mathrm{{deg}}(u) 边缘将其连接到自己社区中的节点。

  2. 根据指数幂律分布生成社区大小 tau2 .如果 min_communitymax_community 未指定它们将被选择为 min_degreemax_degree ,分别。社区规模的总和等于 n .

  3. 每个节点将被随机分配一个社区,条件是社区足够大以满足节点的内部社区程度。 (1 - mu) mathrm{{deg}}(u) 如步骤2所述。如果社区太大,将选择一个随机节点重新分配给新社区,直到所有节点都分配给一个社区。

  4. 每个节点 u 然后添加 (1 - mu) mathrm{{deg}}(u) 社区内边缘和 mu mathrm{{deg}}(u) 社区间的优势。

参数
n集成

创建的图形中的节点数。

tau1浮动

创建的图的度分布的幂指数。该值必须严格大于1。

tau2浮动

创建的图表中的社区规模分布的幂指数。该值必须严格大于1。

mu浮动

关联到每个节点的社区间边的分数。该值必须在间隔内 [0, 1] 。

average_degree浮动

创建的图表中所需的节点平均度。该值必须在间隔内 [0, n] 。恰好就是其中的一个 min_degree 必须指定,否则将引发 NetworkXError 都被养大了。

min_degree集成

创建的图形中的最小节点度。该值必须在间隔内 [0, n] 。恰好就是其中的一个 average_degree 必须指定,否则将引发 NetworkXError 都被养大了。

max_degree集成

创建的图形中节点的最大度数。如果未指定,则将其设置为 n ,图形中的节点总数。

min_community集成

图中社区的最小大小。如果未指定,则将其设置为 min_degree

max_community集成

图表中社区的最大大小。如果未指定,则将其设置为 n ,图形中的节点总数。

tol浮动

比较浮点数时的容差,特别是比较平均次数值时的容差。

max_iters集成

尝试创建社区大小、学位分布和社区从属关系的最大迭代次数。

seed整数、随机状态或无(默认)

随机数生成状态的指示器。见 Randomness .

返回
G网络X图表

根据指定参数生成的LFR基准图。

图中的每个节点都有一个节点属性 'community' 它存储包含它的社区(即节点集)。

加薪
NetworkXError

如果任何参数不满足其上下限:

  • tau1 and tau2 must be strictly greater than 1.

  • mu must be in [0, 1].

  • max_degree must be in {1, ..., n}.

  • min_community and max_community must be in {0, ..., n}.

如果不完全是 average_degreemin_degree 是指定的。

如果 min_degree 未指定,并且合适的 min_degree 找不到。

ExceededMaxIterations

如果不能在中创建有效的学位序列 max_iters 迭代次数。

如果无法在中创建一组有效的社区大小 max_iters 迭代次数。

如果无法在中创建有效的社区分配 10 * n * max_iters 迭代次数。

笔记

该算法与最初提出的方法稍有不同。 [1] .

  1. 我们不是通过配置模型连接图形,然后重新布线以匹配社区内和社区间的度,而是在末尾显式地进行连接,这应该是等效的。

  2. 作者网站上发布的代码 [2] 使用连续近似计算随机幂律分布变量及其平均值,而我们在这里使用离散分布作为度和社区大小都是离散的。

虽然作者将该算法描述为非常健壮的,但是在开发过程中的测试表明,稍微狭窄的参数集很可能成功地生成一个图。在例外情况下提供了一些建议。

工具书类

1

“测试社区检测算法的基准图”,Andrea Lanchichichinetti、Santo Fortunato和Filippo Radicchi,Phys。牧师。E 78046110 2008年

2

https://www.santofortunato.net/resources

实例

基本用法:

>>> from networkx.generators.community import LFR_benchmark_graph
>>> n = 250
>>> tau1 = 3
>>> tau2 = 1.5
>>> mu = 0.1
>>> G = LFR_benchmark_graph(
...     n, tau1, tau2, mu, average_degree=5, min_community=20, seed=10
... )

继续上面的示例,可以从图的节点属性中获取社区:

>>> communities = {frozenset(G.nodes[v]["community"]) for v in G}