基于模块度的社团检测算法
一、CNM算法
該算法是基于貪婪算法思想的社團結構檢測算法,該算法的計算復雜度為O(nlog2^22n),算法代碼可以從網上搜到。CNM算法采用堆數據結構計算和更新模塊度,具體描述如下:
(1)初始化:初始時假設每個節點就是一個獨立的社團,模塊度值Q=0,初始的eij_{ij}ij?、ai_ii?計算如下:
初始的模塊增量矩陣的元素計算如下:
得到初始的模塊度增量矩陣后,就可以得到由它每一行的最大元素構成的最大堆H。
(2)從最大堆中選擇最大的Δ\DeltaΔQij_{ij}ij?,合并相應的社團i和j,標記合并后的社團的標號為j,并更新模塊度增量矩陣Δ\DeltaΔQij_{ij}ij?,最大堆H和輔助向量ai_ii?。
Δ\DeltaΔQij_{ij}ij?的更新:刪除第i行和第i列的元素,更新第j行和第j列的元素,得到:
最大堆H的更新:更新最大堆中相應的行和列的最大元素。
輔助向量ai_ii?的更新:aj,_j^,j,?=ai_ii?+aj_jj?,ai,_i^,i,?=0。記錄合并以后的Q=Q+Δ\DeltaΔQij_{ij}ij?。
(3)重復步驟(2)直到網絡中所有節點都歸到一個社團內。
當模塊度增量矩陣中最大的元素由正變負時就可以停止合并,并認為此時的結果就是網絡的社團結構。
二、層次化社團檢測
大規模實際網絡中的節點往往具有不同層次的組織結構,大社團內部可能含有較小規模的社團,較小規模社團內部可能又包含更小規模的一些社團,如下圖所示:
基于模塊度的概念人們提出了一種能夠用于加權網絡的層次化社團結構的凝聚算法,簡稱BGLL算法,算法分為兩個階段:
(1)初始時假設每個節點都是一個獨立的社團。對任意相鄰的節點i和節點j,計算將節點i加入其鄰居節點j所在的社團(記為社團C)時對應的模塊度增量Δ\DeltaΔQ:
其中si,in_{i,in}i,in?是節點i與社團C內其它節點所有連邊的權重和。
計算節點i與所有鄰居節點的模塊度增量,然后選出其中最大的一個。當該值為正時,把節點i加入相應的鄰居節點所在的社團,否則,節點i留在原社團中。這種社團合并過程重復進行,直到不在出現合并現象,這樣就劃分出了第一層社團。
(2)構造一個新網絡,其中的節點是前一階段劃分出的社團,節點之間的連邊權重是兩個社團之間所有連邊的權重和。然后再利用(1)中的方法對新網絡進行社團劃分,得到第二層社團結構,以此類推,直到不能劃分出更高一層的社團結構為止。
三、多片網絡社團檢測
1、定義
模塊度的概念可以推廣同于隨時間演化的動態網絡、具有多種連接形式的多元網絡以及具有不同尺度社團結構的過尺度網絡。一種統一的處理辦法就是把這些網絡表示為如下圖所示的多片網絡。其中,同一片上的節點之間的連接用實線表示,位于不同片的同一個節點之間用虛線連接。
根據片與片的關系,可以把多篇網絡分為兩類:
(1)各片之間有先后次序關系的多片網絡,典型例子包括隨時間演化的組織內部成員之間的關系網絡。
(2)各片之間并無先后次序關系的多片網絡。典型例子包括一群個體之間基于不同的關系類型定義而得到的不同的關系網絡。
2、多片加權網絡的模塊度公式
第p片上節點i與節點j之間的連接權重記為wijp_{ijp}ijp?,第p片網絡上的節點i與第q片網絡上的節點i之間的連接的權重記為cipq_{ipq}ipq?。定義第p片上的節點i的三種強度如下:
片上強度:
片間強度:
總強度:
第p片上所有節點的強度之和記為Wρ_\rhoρ?=∑i\sum_i∑i?sip_{ip}ip?,所有片上所有節點的總強度之和記為:
由上可得,多片加權網絡的模塊度公式如下:
其中λp\lambda_pλp?是用來控制各片網絡內社團劃分規模和數量的分辨率系數。理論上說,方括號中的第二項也可以添加一個表示片間耦合的分辨路參數因子,但是這個參數可以包含到片間節點的連邊權重cipq_{ipq}ipq?的取值中,通常取值為0(沒有連接)或者取為ω\omegaω>0。
四、空間網絡社團檢測
為了更有效的研究空間網絡的社團結構,我們再看以下模塊度的原始定義:
其中pij_{ij}ij?是零模型中節點i和節點j之間連邊數的期望值,并且對于通常選取的保持度序列不變的配置模型有:
為了考慮空間的影響,可以把上式修改為:
其中Ni_ii?是度量節點i的重要性,dij_{ij}ij?是節點i和節點j之間的物理距離。由于相隔一定距離的節點之間的總的權值應保持不變,即有
因此,障礙函數具有如下形式:
總結
以上是生活随笔為你收集整理的基于模块度的社团检测算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 社团结构与模块度
- 下一篇: 除了基于模块度之外的其它社团检测算法