【复杂网络】【社区发现】算法Louvain_FastUnfloding
一、社區發現
將復雜網絡劃分為若干個組,組內節點連接稠密,組間節點連接稀疏。這些組稱為社區(Community),將復雜網絡劃分為社區的過程稱為社區發現(Community Detection)。
二、社區發現效果度量----模塊度(Modularity)
模塊度(modularity)用來評估一個網絡劃分的質量,其取值范圍介于-1至1間。在加權網絡中,模塊度的定義為
Q=12m∑i,j[Aij?kikj2m]δ(ci,cj)δ(u,v)={1ifu==v0elseQ=\frac{1}{2m}\sum_{i,j}\Big[A_{ij}-\frac{k_i k_j}{2m}\Big]\delta(c_i,c_j) \\ \delta(u,v)= \begin{cases}1\quad \text{if}\;u==v\\ 0 \quad \text{else} \end{cases} Q=2m1?i,j∑?[Aij??2mki?kj??]δ(ci?,cj?)δ(u,v)={1ifu==v0else?
其中,AijA_{ij}Aij?表示節點iii和jjj之間邊的權重;ki=∑jAijk_i=\sum_{j}A_{ij}ki?=∑j?Aij?表示所有與iii相連邊的權重之和;cic_ici?是頂點iii所屬社區;m=12∑ijAijm=\frac{1}{2}\sum_{ij}A_{ij}m=21?∑ij?Aij?表示所有邊權重之和。
為了簡明的介紹模塊度的含義,這里對QQQ進行一些簡單的推斷
Q=12m∑i,j[Aij?kikj2m]δ(ci,cj)=12m[∑i,jAi,j?∑i,jkikj2m]δ(ci,cj)=12m[∑i,jAi,jδ(ci,cj)?∑i,jkikj2mδ(ci,cj)]\begin{aligned} Q&=\frac{1}{2m}\sum_{i,j}\Big[A_{ij}-\frac{k_i k_j}{2m}\Big]\delta(c_i,c_j)\\ &=\frac{1}{2m}\Big[\sum_{i,j}A_{i,j}-\sum_{i,j}\frac{k_ik_j}{2m}\Big]\delta(c_i,c_j)\\ &=\frac{1}{2m}\Big[\sum_{i,j}A_{i,j}\delta(c_i,c_j)-\sum_{i,j}\frac{k_ik_j}{2m}\delta(c_i,c_j)\Big] \end{aligned} Q?=2m1?i,j∑?[Aij??2mki?kj??]δ(ci?,cj?)=2m1?[i,j∑?Ai,j??i,j∑?2mki?kj??]δ(ci?,cj?)=2m1?[i,j∑?Ai,j?δ(ci?,cj?)?i,j∑?2mki?kj??δ(ci?,cj?)]?
其中
- kikj2m\frac{k_ik_j}{2m}2mki?kj??表示在保持所有節點度不變情況下,隨機進行邊連接后,節點iii和節點jjj間邊的期望數;
- ∑i,jAi,jδ(ci,cj)\sum_{i,j}A_{i,j}\delta(c_i,c_j)∑i,j?Ai,j?δ(ci?,cj?)表示社區內部邊權重之和的2倍;(因為i,ji,ji,j和j,ij,ij,i都會被計數進來)
- ∑i,jkikj2mδ(ci,cj)\sum_{i,j}\frac{k_ik_j}{2m}\delta(c_i,c_j)∑i,j?2mki?kj??δ(ci?,cj?)表示隨機情況下社區內部邊權重之和的2倍;
- 12m∑i,jAi,jδ(ci,cj)\frac{1}{2m}\sum_{i,j}A_{i,j}\delta(c_i,c_j)2m1?∑i,j?Ai,j?δ(ci?,cj?)表示社區內部邊權重占總權重的比例;
- 12m∑i,jkikj2mδ(ci,cj)\frac{1}{2m}\sum_{i,j}\frac{k_ik_j}{2m}\delta(c_i,c_j)2m1?∑i,j?2mki?kj??δ(ci?,cj?)表示隨機情況下社區內部邊權重占總權重的比例;
- 模塊度的直觀理解:“社區內部邊的權重比例”減去“隨機放置邊情況下社區內部邊的權重比例”。內部權重比例越高,則表示社區內部的連接越緊密。此外,我們劃分的社區越好,則權重占比與隨機情況的差距也越大。
三、社區發現算法分類
- 分裂式社區發現算法:從網絡中刪除邊,從而形成社區;
- 遞歸聚合式社區發現算法:將相似節點進行合并,從而形成社區;
- 目標函數優化式社區發現算法:將社區發現看作是目標函數優化問題;
四、Louvain算法的流程
1. 目的
在Louvain之前的社區發現算法的速度太慢,或者速度快但效果不好。這導致社區發現算法很難應用在規模巨大的網絡上。Louvain作者發現許多大型網絡天然具有層次結構,并基于這個特性設計了Louvain算法。
2. 步驟
- (1). 將網絡中所有的節點看作是獨立的社區,此時社區數目與節點數目相等;
- (2). 對圖中的每個節點iii,依次嘗試將其分配到相鄰節點所在社區,并計算分配前后模塊度的變化ΔQ\Delta QΔQ,并記錄下最大的ΔQ\Delta QΔQ;
- (3). 若最大的ΔQ>0\Delta Q>0ΔQ>0,則把節點iii分配值最大ΔQ\Delta QΔQ所對應鄰居的社區;否則,保持不變;
- (4). 若所有節點的社區均保持穩定,則進入下一步;否則,轉至(2);
- (5). 將網絡中的每個社區看作是新節點,社區內節點間權重轉換為新節點的環權重,社區間權重轉換為新節點間邊的權重,從而形成新的網絡;
- (6). 轉至(1),直至模塊度不再變化;
為了更加簡潔的表示ΔQ\Delta QΔQ,這里對模塊度QQQ進行一些符號上的簡化
Q=12m[Σin?12mΣtot2]Q=\frac{1}{2m}\Big[\Sigma_{in}-\frac{1}{2m}\Sigma_{tot}^2\Big] Q=2m1?[Σin??2m1?Σtot2?]
其中,Σin=∑i,jAi,jδ(ci,cj)\Sigma_{in}=\sum_{i,j}A_{i,j}\delta(c_i,c_j)Σin?=∑i,j?Ai,j?δ(ci?,cj?),表示社區內部邊權重之和;Σtot2=∑i,jkikjσ(ci,cj)\Sigma_{tot}^2=\sum_{i,j}k_ik_j\sigma(c_i,c_j)Σtot2?=∑i,j?ki?kj?σ(ci?,cj?)表示連接至社區CCC的所有權重之和。
那么移動節點iii至社區CCC帶來的模塊度變化ΔQ\Delta QΔQ就可以表示為
ΔQ=[∑in+2ki,in2m?(∑tot+ki2m)2]?[∑in2m?(∑tot2m)2?(ki2m)2]\Delta Q=\Big[\frac{\sum_{in}+2k_{i,in}}{2m}-(\frac{\sum_{tot}+k_i}{2m})^2 \Big]-\Big[\frac{\sum_{in}}{2m}-(\frac{\sum_{tot}}{2m})^2-(\frac{k_i}{2m})^2\Big] ΔQ=[2m∑in?+2ki,in???(2m∑tot?+ki??)2]?[2m∑in???(2m∑tot??)2?(2mki??)2]
其中,ki,ink_{i,in}ki,in?表示從節點iii連接至CCC中節點的權重和。ΔQ\Delta QΔQ的第一項表示將節點iii移入社區CCC后的模塊度,第二項則表示將節點iii作為獨立社區的模塊度。第二項是下面等式的化簡結果
[∑in2m?(∑tot2m)2]+[0?(ki2m)2]=∑in2m?(∑tot2m)2?(ki2m)2[\frac{\sum_{in}}{2m}-(\frac{\sum_{tot}}{2m})^2]+[0-(\frac{k_i}{2m})^2] = \frac{\sum_{in}}{2m}-(\frac{\sum_{tot}}{2m})^2-(\frac{k_i}{2m})^2 [2m∑in???(2m∑tot??)2]+[0?(2mki??)2]=2m∑in???(2m∑tot??)2?(2mki??)2
3. 優點
- 速度快
- 能發現社區的層次結構
總結
以上是生活随笔為你收集整理的【复杂网络】【社区发现】算法Louvain_FastUnfloding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 幼小衔接语言教案上c册_关于幼小衔接,这
- 下一篇: 修改chrome记住密码后自动填充表单的