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
)。- G:NetworkX 圖
- 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}]
相關用法
- Python NetworkX local_and_global_consistency用法及代碼示例
- Python NetworkX local_node_connectivity用法及代碼示例
- Python NetworkX local_bridges用法及代碼示例
- Python NetworkX local_edge_connectivity用法及代碼示例
- Python NetworkX local_reaching_centrality用法及代碼示例
- Python NetworkX latapy_clustering用法及代碼示例
- Python NetworkX lexicographical_topological_sort用法及代碼示例
- Python NetworkX line_graph用法及代碼示例
- Python NetworkX lexicographic_product用法及代碼示例
- Python NetworkX negative_edge_cycle用法及代碼示例
- Python NetworkX voronoi_cells用法及代碼示例
- Python NetworkX numerical_edge_match用法及代碼示例
- Python NetworkX inverse_line_graph用法及代碼示例
- Python NetworkX LFR_benchmark_graph用法及代碼示例
- Python NetworkX write_graph6用法及代碼示例
- Python NetworkX DiGraph.__contains__用法及代碼示例
- Python NetworkX average_degree_connectivity用法及代碼示例
- Python NetworkX eulerian_circuit用法及代碼示例
- Python NetworkX single_source_dijkstra_path_length用法及代碼示例
- Python NetworkX from_dict_of_dicts用法及代碼示例
- Python NetworkX weisfeiler_lehman_subgraph_hashes用法及代碼示例
- Python NetworkX transitive_closure_dag用法及代碼示例
- Python NetworkX intersection用法及代碼示例
- Python NetworkX MultiGraph.size用法及代碼示例
- Python NetworkX Graph.size用法及代碼示例
注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.community.louvain.louvain_communities。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。