當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python NetworkX LFR_benchmark_graph用法及代碼示例

本文簡要介紹 networkx.generators.community.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. 根據 index tau2 的冪律分布生成社區大小。如果 min_communitymax_community 未指定,它們將分別被選擇為 min_degreemax_degree 。生成社區大小,直到它們的大小之和等於 n

  3. 每個節點將被隨機分配一個社區,條件是社區足夠大,可以容納節點的intra-community度,(1 - mu) mathrm{deg}(u),如步驟 2 所述。如果社區變得太大,將選擇一個隨機節點重新分配給一個新的社區,直到所有節點都被分配了一個社區。

  4. 然後每個節點 u 添加 (1 - mu) mathrm{deg}(u) intra-community 邊和 mu mathrm{deg}(u) inter-community 邊。

參數

nint

創建的圖中的節點數。

tau1浮點數

創建圖的度數分布的冪律 index 。該值必須嚴格大於一。

tau2浮點數

創建圖中社區規模分布的冪律 index 。該值必須嚴格大於一。

mu浮點數

入射到每個節點的inter-community 邊的分數。該值必須在區間 [0, 1] 內。

average_degree浮點數

創建的圖中節點的所需平均度數。此值必須在區間 [0, n ] 內。必須指定其中一個和 min_degree,否則會引發 NetworkXError

min_degreeint

創建的圖中節點的最小度數。此值必須在區間 [0, n ] 內。必須指定其中一個和 average_degree,否則會引發 NetworkXError

max_degreeint

創建的圖中節點的最大度數。如果未指定,則設置為 n ,即圖中的節點總數。

min_communityint

圖中社區的最小規模。如果未指定,則設置為 min_degree

max_communityint

圖中社區的最大大小。如果未指定,則設置為 n ,即圖中的節點總數。

tol浮點數

比較浮點數時的容差,特別是比較平均度數值時。

max_itersint

嘗試創建社區大小、度分布和社區隸屬關係的最大迭代次數。

seed整數、random_state 或無(默認)

隨機數生成狀態的指示符。請參閱隨機性。

返回

GNetworkX 圖

根據指定參數生成的 LFR 基準圖。

圖中的每個節點都有一個節點屬性'community',用於存儲包含它的社區(即節點集)。

拋出

NetworkXError

如果任何參數不滿足其上限和下限:

  • tau1tau2 必須嚴格大於 1。
  • mu 必須在 [0, 1] 中。
  • max_degree 必須在 {1, ..., n } 中。
  • min_communitymax_community 必須在 {0, ..., n } 中。

如果不完全指定average_degreemin_degree 之一。

如果未指定 min_degree 並且找不到合適的 min_degree

ExceededMaxIterations

如果在max_iters 迭代次數內無法創建有效的度數序列。

如果在max_iters 迭代次數內無法創建一組有效的社區大小。

如果在10 * n * max_iters 迭代次數內無法創建有效的社區分配。

注意

該算法與 [1] 中呈現的原始方式略有不同。

  1. 我們不是通過配置模型連接圖形然後重新布線以匹配intra-community 和inter-community 度數,而是在最後明確地進行此布線,這應該是等效的。

  2. 作者網站 [2] 上發布的代碼使用連續近似計算隨機冪律分布變量及其平均值,而我們在這裏使用離散分布,因為度數和社區大小都是離散的。

盡管作者將該算法說明為非常穩健,但在開發過程中的測試表明,稍微窄一些的參數集可能會成功生成圖形。如果出現例外情況,提供了一些建議。

參考

1

“Benchmark graphs for testing community detection algorithms”, Andrea Lancichinetti, Santo Fortunato, and Filippo Radicchi, Phys. Rev. E 78, 046110 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}

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.generators.community.LFR_benchmark_graph。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。