轉自:感謝分享!https://zhuanlan.zhihu.com/p/29380602
詳細解釋見: www.cnblogs.com/fengfenggirl
Louvain算法其實是基於層次聚類的,圖聚類。層次聚類依據是類間距更大,Louvain算法圖聚類依據是模塊度(公式在下方)。
Louvain算法包括兩個階段,迭代這兩個階段。
1不斷地遍歷網絡中的結點,假設每個節點為1個社區,N個節點,初始化N個社區,嘗試將單個結點加入能夠使模塊度提升最大的社區中,直到所有結點都不再變化。
模塊度提升的定義如下:
前項代表的意思為結點加入鄰居社區后,社區內內所有邊
后項代表着結點加入鄰居社區后,社區所有邊(包括內部邊,以及連接外部的邊)
目的是變化后希望子社區內邊,外邊少,即更聚集。
但是為什么后項要所有邊呢?因為后項帶了懲罰項的意思,沒有懲罰項的話把所有都分成一個社區都分成一起就最大了。
2它處理第一階段的結果,將一個個小的社區歸並為一個超結點來重新構造網絡。它的執行流程如圖所示:
迭代這兩個步驟直至算法穩定(所有子社區模塊度相加值不變)。
前項代表的意思為子社區內所有邊,后項代表着子社區社區所有邊(包括內部邊,以及連接外部的邊)。
模塊度就是希望子社區內邊,外邊少,即更聚集。