圖數據挖掘:重疊和非重疊社區檢測算法


最近需要學習圖結構中的社區檢測算法,在閱讀相關論文的同時跟了Stanford CS246: Mining Massive Datasets課程[1]的第11講Community Detection in Graphs,以下是我做的筆記。

1. 網絡和社區(networks & communities)

我們通常認為網絡中存在某種模塊(modules)/簇(clusters)/社區(communitis)結構,我們常常需要從網絡中提取這些結構。

遷移學習和多任務學習之間的區別

而提取這些結構的關鍵在於發現密集連接的簇,而這常常可以轉化為一個優化關於簇的目標函數的問題,即所謂最小化類簇之間的邊數或最大化簇的質量(例如后面提到的模塊度)。這類算法我們通常稱為社區檢測(community detection) [2]算法。社區檢測算法和傳統聚類算法的主要不同點在於:社區檢測算法更關注節點分布的密度,且無需設置簇的先驗個數\(k\),可以重疊划分。

不過,兩者的界限沒那么明顯。比如在普通的聚類算法中也有不需要指定先驗類簇數\(k\)、考察樣本分布緊密程度的DBSCAN密度聚類算法[3],該算法可以看做社區檢測算法思想的雛形。還有一點細節需要注意,社區檢測中節點之間權重越大越容易划分到一起,傳統聚類算法中距離越小越容易划分到一起,正好是反着的。

2.重疊(overlapping)和非重疊(non-overlapping)社區檢測

按照圖的社區划分之間是否重疊,可分為重疊社區檢測和非重疊社區檢測。非重疊社區檢測是指圖的社區划分之間沒有重疊,而重疊社區檢測則允許有重疊。

遷移學習和多任務學習之間的區別

3.基於conductance(電導)的圖划分方法

3.1 割分數(cut score)

設有一個無向圖\(G(V,E)\),我們將其節點划分為兩個組\(A, B\),其中\(B = V\backslash A\),我們如何判斷我們划分的質量呢?

我們運用直覺思考,好的划分有什么特性?一般而言,好的划分有兩個特點:

  • 使單個簇內部的連接數量最大化
  • 使不同簇之間的連接最小化
遷移學習和多任務學習之間的區別

接下來我們需要定量地將簇的質量表示為該簇的邊割(edge cut)的函數。邊割是指跨越簇的邊集合,該邊集滿足:如果將該邊集去除,則圖變得不連通。注意,這和割邊(cut edge)是兩碼事。割邊特指跨越簇的一條邊,該邊滿足:如果將該邊去除,則圖變得不連通。也就是說,割邊是去掉一條邊,可以使圖的連通分量個數變大;而邊割則是去掉好幾條邊,可以使圖的連通分量個數變大。

割分數(cut score) 為只有一個節點在簇中的邊的邊權之和(如果為無權圖,則權值計為1)。用公式表達如下:

\[\operatorname{cut}(A)=\sum_{i \in A, j \notin A} w_{i j} \\ (注意,如果為無權圖,則w_{i j}為1) \]

對於下面這張無權圖,則我們有\(cut(A) = 2\):

遷移學習和多任務學習之間的區別

也就是說,對於一個簇\(A\),若\(cut(A)\)越小,則我們說這個簇的質量越好。那么所謂的簇划分,是否意味着我們只需要找到一組能夠時\(cut(A)\)盡量小的節點就可以呢?

光這樣還不夠,因為我們事實上只考慮了簇外部的聯系,但是沒有考慮簇內部的聯系,這樣容易導致很多問題。我們看下面這個退化的情形。很明顯,就下面這張圖而言,紅色的所謂“mimimum cut”確實做到使\(cut(A)\)最小了,但是明顯另外一種划分方法才是我們想要的。

遷移學習和多任務學習之間的區別

那么我們如何進一步考慮到簇內部的聯系呢?這時就要引出簇的volume(體積)和conductance(好像翻譯成電導?)的概念了。

3.2 電導(conductance)

conductance是指一個簇和剩余網絡的聯系,它和這個簇的的密度(體積)有關系。它在某種意義上可以理解為表面積和體積比(surface-to-volume ratio)。直觀地理解,它等於這個簇的割分數除以這個簇自身的密度(體積),這個值越小說明划分得越好
接下來我們再來看conductance這個有點可怕的公式(其實理解了它的意義后就會發現並不可怕):

\[\phi(A)=\frac{|\{(i, j) \in E ; i \in A, j \notin A\}|}{\min (\operatorname{vol}(A), 2 m-\operatorname{vol}(A))} \]

此公式中\(m\)指圖中邊的數量,\(2m\)即圖中所有點的度數之和,\(E\)指圖的邊集。\(vol(A)\)定義為簇\(A\)中所有點的度之和:

\[\begin{aligned} vol(A) &= \sum_{i\in A} d_{i} \end{aligned}\\ (這里d_i指節點i的度) \]

(也可以寫作\(vol(A)= 2\cdot \sharp\text{edges inside } A + \sharp \text{edges pointing out of } A\))
\(\phi(A)\)定義式的分母部分實質上就相當於從割邊分開的兩個簇的\(vol\)值中選小的那個。

我們再來用conductance重新審視圖的划分。
很明顯,若我們關注紅色的簇,邊的那種划分方式\(\phi = 2/(3+1)=0.5\)(其中\(2\)為紅色簇跨出去的邊數之和,\(3+1=4\)為紅色簇的度數之和),右邊的那種划分方式\(\phi = 6/92=0.065\),很明顯右邊的那種划分方式更好。

遷移學習和多任務學習之間的區別

根據這個划分標准,有許多論文已經提出了相關的簇划分算法,如[4][5],大家可以參考論文,此處略過不表。

4.基於模塊性(modularity)的圖划分方法

4.1 模塊性

對於一個網絡社區,我們定義其模塊性(modularity)\(Q\)做為一個網絡被划分為社區的好壞度量。給定一個網絡的划分,該划分將網絡划分為由多個組\(s\)組成的集合\(S\),我們有:

\[Q \varpropto \sum_{s\in S}[(\sharp \text{edges within group }s) - (\text{expected }\sharp \text{edges within group } s)] \]

我們給定一個有\(n\)個節點和\(m\)條邊的圖,我們據此構建重布線的(rewired)網絡\(G^{'}\)。該網絡\(G^{'}\)滿足:有同樣的度分布但是有着隨機的邊連接;是多重圖(multigraph)(即允許有多重邊的圖);節點\(i\)(度為\(k_i\))和\(j\)(度為\(k_j\))之間的期望邊數量為:\(k_i \cdot \frac{k_j}{2m} = \frac{k_i k_j}{2m}\)
我們根據以上信息,進一步圖\(G\)被划分為組\(S\)的模塊性寫為

\[Q(G, S)=\frac{1}{2 m} \sum_{s \in S} \sum_{i \in s} \sum_{j \in s}\left(A_{i j}-\frac{k_{i} k_{j}}{2 m}\right) \]

這里\(m\)為一個標准化常數,使得\(-1<Q<1\)\(A_{ij}\)為節點\(i\)和節點\(j\)之間的邊權,若無連接則為0。
如果在簇內部的邊數量超過了其期望的邊數量,則模塊性\(Q\)為正。比\(0.3-0.7\)大的\(Q\)意味着非常重要的社區結構。

等效地,模塊性公式還能夠被寫作:

\[Q=\frac{1}{2 m} \sum_{i j}\left[A_{i j}-\frac{k_{i} k_{j}}{2 m}\right] \delta\left(c_{i}, c_{j}\right) \]

這里\(A_{ij}\)仍然指節點\(i\)\(j\)之間的邊權,\(k_i\)分別\(k_j\)指以節點\(i\)\(j\)做為端點的邊權之和,\(2m\)是凸中所有邊的權值之和,\(c_i\)\(c_j\)是節點組成的社區,\(\delta\)是一個示性函數。此時,我們有一個想法: 我們能夠通過最大化模塊性\(Q\)來識別社區。

4.2 Louvain(魯汶)方法

我們可以采用一個啟發式方法,也就是Louvain方法[6]來解決最大化模塊性的問題。該算法常常用於非重疊(nonoverlapping) 的社區檢測。這個算法是一個貪心算法,時間復雜度為\(O(n log n)\),它支持帶權圖,能夠提供層次化的划分方法(比如我們熟知的層次聚類)。該方法運行效率高、收斂快、輸出結果模塊性高(也即輸出的社區划分質量較好),被廣泛地應用於大規模網絡。
Louvain算法貪心地最大化模塊性,它會進行多輪的迭代,每一輪迭代都由兩個步驟組成:

  • 步驟 1(划分):在只允許對社區做局部改變(local changes)的情況下優化模塊性,得到一個初步的社區划分。
  • 步驟 2(重構):對已划分出的社區做聚合,建立新的社區網絡。

我們接下來詳細地敘述步驟1和步驟2。

步驟1(划分)
對於步驟1,算法先將圖中的每個節點(后面我們會提到算法會將社區也縮為一個超節點)視為一個獨立的社區。然后對每個節點\(i\),算法執行兩步計算:首先,對節點\(i\)的每個鄰居\(j\),計算將\(i\)從其現在的社區中放入\(j\)所在的社區時可獲得的模塊性增益(modularity gain)\(\Delta Q\);然后,將\(i\)移入能夠獲得最大\(\Delta Q\)的社區。

注:


當我們將節點\(i\)移入社區\(C\)中時,其模塊性增益\(\Delta Q\)計算方式如下:

\[\Delta Q(i \rightarrow C)=\left[\frac{\sum_{i n}+k_{i, i n}}{2 m}-\left(\frac{\sum_{t o t}+k_{i}}{2 m}\right)^{2}\right]-\left[\frac{\sum_{i n}}{2 m}-\left(\frac{\sum_{t o t}}{2 m}\right)^{2}-\left(\frac{k_{i}}{2 m}\right)^{2}\right] \]

這里\(\sum_{in}\)\(C\)中所有節點的"簇內"鄰邊(不包括邊割)的邊權進行求和;\(\sum_{tot}\)\(C\)中所有節點的鄰邊(包括邊割)邊權進行求和;\(k_{i, in}\)是節點\(i\)和簇\(C\)之間的所有邊的權重之和;\(k_i\)指節點\(i\)所有鄰邊的權重之和(若權值為1的話就是節點的度)。
同理,我們可以得到\(\Delta Q(D\rightarrow i)\),這表示將節點\(i\)移出社區\(D\)所得的增益。
接下來,我們有\(\Delta Q=\Delta Q(i \rightarrow C)+\Delta Q\left(D\rightarrow i\right)\)


步驟2(重構)
將第一階段中划分而成的社區縮為超節點(super-nodes),然后我們按照以下的步驟來構建新的帶權網絡:如果在兩個社區的節點之間至少有一條邊,那么對應的兩個超節點之間就是連接的;在兩個超節點之間的邊的權值是其對應社區之間所有邊割的權值之和。

最后,我們將Louvain方法用流程示意圖描述如下:

遷移學習和多任務學習之間的區別

5.重疊(overlapping)社區檢測方法

上面我們介紹的Louvain算法是一種用於非重疊(nonoverlapping)社區檢測的方法。然而,有時社區的潛在結構並不明顯,不同的社區之前很可能存在某種關聯。此時,我們就需要采用重疊(overlapping)社區檢測算法了[7]。重疊社區檢測算法包括以下幾個大類:以CPM[8]為代表的Clique Percolation(團滲透)類方法、以LinkComm[9]為代表的的邊划分(Link partition)類方法,以SLPA[10]為代表的動態(dynamic)方法,以LEMON[11]為代表的的種子擴張方法。我們下面介紹LinkComm方法和LEMON方法。

5.1 LinkComm方法

LinkComm方法為典型的采用划分邊來發現社區結構的方法,它基於這樣一個思想:一個在原始圖中的節點是重疊的話,則連接它的邊會被放入大於一個的簇中。

該算法基於和Louvain算法類似的思想,首先迭代地按照邊的相似度進行層次化聚類(即每輪迭代選取相似度最大的一對邊,將它們的社區合並),構造一個層次化聚類的樹狀圖(dendrogram)。如下圖所示:

遷移學習和多任務學習之間的區別

在上圖中,\(a\)為按照節點進行社區划分,\(b\)為按照邊進行社區划分,\(c\)為最后的邊相似度矩陣與邊樹狀圖。

已知邊\(e_{ik}\)和邊\(e_{jk}\)共享節點\(k\),則它們的相似度采用Jaccard index來度量:

\[S\left(e_{i k}, e_{j k}\right)=\frac{\left|n_{+}(i) \cap n_{+}(j)\right|}{\left|n_{+}(i) \cup n_{+}(j)\right|} \]

此處\(n_{+}(i)\)指的是節點\(i\)的鄰居節點(包括節點\(i\)自身)。

邊相似度的計算如下圖所示:

遷移學習和多任務學習之間的區別

A圖中\(S\left(e_{i k}, e_{j k}\right)\)度量了共享節點\(k\)的邊\(e_{ik}\)\(e_{jk}\)之間的距離,\(|n_{+}(i) \cup n_{+}(j)|=12\)\(|n_{+}(i) \cap n_{+}(j)|=4\)\(S=\frac{1}{3}\)。在B圖中,\(S=\frac{1}{3}\)。C圖中\(S=1\)

在非重疊划分中的louvain算法中,層次聚類的停止通常由modularity來決定(如果目前划分結果的modularity不再增加則停止),否則最終會默認聚類為一個社區。modularity雖然廣泛用於非重疊的節點層次化划分操作,但是對於重疊社區卻不好定義。文中采用了一種新的量化方式,即划分密度(partition density)\(D\),來度量邊划分的質量。划分密度沿着聚類樹狀圖會有一個全局最大值,聚類過程就在該處停下。

5.2 Lemon方法

LEMON全稱Local Expansion via Minimum One Norm(最小化一范數的局部擴張),它要解決的問題是:給定圖\(G=(V,E)\),已知少部分節點集合\(S\)以及其所屬社區的划分情況(稱為seed),如何找到這些社區的其他成員?該算法基於seed set expansion(種子集合擴張)的思想,從初始化的幾個seed節點開始逐漸探索其周圍的鄰域。具體而言,是通過尋找局部譜張成空間中的稀疏向量(該稀疏向量使得初始化seed在其支撐集里)來發現社區(該算法可以看做是譜方法[12]基礎上的改進)。注意這種方法可以看 與全局的社區檢測算法[13][14]大不相同。其運行時間由社區大小而不是整個圖決定,該算法易於實現且可高度並行化。

算法分為以下3個步驟:

步驟1(生成局部譜)
使\(\mathbf{\bar{A}}=\mathbf{D}^{-1/2}(\mathbf{A}+\mathbf{I})\mathbf{D}^{-1/2}\)為標准化后的鄰接矩陣(此處\(\mathbf{D}\)為頂點度構成的對角陣)。考慮從\(\mathcal{S}\)節點開始的隨機游走。我們使\(\mathbf{p}_0\)代表初始概率向量(所有概率在seed members間均勻分布)。考慮由\(l\)維概率向量在\(l\)次連續的隨機游走中的張成空間

\[\mathbf{P}_{0, l}=[\mathbf{p}_1,\mathbf{p}_1,...,\mathbf{p}_l] \]

初始化的不變子空間由計算張成空間\(\mathbf{P}_{0, l}\)的正交基獲得,表示為\(\mathbf{V}_{0, l}\),我們接下來使用下列遞推式迭代地計算經過\(k\)次隨機游走的\(l\)維標准正交基

\[\mathbf{V}_{k,l}\mathbf{R}_{k,l}=\mathbf{V}_{k-1, l}\mathbf{\bar{A}} \]

這里\(\mathbf{R}_{k,l}\in \mathbb{R}^{n\times l}\)被選擇來使\(\mathbf{V}_{k,l}\)是正交的。正交基\(\mathbf{V}_{k,l}\)會被用於局部譜聚類。

步驟2 (尋找稀疏向量)

在局部譜\(\mathbf{V}_{k,l}\)的基礎上,我們接下來解決下列線性規划問題[15]

\[\begin{aligned} &\text{min} \quad \mathbf{e}^T\mathbf{y} = ||\mathbf{y}||_1 \\ & s.t. \quad \mathbf{y} = \mathbf{V}_{k,l}\mathbf{x},\\ &\quad\quad \space\space \mathbf{y} \geqslant 0,\\ & \quad\quad \space\space \mathbf{y}(\mathcal{S})\geqslant 1, \end{aligned} \]

這里\(\textbf{e}\)是全1的向量,\(\textbf{x}\)\(\textbf{y}\)都是未知的向量。第一個約束表明\(\textbf{y}\)在空間\(\textbf{V}_{k,l}\)里。\(\textbf{y}\)中的元素表示相應頂點屬於目標社區的可能性,一定是非負的。第三個約束使seed在稀疏向量\(\textbf{y}\)的支撐集里。

在對\(\textbf{y}\)中的元素按照非降序排列后得到向量\(\hat{\textbf{y}}\)\(\hat{\textbf{y}}\)中top的\(|\mathcal{C}|\)個元素對應的節點會被做為和seed 集合\(\mathcal{S}\)相關的檢測出的社區返回。

步驟3(重新播種)

在初始化的seed集合中增加與\(\hat{\textbf{y}}\)中top的\(t\)個元素相對應的節點,將增加后的seed集合表示為\(\mathcal{S}'\)

該算法迭代輪數由終止准則(stop criteria)決定,如果有做為ground truth的社區划分結果,算法會返回F1分數最高的(關於F1分數具體可見第6部分)。

7. 常見社區檢測結果評估方法

7.1 有ground truth情況

F1 score是常見的度量預測的社區\(\mathcal{C}\)和ground truth社區\(\mathcal{C}^*\)相似度的一種方法,\((\mathcal{C}, \mathcal{C}^*)\)的F1 Score定義為:

\[F_{1}\left(\mathcal{C}, \mathcal{C}^{*}\right)=\frac{2 \cdot \operatorname{Precision}\left(\mathcal{C}, \mathcal{C}^{*}\right) \cdot \operatorname{Recall}\left(\mathcal{C}, \mathcal{C}^{*}\right)}{\operatorname{Precision}\left(\mathcal{C}, \mathcal{C}^{*}\right)+\operatorname{Recall}\left(\mathcal{C}, \mathcal{C}^{*}\right)} \]

這里Precision(精度)和recall(召回率)定義為:

\[\operatorname{Precision}\left(\mathcal{C}, \mathcal{C}^{*}\right)=\frac{\left|\mathcal{C} \cap \mathcal{C}^{*}\right|}{|\mathcal{C}|} \\ \operatorname{Recall}\left(\mathcal{C}, \mathcal{C}^{*}\right)=\frac{\left|\mathcal{C} \cap \mathcal{C}^{*}\right|}{\left|\mathcal{C}^{*}\right|} \]

7.2 無ground truth情況

對於非重疊社區,最常見無ground truth評價標准的便是采用上文提到的模塊性modularity了,一般認為modularity在0.3-0.7之間就算是好的划分。此外,對於overlapping划分,也可以采用所謂的划分密度(詳見LinkComm論文[9])。

8. 代碼實現

Louvain算法的代碼的Python開源實現可參見Github項目[16],LinkComm、Lemon等重疊划分方法的Python開源實現可參見Github項目[17]

參考文獻

  • [1] http://www.mmds.org/

  • [2] Girvan M, Newman M E J. Community structure in social and biological networks[J]. Proceedings of the national academy of sciences, 2002, 99(12): 7821-7826.

  • [3] Ester M, Kriegel H P, Sander J, et al. A density-based algorithm for discovering clusters in large spatial databases with noise[C]//kdd. 1996, 96(34): 226-231.

  • [4] Lu Z, Sun X, Wen Y, et al. Algorithms and applications for community detection in weighted networks[J]. IEEE Transactions on Parallel and Distributed Systems, 2014, 26(11): 2916-2926.

  • [5] Staudt C L, Meyerhenke H. Engineering parallel algorithms for community detection in massive networks[J]. IEEE Transactions on Parallel and Distributed Systems, 2015, 27(1): 171-184.

  • [6] Blondel V D, Guillaume J L, Lambiotte R, et al. Fast unfolding of communities in large networks[J]. Journal of statistical mechanics: theory and experiment, 2008, 2008(10): P10008.

  • [7] Xie J, Kelley S, Szymanski B K. Overlapping community detection in networks: The state-of-the-art and comparative study[J]. Acm computing surveys (csur), 2013, 45(4): 1-35.

  • [8] Kumpula J M, Kivelä M, Kaski K, et al. Sequential algorithm for fast clique percolation[J]. Physical review E, 2008, 78(2): 026109.

  • [9] Ahn Y Y, Bagrow J P, Lehmann S. Link communities reveal multiscale complexity in networks[J]. nature, 2010, 466(7307): 761-764.

  • [10] Xie J, Szymanski B K, Liu X. Slpa: Uncovering overlapping communities in social networks via a speaker-listener interaction dynamic process[C]//2011 ieee 11th international conference on data mining workshops. IEEE, 2011: 344-349.

  • [11] Li Y, He K, Bindel D, et al. Uncovering the small community structure in large networks: A local spectral approach[C]//Proceedings of the 24th international conference on world wide web. 2015: 658-668.

  • [12] Ng A, Jordan M, Weiss Y. On spectral clustering: Analysis and an algorithm[J]. Advances in neural information processing systems, 2001, 14.

  • [13] Coscia M, Rossetti G, Giannotti F, et al. Demon: a local-first discovery method for overlapping communities[C]//Proceedings of the 18th ACM SIGKDD international conference on Knowledge discovery and data mining. 2012: 615-623.

  • [14] Lancichinetti A, Radicchi F, Ramasco J J, et al. Finding statistically significant communities in networks[J]. PloS one, 2011, 6(4): e18961.
    MLA

  • [15] GNU linear programming kit.
    http://www.gnu.org/software/glpk.

  • [16] https://github.com/taynaud/python-louvain

  • [17] https://github.com/RapidsAtHKUST/CommunityDetectionCodes


免責聲明!

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



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