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基准图。
该算法的过程如下:
求一个具有幂律分布和最小值的度序列
min_degree
,近似平均度average_degree
. 这可以通过以下两种方式实现:指定
min_degree
而不是average_degree
,指定
average_degree
而不是min_degree
在这种情况下,将找到合适的最低学位。
max_degree
也可以指定,否则将设置为n
. 每个节点 u 将有mu mathrm{{deg}}(u)
边缘将其连接到社区中的节点,而不是其自身和(1 - mu) mathrm{{deg}}(u)
边缘将其连接到自己社区中的节点。根据指数幂律分布生成社区大小
tau2
.如果min_community
和max_community
未指定它们将被选择为min_degree
和max_degree
,分别。社区规模的总和等于n
.每个节点将被随机分配一个社区,条件是社区足够大以满足节点的内部社区程度。
(1 - mu) mathrm{{deg}}(u)
如步骤2所述。如果社区太大,将选择一个随机节点重新分配给新社区,直到所有节点都分配给一个社区。每个节点 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
andtau2
must be strictly greater than 1.mu
must be in [0, 1].max_degree
must be in {1, ..., n}.min_community
andmax_community
must be in {0, ..., n}.
如果不完全是
average_degree
和min_degree
是指定的。如果
min_degree
未指定,并且合适的min_degree
找不到。- ExceededMaxIterations
如果不能在中创建有效的学位序列
max_iters
迭代次数。如果无法在中创建一组有效的社区大小
max_iters
迭代次数。如果无法在中创建有效的社区分配
10 * n * max_iters
迭代次数。
笔记
该算法与最初提出的方法稍有不同。 [1] .
我们不是通过配置模型连接图形,然后重新布线以匹配社区内和社区间的度,而是在末尾显式地进行连接,这应该是等效的。
作者网站上发布的代码 [2] 使用连续近似计算随机幂律分布变量及其平均值,而我们在这里使用离散分布作为度和社区大小都是离散的。
虽然作者将该算法描述为非常健壮的,但是在开发过程中的测试表明,稍微狭窄的参数集很可能成功地生成一个图。在例外情况下提供了一些建议。
工具书类
- 1
“测试社区检测算法的基准图”,Andrea Lanchichichinetti、Santo Fortunato和Filippo Radicchi,Phys。牧师。E 78046110 2008年
- 2
实例
基本用法:
>>> 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}