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

机器之心發表於2019-05-16

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

你肯定沒有讀過這本書,因為這本書的釋出日期是2019年5月。本文會覆蓋該書的大部分內容,讀完這篇,你能夠了解圖演算法的基本概念。關於此書,作為市面上為數不多的面向資料科學應用的圖演算法書籍,寫的比較全面系統和易懂。當然,書在細節上的提高空間還有很多。今天內容很多,坐穩~

目錄

圖演算法 & 圖分析

圖基礎知識

       連通圖與非連通圖

       未加權圖與加權圖

       有向圖與無向圖

       非迴圈圖和迴圈圖

圖演算法

       路徑搜尋演算法

              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 等線上社交平臺中提取主題,基於文件中共同出現的術語,作為主題建模過程的一部分。

結論

本文更像是一篇綜述,演算法很乾,我們會在後續繼續分享圖分析相關內容,敬請期待。

相關文章