日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【复杂网络】【社区发现】算法Louvain_FastUnfloding

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【复杂网络】【社区发现】算法Louvain_FastUnfloding 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
社區發現算法Louvain Fast unfolding of communities in large networks

一、社區發現

將復雜網絡劃分為若干個組,組內節點連接稠密,組間節點連接稀疏。這些組稱為社區(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?表示節點iiijjj之間邊的權重;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,jj,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=[2min?+2ki,in???(2mtot?+ki??)2]?[2min???(2mtot??)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 [2min???(2mtot??)2]+[0?(2mki??)2]=2min???(2mtot??)2?(2mki??)2

3. 優點

  • 速度快
  • 能發現社區的層次結構

總結

以上是生活随笔為你收集整理的【复杂网络】【社区发现】算法Louvain_FastUnfloding的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。