泛运筹理论初探——Louvain算法简介
圖論-圖論算法之Louvain
社區發現算法簡介之Louvain算法
????在本次文章中,我們將會介紹經典的社區發現方法,也就是Louvain算法。這種算法在社群發現等應用的效果較好,是比較經典的圖挖掘類算法,在金融風控行業挖掘詐騙團伙等應用里有比較顯著的效果。社區發現方法的目標是在整個圖里面發現一些有聚集性特征的群體,這些群體的特征是內部的互相聯系較為緊密,外部和其他點的聯系較為稀疏。下面我們對算法思路和步驟進行介紹。
????Louvain算法的核心就是模塊度的計算,它每一次將模塊度變化更大的鄰居團伙作為當前點的目標團伙,反復計算迭代后可以得到最終的社團發現結果。其中模塊度的計算公式如下所示,我們發現其中A其實就是全圖的鄰接矩陣的某個位置的元素,而m其實是A矩陣所有元素的求和結果,這個公式的最后面有一個0-1函數,它的作用是如果兩個點不屬于同一個社區,那么將設置Q值為0,也就是不需要計算。
????在得到了模塊度的公式后,我們進一步求模塊度的變化結果,也就是計算當新的點加入到社區的時候,對于原有兩個社區的變化,而公式也是用新的模塊度Q值去減去原有兩個舊的模塊度Q值,經過化簡后得到下述的式子。其中K(i,in) 指的是當前社區內部的所有節點和新的節點i所連接的邊的權值之和;而K(i) 則是所有和節點i直接相連的邊的權值之和;Σtot 的含義是當前社區邊內部的權重之和再加上當前社區和其他社區相連接的邊的權值之和的結果。
????根據上述的公式,我們只需要不斷的計算模塊度變化值就可以了,直到迭代計算的次數達到了最大上限的次數,或者整體的模塊度已經不發生變化的時候就可以結束算法。那么根據上述公式和思路,我們總結的Louvain算法步驟如下:
????1)初始化參數設置,比如最大迭代次數,每個點的模塊度初始值等參數。
????2)遍歷每個節點,比較每個節點和周圍相鄰社區(最開始周圍社區是節點,后續的迭代中可能變成多個點聚集的社區),計算當前節點和周圍社區的模塊度變化,也就是ΔQ,將每個節點加入到模塊度大于0并且具有最大模塊度增量的社區之中,如果周圍的社區計算得到的模塊度增量都是小于0的,則無需操作,保留當前節點并且不加入到任意社區中。
????3)對上一步驟得到的結果進行重構,也就是將各個社區重新合并,把原有的圖轉化為新的超圖,可以認為新的社區是一個大的“節點”,而兩個大的“節點”之間的邊的權重就是社區內部所有節點互相的邊的距離權重之和,從而構建新的超圖后,再次進行迭代計算模塊度變換。
????4)反復重復上述步驟后,直到整體的模塊度不再變化或者達到了最大的迭代次數后,停止該算法。
????總的來說,本文提及的Louvain算法是比較經典和實用的算法,在真實場景中經常被使用,因為它本身的原理比較經典,而且算法的核心思路是符合圖自身結構的聚類趨勢的,但是需要注意的是Louvain算法針對的是無向圖,如果是有向圖則無法使用,或者盡量弱化為無向圖。Louvain算法是初學者需要掌握的,可以幫助在后續學習其他算法的過程中打好基礎,并且解決真實應用里的問題。
總結
以上是生活随笔為你收集整理的泛运筹理论初探——Louvain算法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1到10选一个数字读心术_厉害了!quo
- 下一篇: 江阳职高计算机应用教改实验,计算机应用课