日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

技术原创|一文读懂图遍历算法以及图计算应用

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术原创|一文读懂图遍历算法以及图计算应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為解決大規模計算和海量數據處理問題,Google 在 2010 年提出了圖計算模型 Pregel。隨后又陸續出現了。GraphLab、GraphChi等典型圖計算系統。

圖計算是人工智能的一個使能技術。

大數據時代,越來越多的數據采用圖結構進行表示.圖也是一種能夠表達對象之間復雜關系的數據存儲方式。

那么,什么是圖?

下面是數據類型的結構和圖的結構表示對比:

?

可以看出:圖(graph)是一種用于表示對象之間聯系的抽象數據結構。

接下來,小普列舉幾個常見的圖計算模式:(這部分比較偏向于技術,想看應用的小伙伴可以往下滑)

目前的圖計算框架基本上都遵循BSP(Bulk Synchronous Parallell)計算模式。它將計算分成一系列的超步(superstep)的迭代(iteration)。從縱向上看,它是一個串行模型,而從橫向上看,它是一個并行的模型,每兩個superstep之間設置一個柵欄(barrier),即整體同步點,確定所有并行的計算都完成后再啟動下一輪superstep。

超步可分為三個階段:

01計算

每一個processor利用上一個superstep傳過來的消息和本地的數據進行本地計算;

02消息傳遞

每一個processor計算完畢后,將消息傳遞給與之關聯的其它processors;

03整體同步

用于整體同步,確定所有的計算和消息傳遞都進行完畢后,進入下一個superstep。

BSP模型架構

模型基于一個master協調,所有的worker同步(lock-step)執行, 數據從輸入的隊列中讀取。

Pregel模型

Pregel在概念模型上遵循BSP模式。整個計算過程由若干順序運行的超級步(Super Step)組成,系統從一個“超級步”邁向下一個“超級步”,直到達到算法的終止條件。

超步的組成如下:

01vpro

是節點上的用戶定義的計算函數,運行在單個節點之上,在superstep 0,這個函數會在每個節點上以初始的initialMsg為參數運行并生成新的節點值。在隨后的超步中只有當節點收到信息,該函數才會運行。

02sendMsg

在當前超步中收到信息的節點用于向相鄰節點發送消息,這個消息用于下一個超步的計算。

03mergeMsg

用于聚合發送到同一節點的消息,這個函數的參數為兩個A類型的消息,返回值為一個A類型的消息。

Pregel模型的缺陷

01單節點無法并發處理

對于鄰居數很多的頂點,它需要處理的消息非常龐大,而且在這個模式下,它們是無法被并發處理的。所以對于符合冪律分布的自然圖,這種計算模型下很容易發生假死或者崩潰。

02消息傳遞開銷大

在圖的劃分上,采用的是簡單的hash方式,這樣固然能夠滿足負載均衡,但是hash方式并不能根據圖的連通特性進行劃分,導致超步之間的消息傳遞開銷可能會是影響性能的最大隱患。

03長時間等待

BSP模型本身有其局限性,整體同步并行對于計算快的worker長期等待的問題無法解決。

04內存不足

由于pregel目前的計算狀態都是常駐內存的,對于規模繼續增大的圖處理可能會導致內存不足。

采用邊分割的存儲方式,重復存儲大量邊在內存中

GAS模型

利用分布式圖計算中的頂點分割方法來對圖數據來進行分割,從而使得一個數據量巨大的圖,能夠在不同的分布式計算節點中進行平行計算。

但是當圖數據被分割后進入不同計算節點進行計算的時候,由于在不同節點中對于同一個節點有可能有多個副本,這個節點副本之間如何進行數據交換協同也成為了一個難題,于是GAS模型就被提出來解決這個難題。

GAS模型主要分為3個階段:Gather Apply Scatter

01Gather階段

Gather階段主要功能是規約(reduce),其上定義了一個sum函數,用于規約當前頂點通過邊收集到的信息。用戶通過自定義sum函數,指定了每個定點上的規約功能。如挑選出相鄰邊傳遞消息的最小值,或最大值。這里的sum不是一個簡單求和的意思,更確切地說,是將從周圍收集到地一系列信息整合成一個用戶想要地結果,并輸出給下一個階段。

02Apply階段

Apply階段,主要是針對每個頂點,將Gather階段地結果應用到當前頂點上,即用戶通過自定義策略來根據Gather的結果更新當前頂點地值。

03Scatter階段

Scatter階段,根據Apply階段的結果,將當前頂點的最新結果更新到該頂點的邊上。

GAS對比Pregel的優勢

相比叫Pregel,GAS將Pregel中的每個SuperStep一分為三,每個SubStep上對應一個用戶自定義的操作。

一方面使得用戶的自由度更大,

另一方面能明顯提升個SubStep直接的并行計算性能,特別是當頂點關聯的邊非常大的時候。GAS計算模式在圖計算框架PoweGraph和GraphLab中得到了很好的應用,并且在大規模關系網絡或復雜圖上取得了非常不錯的效果。

接下來,小普再介紹幾個常見的圖算法:“圖算法”就是基于圖的算法。

LPA標簽傳播算法

LPA是一種基于標簽傳播的局部社區劃分。對于網絡中的每一個節點,在初始階段,Label Propagation算法對于每一個節點都會初始化一個唯一的一個標簽。每一次迭代都會根據與自己相連的節點所屬的標簽改變自己的標簽,更改的原則是選擇與其相連的節點中所屬標簽最多的社區標簽為自己的社區標簽,這就是標簽傳播的含義了。隨著社區標簽不斷傳播。最終,連接緊密的節點將有共同的標簽:

01同步更新

在t輪迭代中,每個節點依賴的都是鄰居節點第t-1輪迭代的結果。

02異步更新

在t輪迭代中,每個節點依賴的是當前鄰居節點的社區標簽,若鄰居已經進行了標簽更新,則依賴的是鄰居節點t時的標簽。

優點:

LPA算法的最大的優點就是算法的邏輯非常簡單,相對于優化模塊度算法的過程是非常快的,不用louvain那樣的多次迭代優化過程。

LPA算法利用自身的網絡的結構指導標簽傳播,這個過程是無需任何的任何的優化函數,而且算法初始化之前是不需要知道社區的個數的,隨著算法迭代最后可以自己知道最終有多少個社區。

缺點:

劃分結果不穩定,隨機性強;

更新順序:節點標簽更新順序隨機,但是很明顯,越重要的節點越早更新會加速收斂過程;

隨機選擇:如果一個節點的出現次數最大的鄰居標簽不止一個時,隨機選擇一個標簽作為自己標簽。這種隨機性可能會帶來一個雪崩效應,即剛開始一個小小的聚類錯誤會不斷被放大。不過,如果相似鄰居節點出現多個,可能是weight計算的邏輯有問題,需要回過頭去優化weight抽象和計算邏輯。

SLPA算法

LPA是一種重疊型社區發現算法,其中涉及一個重要閾值參數r,通過r的適當選取,可將其退化為非重疊型,也就是LPA算法。

計算過程:

* 初始化所有節點的標簽信息,使得每個節點擁有唯一的標簽。

* 最為主要的是標簽傳播過程。

* 當前節點作為一個listener。

* 當前節點的每一個鄰居節點根據一定的speaking策略傳遞標簽信息。

* 當前節點從鄰居節點傳播的標簽信息集中根據一定的listener策略選擇一個標簽作為本次迭代中的新標簽。

* 算法收斂或遍歷達到指定的次數,算法結束。否則,標簽在不斷的遍歷過程中傳播。

* 標簽分類過程。后處理階段根據節點的標簽信息進行社區發現。

優點:

算法SLPA 不會像其它算法一樣忘記上一次迭代中節點所更新的標簽信息,它給每個節點設置了一個標簽存儲列表來存儲每次迭代所更新的標簽。最終的節點社區從屬關系將由標簽存儲列表中所觀察到的標簽的概率決定,當一個節點觀察到有非常多一樣的標簽時,那么,很有可能這個節點屬于這個社區,而且在傳播過程中也很有可能將這個標簽傳播給別的節點。更有益處的是,這種標簽存儲列表的設計可以使得算法可以支持劃分重疊社區。

PageRank

PageRank,又稱網頁排名算法,Google用它來體現網頁的相關性和重要性,在搜索引擎優化操作中是經常被用來評估網頁優化的成效因素之一。

PR(u): 當前節點的PR值

PR(v): 邊指向當前節點的鄰居節點PR值

L(v): 邊指向當前節點的鄰居節點的出度

為了便于計算,我們假設每個頁面的PR初始值為1

PR(A) = PR(C) = 1

PR(B) = 0.5PR(A) = 0.5

PR(C) = 0.5PR(A) + PR(B) = 1.5

至此,我們模擬了一個簡化的 PageRank 的計算過程,實際情況會比這個復雜,可能會面臨兩個問題:

01等級泄露(Rank?Leak)

如果一個網頁沒有出鏈,就像是一個黑洞一樣,吸收了其他網頁的影響力而不釋放,最終會導致其他網頁的 PR 值為 0。

02等級沉沒(Rank Sink)

如果一個網頁只有出鏈,沒有入鏈(如下圖所示),計算的過程迭代下來,會導致這個網頁的 PR 值為 0。

針對等級泄露的情況,我們可以把沒有出鏈的節點,先從圖中去掉,等計算完所有節點的 PR 值之后,再加上該節點進行計算。不過這種方法會導致新的等級泄露的節點的產生,所以工作量還是很大的。

PageRank隨機瀏覽模型

為了解決簡化模型中存在的等級泄露和等級沉沒的問題,拉里·佩奇提出了 PageRank 的隨機瀏覽模型。他假設了這樣一個場景:用戶并不都是按照跳轉鏈接的方式來上網,還有一種可能是不論當前處于哪個頁面,都有概率訪問到其他任意的頁面,比如說用戶就是要直接輸入網址訪問其他頁面,雖然這個概率比較小。

所以他定義了阻尼因子 d,這個因子代表了用戶按照跳轉鏈接來上網的概率,通常可以取一個固定值 0.85,而 1-d=0.15 則代表了用戶不是通過跳轉鏈接的方式來訪問網頁的,比如直接輸入網址。

其中 N 為網頁總數,這樣我們又可以重新迭代網頁的權重計算了,因為加入了阻尼因子 d,一定程度上解決了等級泄露和等級沉沒的問題。

Louvain社區切分算法

Louvain算法是一種基于多層次(逐輪啟發式迭代)優化模塊度(Modularity)的算法。模塊度函數最初被用于衡量社區發現算法結果的質量,它能夠刻畫發現的社區的緊密程度。

同時,模塊度函數既然能刻畫社區的緊密程度,也就能夠被用來當作一個優化函數(目標函數),即將結點加入它的某個鄰居所在的社區中,如果能夠提升當前社區結構的模塊度。則說明這次迭代優化是可接受的。

計算過程:

1. 不斷地遍歷網絡中的結點,嘗試將單個結點加入能夠使modularity提升最大的社區中,直到所有結點都不再變化

2. 處理第一階段的結果,將一個個小的社區歸并為一個超結點來重新構造網絡,這時邊的權重為兩個結點內所有原始結點的邊權重之和

3. 迭代以上兩個步驟直至算法穩定或達到最大迭代次數

Louvain社區切分算法---模塊度增益

模塊度增益是針對單個節點定義的,當某個節點合并到某個社區中時,我們計算形成的全圖的modularity,然后和合并之前的全圖的modularity做對比即可得到該次節點合并時,模塊度的增益。

上式中ki,in是節點i與i要移入社區中所有節點之間邊權重和,∑tot是節點i要移入的社區內所有節點的邊的權重和,上式可以理解為括號內第一項ki,in表示實際節點i與要移入社區之間的連接邊的權重之和, 第二項∑tot/m為其它節點與該社區連接一條邊的概率,∑tot/m * ki則為基于平均情況下節點i在加權度為k的情況下與該社區連接的邊的權重. 第一項若比第二項大則說明節點i與該社區連接程度超過平均預測, 則加入到該社區, 反之保持不變

圖計算應用

為了快速處理圖數據和應對不斷增長的圖數據,圖計算應用被廣泛部署于各大數據中心,成為數據中心的典型應用。用于表示 人際關系、分子拓撲結構、大腦神經元鏈接等.圖數據中蘊含著豐富的信息,圖計算應用是一種挖掘圖數據中隱含價值的重要應用.

接下來小普列舉一些圖計算應用在數據挖掘中的應用案例:

銀行圖計算應用:利用關系的延展提升事后失聯催收的成功率

傳統催收系統以一度直接關系尋找逾期違約人員的聯系方式,往往因為信息失效導致失聯。

構建統一數據視圖后的關系圖譜,可以通過其關系延展能力以及間接關系、隱藏關系的發現能力,幫助催收人員擴展更多與失信人相關的重要干系人和聯系方式,提升催收的效率和覆蓋率。

  • 金融行業精準營銷:通過高AUM客戶的關系延展喚醒沉睡客戶和挖掘潛在客戶

經過大數據分析,對低值客戶和潛在客戶推薦理財產品,容易出成效。購買理財產品的客群具有基數大,人均綜合AUM超過50萬,流失率低于10%,復購率高等特點,對優化資產結構和客戶結構都有很好的優化作用。

今天的分享就到這里啦,希望你有所收獲,覺得好記得給小普點個贊。

總結

以上是生活随笔為你收集整理的技术原创|一文读懂图遍历算法以及图计算应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。