newman演算法
① 社區檢測—GN(Girvan-Newman)演算法及其實現
在探討社區檢測這一重要領域時,我們將聚焦於一種經典演算法,即GN(Girvan-Newman)演算法及其實現。社區檢測,作為網路分析的核心任務之一,在大規模網路如在線社交平台中尤為重要。在面對數以百萬計的節點和邊時,有效劃分網路為多個緊密相連的社區成為可能的挑戰。
社區的定義在圖論中,是指節點的子集,這些節點之間緊密相連,而與其他社區的節點聯系較為鬆散。因此,社區檢測演算法對於理解網路結構,揭示潛在的組織模式至關重要。
社區檢測方法主要分為兩大類:凝聚方法與分裂方法。凝聚方法自空圖開始,逐步將邊添加到圖中,優先考慮強邊。分裂方法則相反,從完整的圖開始,迭代地移除邊,尤其是權重最大的邊。Girvan-Newman演算法即代表了分裂方法的典型應用。
在Girvan-Newman演算法中,社區的發現基於邊介數中心性(Edge Betweenness Centrality,EBC)的計算。該值衡量了網路中通過一條邊的最短路徑的數量,有助於識別關鍵連接節點的邊,進而通過移除這些邊來揭示潛在的社區結構。
計算EBC分數涉及一個迭代過程,首先需要識別網路中所有節點間的最短路徑。以一個示例圖為例,我們可以從任意節點出發,計算該節點與網路中所有其他節點間的最短路徑數量,以此為基準給邊分配EBC分數。
分配分數的步驟包括從根節點開始遍歷整個圖,計算節點分數後,再對剩餘節點重復此過程,最終得到網路中所有邊的分數。這些分數用於評估邊的連接重要性,為後續的社區劃分提供依據。
在Girvan-Newman演算法中,我們基於EBC分數的計算結果,迭代地移除得分最高的邊,直至圖分裂為多個獨立的子圖。這些子圖即為識別出的社區。
為了實現Girvan-Newman演算法,Python提供了一種直觀且高效的解決方案。藉助於相應的庫,如NetworkX,用戶可以輕松構建和分析復雜網路,實現演算法的關鍵步驟,包括EBC分數的計算與社區的劃分。
本文旨在提供一個簡潔的框架,展示Girvan-Newman演算法在社區檢測領域的應用及其實現方法。通過理解演算法的核心原理與實踐過程,讀者能夠更深入地探索網路分析的復雜性和多樣性。
② 社區檢測演算法(Community Detection)
社區檢測(community detection)又被稱為是社區發現,它是用來揭示網路聚集行為的一種技術。社區檢測實際就是一種網路聚類的方法,這里的「社區」在文獻中並沒有一種嚴格的定義,我們可以將其理解為一類具有相同特性的節點的集合。
近年來,社區檢測得到了快速的發展,這主要是由於復雜網路領域中的大牛Newman提出了一種模塊度(molarity)的概念,從而使得網路社區劃分的優劣可以有一個明確的評價指標來衡量。一個網路不通情況下的社區劃分對應不同的模塊度,模塊度越大,對應的社區劃分也就越合理;如果模塊度越小,則對應的網路社區劃分也就越模糊。
下圖描述了網路中的社區結構:
Newman提出的模塊度計算公式如下:
所以模塊度其實就是指一個網路在某種社區劃分下與隨機網路的差異,因為隨機網路並不具有社區結構,對應的差異越大說明該社區劃分越好。
Newman提出的模塊度具有兩方面的意義:
(1)模塊度的提出成為了社區檢測評價一種常用指標,它是度量網路社區劃分優劣的量化指標;
(2)模塊度的提出極大地促進了各種優化演算法應用於社區檢測領域的發展。在模塊度的基礎之上,許多優化演算法以模塊度為優化的目標方程進行優化,從而使得目標函數達到最大時得到不錯的社區劃分結果。
當然,模塊度的概念不是絕對合理的,它也有弊端,比如解析度限制問題等,後期國內學者在模塊度的基礎上提出了模塊度密度的概念,可以很好的解決模塊度的弊端,這里就不詳細介紹了。
常用的社區檢測方法主要有如下幾種:
(1)基於圖分割的方法,如Kernighan-Lin演算法,譜平分法等;
(2)基於層次聚類的方法,如GN演算法、Newman快速演算法等;
(3)基於模塊度優化的方法,如貪婪演算法、模擬退火演算法、Memetic演算法、PSO演算法、進化多目標優化演算法等