社區發現(Community Detection)


轉載自:https://blog.csdn.net/itplus/article/details/9286905

Community Detection

社區發現(Community Detection)算法用來發現網絡中的社區結構,也可以視為一種廣義的聚類算法

研究背景

復雜網絡是復制系統的抽象,現實中許多復雜系統都可以用復雜網絡的相關特性進行描述和分析。

網絡中的節點表示系統中的個體,邊表示個體之間的關系。

例如:

  • 社會關系網絡
  • 食物鏈
  • 萬維網

對復雜網絡的研究一直是許多領域的研究熱點,其中社區結構是復雜網絡中的一個普遍特征,整個網絡是由許多個社區組成的。

社區發現(community detection)是一個復雜而有意義的過程,它對研究復雜網絡的特性具有重要作用。近幾年,發現及分析復雜網絡中的社區結構得到了許多學者的關注,同時也出現了很多社區發現算法。

什么是社區?

社區是一個比較含糊的概念,只給出了一個定性的刻畫。

A commuity is a subgraph containing nodes which are more densely linked to each other than to the rest of the graph or equivalently, a graph has a community structure if the number of links into any subgraph is higer than the number of links between those subgraphs.

社區是一個子圖,它包含比圖的其余部分或更緊密地彼此緊密鏈接的節點,如果進入任何子圖的鏈接數大於這些子圖之間的鏈接數,則圖具有社區結構。

需要注意的是,社區是一個子圖,包含頂點和邊。

數學描述

設圖\(G = G(V,E)\),所謂社區發現是值在圖G中確定\(nc (\ge 1)\)個社區

\[c = \{C_1,C_2,...,C_{nc}\} \]

使得各社區的頂點幾何構成V的一個覆蓋。

若任意兩個社區的頂點幾何的交集均為空,則稱\(C\)為非重疊社區,否則稱為重疊社區。

image-20200924164142876

重疊社區:

image-20200924164256840

建模方法

以新浪微博用戶對應的網絡圖為例,來介紹相應的社區發現算法。

微博環境中的可用信息:

  • 微博內容
  • 地理位置
  • 畢業院校
  • 標簽
  • 關注、粉絲

image-20200924164356902

基本假設:

如果兩個微博用戶之間的互動越頻繁,那么他們之間的社交關系就越密切,而密切的社交關系往往蘊含着潛在的興趣關聯或較強的線下社交關系。

生成網絡圖:

  • 用戶當節點
  • 相互關注的用戶之間建立邊

這里在相互關注的用戶之間建立連接關系,主要是為了簡化模型,此時對應的圖為無向圖。

當然,我們也可以采用單向關注來建邊,此時將對應有向圖。

算法介紹

已有算法

image-20200924164652755

質量評估

不同的社區發現算法將得到不同的社區分划結果。

modularity

對於無向圖,Newman和Girvan於2004年提出了modularity的概念。

所謂modularity是指網絡中連接社區結構內部頂點的邊所占的比例與另外一個隨機網絡中連接社區結構內部頂點的邊所占比例的期望值相減得到的差值。

這個定義看起來很拗口,但通過層層推導,可以得到如下的數學表達式。定義中的隨機網絡也稱為Null Model,構造方法為:

the null model used has so far been a random graph with the same number of nodes, the same number of edges and the same degree distribution as in the original graph, but with links among nodes randomly placed.

到目前為止,所使用的空模型是一個隨機圖,其具有與原始圖相同的節點數,相同的邊數和相同的度數分布,但是節點之間的鏈接是隨機放置的。

計算公式:

\[Q = \sum\limits_{c\in c}(\frac{l_c}{m} - (\frac{D_c}{2m})^2) \]

  • \(m\):圖中總邊數

  • \(l_c\):社區c中所有內部邊的條數

  • \(D_c\):社區c中所有頂點的度之和,也可寫成

    \[D_c = 2l_c + O_c \]

    其中\(O_c\)是社區c與其他社區之間的邊。

對於重疊型社區划分,也可定義相應的modularity。

注意,上述公式是針對無向圖的,因此這里的 m 表示無向邊的條數,即若節點 i 和節點 j 有邊相連,則節點 (i, j) 對 m 只貢獻一條邊

LPA

LPA(Label Propagation Algorithm)由Usha Nandini Raghavan等人於2007年提出。算法描述如下:

  • 用不同的標簽初始化節點,例如:\(\forall n \in V: c_n = l_n\).
  • 將每個節點的標簽設置為其大多數鄰居共享的標簽,例如:\(\forall n \in V:c_n = \mathop{argmax}\limits_k \sum\limits_{m\in N^k_n}\delta_{nm}\).
  • 如果未收斂,則繼續執行上一步.

標簽傳播算法(LPA)的做法比較簡單:

第一步: 為所有節點指定一個唯一的標簽;

第二步: 逐輪刷新所有節點的標簽,直到達到收斂要求為止。

對於每一輪刷新,節點標簽刷新的規則如下:

對於某一個節點,考察其所有鄰居節點的標簽,並進行統計,將出現個數最多的那個標簽賦給當前節點。當個數最多的標簽不唯一時,隨機選一個。

注:算法中的記號$ N_n^k$ 表示節點 n 的鄰居中標簽為 k 的所有節點構成的集合。

具體LPA內容可見 鏈接

SLPA

SLPA(Speaker-listener Label Propagation Algorithm)由 JieruiXie 等人於 2011年提出。

SLPA是一種重疊型社區發現算法,其中涉及一個重要閾值參數r,通過r的適當選取,可將其退化為非重疊型。

image-20200924171530685

SLPA 中引入了 ListenerSpeaker 兩個比較形象的概念,可以這么來理解:在刷新節點標簽的過程中,任意選取一個節點作為 listener,則其所有鄰居節點就是它的 speaker 了,speaker 通常不止一個,一大群 speaker 在七嘴八舌時,listener 到底該聽誰的呢?這時我們就需要制定一個規則。

在 LPA 中,我們以出現次數最多的標簽來做決斷,其實這就是一種規則。只不過在 SLPA 框架里,規則的選取比較多罷了(可以由用戶指定)。

當然,與 LPA 相比,SLPA 最大的特點在於:它會記錄每一個節點在刷新迭代過程中的歷史標簽序列(例如迭代 T 次,則每個節點將保存一個長度為 T 的序列,如上圖所示),當迭代停止后,對每一個節點歷史標簽序列中各(互異)標簽出現的頻率做統計,按照某一給定的閥值過濾掉那些出現頻率小的標簽,剩下的即為該節點的標簽(通常有多個)。

HANP

HANP(Hop Attenuation & Node Preference)算法由lan X.Y. Leung等人於2009年提出的,基本思想是:

  1. 為各標簽引入score值來刻畫其傳播能力,傳播能力隨着傳播距離的增大而減弱。
  2. 一個節點從其鄰居接收標簽時,綜合考慮各標簽的傳播能力、出現頻率、度(對於帶權圖還可以考慮權)等因素。

接收標簽規則:

\[c_n = \mathop{argmax}\limits_{l}\sum\limits_{i\in N_n^l} s_if_i^\alpha w_{ni} \]

score衰減規則:

\[s_n = (\mathop{max}\limits_{i \in N_n^{c_n}}s_i) - \delta \]

其中\(\delta\)為衰減因子,當score的值小於等於0時,標簽停止傳播。

BMLPA

BMLPA(Balanced Multi-Label Propagation Algorithm)由武志昊等人於2012年提出,其基本思想為:

對每個節點所能歸屬的community個數不作限制,只要求同一節點的標簽具有平衡的歸屬系數。

image-20200924174144488

這里對上面的圖做個簡單介紹:帶問號的節點是待確定標簽的節點,黑色實心點為其鄰居節點,它們的標簽是已知的,注意標簽均是由二元數對的序列構成的,序列中每一個元素的第一個分量表示其標簽,第二個分量表示該節點屬於該標簽對應社區的可能性(或者說概率,叫做 belonging coefficent),因此對於每個節點,其概率之和等於1。

按照以下步驟來確定帶問號節點的標簽:

  1. 獲取鄰居節點中所有的互異(distinct) 標簽列表,並累加相應的 belonging coefficent 值。

  2. 對 belonging coefficent 值列表做歸一化,即將列表中每個標簽的 belonging coefficent 值除以 C1 (C1 為列表中 belonging coefficent 值的最大值)。

  3. 過濾。若列表中歸一化后的 belonging coefficent 值(已經介於 0,1 之間)小於某一閥值 p (事先指定的參數),則將對應的二元組從列表中刪除。

  4. 再一次做歸一化。由於過濾后,剩余列表中的各 belonging coefficent 值之和不一定等於 1,因此,需要將每個 belonging coefficent 值除以 C2 (C2 表示各 belonging coefficent 值之和)。

​ 經過上述四步,列表中的標簽即確定為帶問號節點的標簽。

其他的算法以后再整理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM