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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。