關於圖算法 & 圖分析的基礎知識概覽

網址:https://learning.oreilly.com/library/view/graph-algorithms-/9781492060116/node

你確定沒有讀過這本書,由於這本書的發佈日期是2019年5月。本文會覆蓋該書的大部份內容,讀完這篇,你可以瞭解圖算法的基本概念。關於此書,做爲市面上爲數很少的面向數據科學應用的圖算法書籍,寫的比較全面系統和易懂。固然,書在細節上的提升空間還有不少。今天內容不少,坐穩~算法

目錄安全

圖算法 & 圖分析網絡

圖基礎知識dom

連通圖與非連通圖機器學習

未加權圖與加權圖ide

有向圖與無向圖模塊化

非循環圖和循環圖工具

圖算法學習

路徑搜索算法

DFS & BFS

最短路徑

最小生成樹

隨機遊走

中心性算法

DegreeCentrality

ClosenessCentrality

BetweennessCentrality

PageRank

社羣發現算法

MeasuringAlgorithm

ComponentsAlgorithm

LabelPropagation Algorithm

LouvainModularity Algorithm

結論

圖算法 & 圖分析

圖分析使用基於圖的方法來分析鏈接的數據。咱們能夠:查詢圖數據,使用基本統計信息,可視化地探索圖、展現圖,或者將圖信息預處理後合併到機器學習任務中。圖的查詢一般用於局部數據分析,而圖計算一般涉及整張圖和迭代分析。

圖算法是圖分析的工具之一。圖算法提供了一種最有效的分析鏈接數據的方法,它們描述瞭如何處理圖以發現一些定性或者定量的結論。圖算法基於圖論,利用節點之間的關係來推斷複雜系統的結構和變化。咱們可使用這些算法來發現隱藏的信息,驗證業務假設,並對行爲進行預測。

圖分析和圖算法具備普遍的應用潛力:從防止欺詐,優化呼叫路由,到預測流感的傳播。下圖是 Martin Grandjean 建立的航線網絡圖,這幅圖清楚地展現了航空運輸集羣高度鏈接的結構,幫助咱們瞭解航空運力如何流動。航線網絡採用典型的輻射式結構(hub-and-spoke structure),這樣的結構在有限運力的前提下,增大了航線的網絡的始發-到達對(OD Pair),然而卻也帶來了系統級聯延遲的可能。

 

圖基礎知識

咱們已經在前一篇博文中介紹了屬性圖的概念。咱們已經知道了節點、關係、屬性(Property)、標籤等概念。

子圖(Subgraph)是一張圖的一部分。當咱們須要對圖中的特定節點,特定關係,或者特定標籤或者屬性進行特定分析時,子圖就會頗有用。

路徑(Path)是一組節點及他們的關係的集合。以上圖爲例,「Dan」 開過型號爲 「Volvo V70」 的車,這輛車是屬於 「Ann」 的。那麼節點 「Dan」 「Ann」 「Car」和關係 「Drives」 「Owns」 組成了一個簡單的路徑。

咱們在介紹圖算法前,先梳理一下圖的不一樣屬性(Attribute)。

連通圖與非連通圖

連通圖(Connected Graphs)指圖內任意兩個節點間,總能找到一條路徑鏈接它們,不然,爲非連通圖(Disconnected Graphs)。也就是說,若是圖中包含島(Island),則是非連通圖。若是島內的節點都是連通的,這些島就被成爲一個部件(Component,有時也叫 Cluster)。

有些圖算法在非連通圖上可能產生沒法預見的錯誤。若是咱們發現了未預見的結果,能夠首先檢查圖的結構是否連通。

未加權圖與加權圖

未加權圖(Unweighted Graphs)的節點和邊上均沒有權重。對於加權圖(Weighted Graphs),所加權重能夠表明:成本、時間、距離、容量、甚至是指定域的優先級。下圖給出了示意圖。

基本的圖算法能夠經過處理權重來表明關係的強度。許多算法經過計算指標,用做後續算法的權重。也有些算法經過更新權重值,來查找累計總數、最小值或最優化結果。

關於加權圖的一個典型用途是路徑尋找算法。這些算法支持咱們手機上的地圖應用程序,並計算位置之間最短/最便宜/最快的運輸路線。例如,下圖使用了兩種不一樣的方法來計算最短路線。

若是沒有權重,計算最短路徑時,實則在計算關係(Relation,也稱 Hop)的數量。那麼在上圖左邊,咱們找到 A 和 E 之間的最短距離爲 2,通過 D 點。若是像上圖右邊所示,邊被賦予了權重,用以表明節點之間的物理距離(單位:KM)。那麼咱們能夠找到 A 和 E 之間的最短距離是 50 KM,須要通過 C 和 D 兩個點。而此時,在未加權圖中計算的最短路徑 A-D-E 距離爲 70 KM,比咱們找到的路徑 A-C-D-E 距離遠。

有向圖與無向圖

在無向圖(Undirected Graphs)中,節點的關係被認爲是雙向的(bi-directional),例如朋友關係。而在有向圖(Directed Graphs)中,節點的關係能夠指定方向。邊若是指向了一個節點,咱們稱爲 in-link,邊若是從一個節點出發,咱們稱爲 out-link。

邊的方向加入了更多維度的信息,一樣關係的邊,卻包含不一樣的方向,則表明了不一樣的語義信息。以下圖所示,有向圖繪製了一個簡單的同窗網絡,邊的方向表明着 「喜歡」。那麼從圖中,咱們能夠知道,同窗中 「最受歡迎的」 的人是 「A」 和 「C」。

咱們還能夠用道路網絡幫咱們理解爲何須要有向圖和無向圖。例如,高速公路通常都是雙向的,咱們使用無向圖便可。可是,在城市內部,常常會有單向車道,咱們必須使用有向圖。

非循環圖和循環圖

圖論中,循環指一些特殊的路徑,它們的起點和終點是同一個節點。在非循環圖(Acyclic Graph)中,不存在循環路徑,相反則爲循環圖(Cyclic Graphs)。以下圖所示,有向圖和無向圖均可能包含循環,所不一樣的是,有向圖的路徑必須遵循邊的方向。圖中的 Graph 1 是一個典型的 DAG(Directed Acyclic Graph,有向無循環圖),而且 DAG 一般有葉子節點(leaf node,也稱 dead node)。

Graph 1 和 Graph 2 是無循環的,由於咱們在不重複任何一條邊的狀況下,沒法從任何一個點出發,再回到它。Graph 3 中有一個簡單的循環 A-D-C-A。而 Graph 4 中,咱們能夠發現多個循環:B-F-C-D-A-C-B,C-B-F-C 等等。

循環在圖中很是常見。有時,咱們爲了提升處理效率,會將循環圖轉化爲非循環圖(經過剪除一些關係)。DAG 在調度、版本控制等問題中十分常見。實際上,咱們在數學或者計算機科學中常常碰見的樹(Tree)就是一個典型的 DAG,只是對於樹來講,只能擁有一個 Parent,而 DAG 沒有這個限制。

圖算法

咱們關注三類核心的圖算法:路徑搜索(Pathfinding and Search)、中心性計算(Centrality Computation)和社羣發現(Community Detection)。

路徑搜索算法

圖搜索算法(Pathfinding and Search Algorithms)探索一個圖,用於通常發現或顯式搜索。這些算法經過從圖中找到不少路徑,但並不指望這些路徑是計算最優的(例如最短的,或者擁有最小的權重和)。圖搜索算法包括廣度優先搜索和深度優先搜索,它們是遍歷圖的基礎,而且一般是許多其餘類型分析的第一步。

路徑搜索(Pathfinding)算法創建在圖搜索算法的基礎上,並探索節點之間的路徑。這些路徑從一個節點開始,遍歷關係,直到到達目的地。路徑搜索算法識別最優路徑,用於物流規劃,最低成本呼叫或者叫IP路由問題,以及遊戲模擬等。

下圖是路徑搜索類算法的分類:

 

DFS & BFS

圖算法中最基礎的兩個遍歷算法:廣度優先搜索(Breadth First Search,簡稱 BFS)和深度優先搜索(Depth First Search,簡稱 DFS)。BFS 從選定的節點出發,優先訪問全部一度關係的節點以後再繼續訪問二度關係節點,以此類推。DFS 從選定的節點出發,選擇任一鄰居以後,儘量的沿着邊遍歷下去,知道不能前進以後再回溯。

下面是兩張一樣的圖,分別採用 BFS 和 DFS 進行圖的遍歷,圖上節點的數字標識這遍歷順序。

BFS

DFS

對於咱們數據科學的角色來講,咱們不多真正須要使用 BFS 和 DFS。這兩個圖搜索算法更多地做爲底層算法支持其餘圖算法。例如,最短路徑問題和 Closeness Centrality (在後文會有介紹)都使用了 BFS 算法;而 DFS 能夠用於模擬場景中的可能路徑,由於按照 DFS 訪問節點的順序,咱們總能在兩個節點之間找到相應的路徑。感興趣的話,能夠猜一猜,後文介紹的算法是否使用了圖搜索算法,而且分別使用了 DFS 仍是 BFS。

最短路徑

最短路徑(Shortest Paths)算法計算給定的兩個節點之間最短(最小權重和)的路徑。算法可以實時地交互和給出結果,能夠給出關係傳播的度數(degree),能夠快速給出兩點之間的最短距離,能夠計算兩點之間成本最低的路線等等。例如:

  • 導航:谷歌、百度、高德地圖均提供了導航功能,它們就使用了最短路徑算法(或者很是接近的變種);
  • 社交網絡關係:當咱們在 LinkedIn、人人(暴露年齡了)等社交平臺上查看某人的簡介時,平臺會展現大家之間有多少共同好友,並列出大家之間的關係。

最多見的最短路徑算法來自於 1956 年的 Edsger Dijkstra。Dijkstra 的算法首先選擇與起點相連的最小權重的節點,也就是 「最臨近的」 節點,而後比較 起點到第二臨近的節點的權重 與 最臨近節點的下一個最臨近節點的累計權重和 從而決定下一步該如何行走。能夠想象,算法記錄的累計權重和 如同地理的 「等高線」 同樣,在圖上以 「波」 的形式傳播,直到到達目的地節點。

最短路徑算法有兩個經常使用的變種:A (能夠念做 A Star)algorithm和 Yen’s K-Shortest Paths。A algorithm 經過提供的額外信息,優化算法下一步探索的方向。Yen’s K-Shortest Paths 不但給出最短路徑結果,同時給出了最好的 K 條路徑。

全部節點對最短路徑(All Pairs Shortest Path)也是一個經常使用的最短路徑算法,計算全部節點對的最短路徑。相比較一個一個調用單個的最短路徑算法,All Pairs Shortest Path 算法會更快。算法並行計算多個節點的信息,而且這些信息在計算中能夠被重用。

本文不打算再深刻了,下圖是從A節點開始的計算過程,看懂這張圖,你就明白了。

All Pairs Shortest Path 算法一般用於,當最短路徑受限或者變成了非最優時,如何尋找替代線路。其實算法很是經常使用:

  • 優化城市設施的位置和貨物的分配:例如肯定運輸網格中不一樣路段上預期的交通負荷,例如快遞線路設計,從而保證運輸對突發事件的應對;
  • 做爲數據中心設計算法的一部分:查找具備最大帶寬和最小延遲的網絡。

最小生成樹

最小生成樹(Minimum Spanning Tree)算法從一個給定的節點開始,查找其全部可到達的節點,以及將節點與最小可能權重鏈接在一塊兒,行成的一組關係。它以最小的權重從訪問過的節點遍歷到下一個未訪問的節點,避免了循環。

最經常使用的最小生成樹算法來自於 1957 年的 Prim 算法。Prim 算法與Dijkstra 的最短路徑相似,所不一樣的是, Prim 算法每次尋找最小權重訪問到下一個節點,而不是累計權重和。而且,Prim 算法容許邊的權重爲負。

上圖是最小生成樹算法的步驟分解,算法最終用最小的權重將圖進行了遍歷,而且在遍歷的過程當中,不產生環。

算法能夠用於優化鏈接系統(如水管和電路設計)的路徑。它還用於近似一些計算時間未知的問題,如旅行商問題。雖然該算法不必定總能找到絕對最優解,但它使得複雜度極高和計算密集度極大的分析變得更加可能。例如:

  • 旅行計劃:儘量下降探索一個國家的旅行成本;
  • 追蹤流感傳播的歷史:有人使用最小生成樹模型對丙型肝炎病毒感染的醫院暴發進行分子流行病學調查

隨機遊走

隨機遊走(Random Walk)算法從圖上得到一條隨機的路徑。隨機遊走算法從一個節點開始,隨機沿着一條邊正向或者反向尋找到它的鄰居,以此類推,直到達到設置的路徑長度。這個過程有點像是一個醉漢在城市閒逛,他可能知道本身大體要去哪兒,可是路徑可能極其「迂迴」,畢竟,他也沒法控制本身~

隨機遊走算法通常用於隨機生成一組相關的節點數據,做爲後續數據處理或者其餘算法使用。例如:

  • 做爲 node2vec 和 graph2vec 算法的一部分,這些算法能夠用於節點向量的生成,從而做爲後續深度學習模型的輸入;這一點對於瞭解 NLP (天然語言處理)的朋友來講並不難理解,詞是句子的一部分,咱們能夠經過詞的組合(語料)來訓練詞向量。那麼,咱們一樣能夠經過節點的組合(Random Walk)來訓練節點向量。這些向量能夠表徵詞或者節點的含義,而且可以作數值計算。這一塊的應用頗有意思,咱們會找機會來詳細介紹;
  • 做爲 Walktrap 和 Infomap 算法的一部分,用於社羣發現。若是隨機遊走老是返回同一組節點,代表這些節點可能在同一個社羣;
  • 其餘機器學習模型的一部分,用於隨機產生相關聯的節點數據。

中心性算法

中心性算法(Centrality Algorithms)用於識別圖中特定節點的角色及其對網絡的影響。中心性算法可以幫助咱們識別最重要的節點,幫助咱們瞭解組動態,例如可信度、可訪問性、事物傳播的速度以及組與組之間的鏈接。儘管這些算法中有許可能是爲社會網絡分析而發明的,但它們已經在許多行業和領域中獲得了應用。

下圖羅列了咱們全部須要瞭解的中心性算法指標。

Degree Centrality

Degree Centrality (度中心性,以度做爲標準的中心性指標)多是整篇博文最簡單的 「算法」 了。Degree 統計了一個節點直接相連的邊的數量,包括出度和入度。Degree 能夠簡單理解爲一個節點的訪問機會的大小。例如,在一個社交網絡中,一個擁有更多 degree 的人(節點)更容易與人發生直接接觸,也更容易得到流感。

一個網絡的平均度(average degree),是邊的數量除以節點的數量。固然,平均度很容易被一些具備極大度的節點 「帶跑偏」 (skewed)。因此,度的分佈(degree distribution)多是表徵網絡特徵的更好指標。

若是你但願經過出度入度來評價節點的中心性,就可使用 degree centrality。度中心性在關注直接連通時具備很好的效果。應用場景例如,區分在線拍賣的合法用戶和欺詐者,欺詐者因爲嚐嚐人爲過高拍賣價格,擁有更高的加權中心性(weighted centrality)。

Closeness Centrality

Closeness Centrality(緊密性中心性)是一種檢測可以經過子圖有效傳播信息的節點的方法。緊密性中心性計量一個節點到全部其餘節點的緊密性(距離的倒數),一個擁有高緊密性中心性的節點擁有着到全部其餘節點的距離最小值。

對於一個節點來講,緊密性中心性是節點到全部其餘節點的最小距離和的倒數:

其中 u 是咱們要計算緊密性中心性的節點,n 是網絡中總的節點數,d(u,v) 表明節點 u 與節點 v 的最短路徑距離。更經常使用的公式是歸一化以後的中心性,即計算節點到其餘節點的平均距離的倒數,你知道如何修改上面的公式嗎?對了,將分子的 1 變成 n-1 便可。

理解公式咱們就會發現,若是圖是一個非連通圖,那麼咱們將沒法計算緊密性中心性。那麼針對非連通圖,調和中心性(Harmonic Centrality)被提了出來(固然它也有歸一化的版本,你猜此次n-1應該加在哪裏?):

Wasserman and Faust 提出過另外一種計算緊密性中心性的公式,專門用於包含多個子圖而且子圖間不相鏈接的非連通圖:

其中,N 是圖中總的節點數量,n 是一個部件(component)中的節點數量。

當咱們但願關注網絡中傳播信息最快的節點,咱們就可使用緊密性中心性。

Betweenness Centrality

中介中心性(Betweenness Centrality)是一種檢測節點對圖中信息或資源流的影響程度的方法。它一般用於尋找鏈接圖的兩個部分的橋樑節點。由於不少時候,一個系統最重要的 「齒輪」 不是那些狀態最好的,而是一些看似不起眼的 「媒介」,它們掌握着資源或者信息的流動性。

中間中心性算法首先計算鏈接圖中每對節點之間的最短(最小權重和)路徑。每一個節點都會根據這些經過節點的最短路徑的數量獲得一個分數。節點所在的路徑越短,其得分越高。計算公式:

其中,p 是節點 s 與 t 之間最短路徑的數量,p(u) 是其中通過節點 u 的數量。下圖給出了對於節點 D 的計算過程:

固然,在一張大圖上計算中介中心性是十分昂貴的。因此咱們須要更快的,成本更小的,而且精度大體相同的算法來計算,例如 Randomized-Approximate Brandes。咱們不會對這個算法繼續深刻,感興趣的話,能夠去了解一下,算法如何經過隨機(Random)和度的篩選(Degree)達到近似的效果。

中介中心性在現實的網絡中有普遍的應用,咱們使用它來發現瓶頸、控制點和漏洞。例如,識別不一樣組織的影響者,他們每每是各個組織的媒介,例如尋找電網的關鍵點,提升總體魯棒性。

PageRank

在全部的中心性算法中,PageRank 是最著名的一個。它測量節點傳遞影響的能力。PageRank 不但節點的直接影響,也考慮 「鄰居」 的影響力。例如,一個節點擁有一個有影響力的 「鄰居」,可能比擁有不少不太有影響力的 「鄰居」 更有影響力。PageRank 統計到節點的傳入關係的數量和質量,從而決定該節點的重要性。

PageRank 算法以谷歌聯合創始人拉里·佩奇的名字命名,他建立了這個算法來對谷歌搜索結果中的網站進行排名。不一樣的網頁之間相互引用,網頁做爲節點,引用關係做爲邊,就能夠組成一個網絡。被更多網頁引用的網頁,應該擁有更高的權重;被更高權重引用的網頁,也應該擁有更高權重。原始公式:

其中,u 是咱們想要計算 PageRank 的網頁,T1 到 Tn 是引用的網頁。d 被稱爲阻尼係數(damping factor),表明一個用戶繼續點擊網頁的機率,通常被設置爲 0.85,範圍 0~1。C(T) 是節點 T 的出度。

從理解上來講,PageRank 算法假設一個用戶在訪問網頁時,用戶可能隨機輸入一個網址,也可能經過一些網頁的連接訪問到別的網頁。那麼阻尼係數表明用戶對當前網頁感到無聊,隨機選擇一個連接訪問到新的網頁的機率。那麼 PageRank 的數值表明這個網頁經過其餘網頁連接過來(入度,in-degree)的可能性。那你能如何解釋 PageRank 方程中的 1-d 呢?實際,1-d 表明不經過連接訪問,而是隨機輸入網址訪問到網頁的機率。

PageRank 算法採用迭代方式計算,直到結果收斂或者達到迭代上限。每次迭代都會分兩步更新節點權重和邊的權重,詳細以下圖:

固然,上圖的計算並無考慮阻尼係數,那爲何必定要阻尼係數呢?除了咱們定義的連接訪問機率,有沒有別的意義呢?從上圖的過程當中,咱們可能會發現一個問題,若是一個節點(或者一組節點),只有邊進入,卻沒有邊出去,會怎麼樣呢?按照上圖的迭代,節點會不斷搶佔 PageRank 分數。這個現象被稱爲 Rank Sink,以下圖:

解決 Rank Sink 的方法有兩個。第一個,假設這些節點有隱形的邊連向了全部的節點,遍歷這些隱形的邊的過程稱爲 teleportation。第二個,使用阻尼係數,若是咱們設置 d 等於 0.85,咱們仍然有 0.15 的機率從這些節點再跳躍出去。

儘管阻尼係數的建議值爲 0.85,咱們仍然能夠根據實際須要進行修改。調低阻尼係數,意味着訪問網頁時,更不可能不斷點擊連接訪問下去,而是更多地隨機訪問別的網頁。那麼一個網頁的 PageRank 分數會更多地分給他的直接下游網頁,而不是下游的下游網頁。

PageRank 算法已經不只限於網頁排名。例如:

  • 尋找最重要的基因:咱們要尋找的基因可能不是與生物功能聯繫最多的基因,而是與最重要功能有緊密聯繫的基因;
  • who to follow service at twitter:Twitter使用個性化的 PageRank 算法(Personalized PageRank,簡稱 PPR)向用戶推薦他們可能但願關注的其餘賬戶。該算法經過興趣和其餘的關係鏈接,爲用戶展現感興趣的其餘用戶;
  • 交通流量預測:使用 PageRank 算法計算人們在每條街道上停車或結束行程的可能性;
  • 反欺詐:醫療或者保險行業存在異常或者欺詐行爲,PageRank 能夠做爲後續機器學習算法的輸入。

社羣發現算法

社羣的造成在各類類型的網絡中都很常見。識別社羣對於評估羣體行爲或突發事件相當重要。對於一個社羣來講,內部節點與內部節點的關係(邊)比社羣外部節點的關係更多。識別這些社羣能夠揭示節點的分羣,找到孤立的社羣,發現總體網絡結構關係。社羣發現算法(Community Detection Algorithms)有助於發現社羣中羣體行爲或者偏好,尋找嵌套關係,或者成爲其餘分析的前序步驟。社羣發現算法也經常使用於網絡可視化。

下圖是社羣發現算法的分類。

Measuring Algorithm

三角計數(Triangle Count)和聚類係數(Clustering Coefficient)常常被一塊兒使用。三角計數計算圖中由節點組成的三角形的數量,要求任意兩個節點間有邊(關係)鏈接。聚類係數算法的目標是測量一個組的聚類緊密程度。該算法計算網絡中三角形的數量,與可能的關係的比率。聚類係數爲 1 表示這個組內任意兩個節點之間有邊相連。

有兩種聚類係數:局部聚類係數(Local Clustering Coefficient)和全局聚類係數(Global Clustering Coefficient)。

局部聚類係數計算一個節點的鄰居之間的緊密程度,計算時須要三角計數。計算公式:

其中,u 表明咱們須要計算聚類係數的節點,R(u) 表明通過節點 u 和它的鄰居的三角形個數,k(u) 表明節點 u的度。下圖是三三角計數聚類係數計算示意圖:

全局聚類係數是局部聚類係數的歸一化求和。

當須要計算一個組的穩定性或者聚類係數時,咱們可使用三角計數。三角計數在社交網絡分析中有普遍的應用,通航被用來檢測社區。聚類係數能夠快速評估特定組或整個網絡的內聚性。這些算法能夠共同用於特定網絡結構的尋找。例如,探索網頁的主題結構,基於網頁之間的相互聯繫,檢測擁有共同主題的 「網頁社羣」。

Components Algorithm

強關聯部件(Strongly Connected Components,簡稱 SCC)算法尋找有向圖內的一組一組節點,每組節點能夠經過關係 互相 訪問。在 「Community Detection Algorithms」 的圖中,咱們能夠發現,每組節點內部不須要直接相連,只要經過路徑訪問便可。

關聯部件(Connected Components)算法,不一樣於 SCC,組內的節點對只需經過一個方向訪問便可。

關聯類算法做爲圖分析的早期算法,用以瞭解圖的結構,或肯定可能須要獨立調查的緊密集羣十分有效。對於推薦引擎等應用程序,也能夠用來描述組中的相似行爲等等。許多時候,算法被用於查找集羣並將其摺疊成單個節點,以便進一步進行集羣間分析。對於咱們來講,先運行如下關聯類算法查看圖是否連通,是一個很好的習慣。

Label Propagation Algorithm

標籤傳播算法(Label Propagation Algorithm,簡稱 LPA)是一個在圖中快速發現社羣的算法。在 LPA 算法中,節點的標籤徹底由它的直接鄰居決定。算法很是適合於半監督學習,你可使用已有標籤的節點來種子化傳播進程。

LPA 是一個較新的算法,由 Raghavan 等人於 2007 年提出。咱們能夠很形象地理解算法的傳播過程,當標籤在緊密聯繫的區域,傳播很是快,但到了稀疏鏈接的區域,傳播速度就會降低。當出現一個節點屬於多個社羣時,算法會使用該節點鄰居的標籤與權重,決定最終的標籤。傳播結束後,擁有一樣標籤的節點被視爲在同一羣組中。

下圖展現了算法的兩個變種:Push 和 Pull。其中 Pull 算法更爲典型,而且能夠很好地並行計算:

咱們再也不繼續深刻,看完上圖,你應該已經理解了算法的大概過程。其實,作過圖像處理的人很容易明白,所謂的標籤傳播算法,不過是圖像分割算法的變種,Push 算法是區域生長法(Region Growing)的簡化版,而 Pull 更像是分割和合並(divide-and-merge,也有人稱 split-merge)算法。確實,圖像(image)的像素和圖(graph)的節點是十分相似的。

Louvain Modularity Algorithm

Louvain Modularity 算法在給節點分配社羣是,會比較社羣的密度,而不只僅是比較節點與社羣的緊密程度。算法經過查看節點與社羣內關係的密度與平均關係密度的比較,來量化地決定一個節點是否屬於社羣。算法不但能夠發現社羣,更能夠給出不一樣尺度不一樣規模的社羣層次,對於理解不一樣粒度界別的網絡結構有極大的幫助。

算法在 2008 年被提出之後,迅速成爲了最快的模塊化算法之一。算法的細節不少,咱們沒法一一覆蓋,下圖給出了一個粗略的步驟,幫助咱們理解算法如何可以多尺度地構建社羣:

Louvain Modularity 算法很是適合龐大網絡的社羣發現,算法採用啓發式方式從而可以克服傳統 Modularity 類算法的侷限。算法應用:

  • 檢測網絡攻擊:該算能夠應用於大規模網絡安全領域中的快速社羣發現。一旦這些社羣被發現,就能夠用來預防網絡攻擊;
  • 主題建模:從 Twitter 和 YouTube 等在線社交平臺中提取主題,基於文檔中共同出現的術語,做爲主題建模過程的一部分。
相關文章
相關標籤/搜索