本發(fā)明屬于大圖數據處理領域,是一種在線的預測無向圖中頂點之間將來發(fā)生鏈接概率的算法,屬于計算機大規(guī)模圖數據處理領域。本發(fā)明結合高效的基于局部信息相似性的鏈路預測方法,提出一種半懶惰學習的在線預測算法,在理論保證下,可以有效的解決圖流數據的鏈路預測問題。
背景技術:
隨著互聯網與移動互聯網的快速發(fā)展,大量的圖結構出現在各類應用中。例如社交網絡,運輸網絡,網頁與超鏈接等。鏈路預測是圖領域里一項非常重要的研究方向,是一種長期存在并且基礎性的研究。
鏈路預測是指如何利用已知的網絡節(jié)點屬性以及網絡結構等信息,預測網絡中尚未產生或者尚未發(fā)現的連邊的兩個節(jié)點發(fā)生鏈接的可能性。鏈路預測的相關研究在生物分子學,社交網絡,推薦系統(tǒng),網絡重構,網絡演化的評價等方面有著重要的應用。
目前鏈路預測在動態(tài)網絡下用于在線預測時按照學習方法大致可以分為兩類饑餓學習與懶惰學習。饑餓學習是指該學習方法只學習歷史數據,不利用新到來的數據,每次預測時只用從歷史數據學習出的方法進行預測,一般有時間序列、機器學習模型、深度學習等方法。懶惰學習則是指學習方法每次學習或者訓練只利用每次新到來的數據,不使用歷史數據,一般有基于局部信息的相似性方法,基于路徑相似性的方法等。不論是饑餓學習還是懶惰學習大都是基于圖快照的假設來采樣的,這種方法可以降低算法學習時間復雜度,通常都可以較容易的在內存中進行計算。
然而現在的圖結構都是高度動態(tài)化的,像twitter數據每天有1億用戶登錄并且會發(fā)布大約5億條狀態(tài)。圖中的邊往往都是由序列化的流的形式來更新的,稱之為圖流模型。通常認為圖流是一個無限的形如
現在的鏈路預測方法在圖流模型下不能很好的解決問題主要是由于兩點原因。第一點原因是目前大部分的鏈路預測方法都是基于靜態(tài)的圖快照模型的。在快速演進的圖流中,目前存在的這些方法不能準確的捕捉到圖的演進的模式和圖變化的細節(jié),將會導致預測不準確。圖流的鏈路預測問題本身就是一個在動態(tài)變化的數據中的所要解決的問題,該問題應該支持實時在線預測,能夠隨著數據不斷的動態(tài)變化而能夠預測出圖流的演進;第二點原因是由于圖流是一個無限的、不斷接收的序列,而目前基于圖快照的假設模型的方法是根據每個時間段的圖采樣的結果做計算,因此無法在線的計算圖流;第三點原因是由于圖流數據沒有經過采樣,數據量很大無法一次性讀入到內存中進行計算,因此無法支持需要將數據進行多次遍歷的計算方法。舉例來說,假設一個網絡中包含104個頂點,在鏈路預測問題中,求潛在的兩兩頂點之間的鏈接的問題空間將會達到108以上。雖然由于圖的稀疏性,在圖流中的鏈接數據被證明并不會這么大,但是對于在目前的效率較高基于局部信息相似性中共同鄰居、jaccard評價指標,或者是基于路徑相似性的方法中局部路徑指標來說如何能夠快速在線的預測鏈路也將是一個非常大的挑戰(zhàn)??偟膩碚f,目前基于圖快照假設的方法無法很好的解決圖流形式的數據集,這就迫切的需要用新的方法與技術來迎接圖流中鏈路預測問題的挑戰(zhàn)。
技術實現要素:
本發(fā)明的目的是提供一種基于半懶惰學習方法的在線圖流鏈路預測方法。
為了彌補現有算法不能很好解決圖流數據的在線預測問題,本發(fā)明設計了一種在線動態(tài)的semi—lazy方式的預測算法適應快速變化的流數據,并通過構建頂點的鄰接頂點的哈希值排序池的方法與通過鄰接頂點的哈希值吃采樣估計的方法優(yōu)化算法的效率。算法的總體流程如圖12.
為實現本發(fā)明的目的采用的技術方案是:本發(fā)明采用的技術方案是:首先根據圖流數據的特點,為每個頂點設計了一個動態(tài)的鄰接頂點池來快速的、動態(tài)的接收與刪除該頂點的鄰接頂點,達到高效處理流數據模型的要求;我們結合目前鏈路預測問題中效率較高,適用范圍較廣的基于局部信息相似性的共同鄰居方法作為評測方法,并且該鏈路方法的準確性是有理論驗證的;為了捕捉到圖流的變化模式,我們采用semi-lazy方法來達到適應圖流快速變化的特點;為了提高局部信息相似性方法的計算時間,算法還設計了共同鄰居的快速算法與共同鄰居的估計法。
為了能夠方便處理流數據,算法首先將每個頂點進行哈希處理,然后為每個頂點建立鄰接頂點池用來存放不斷變化的鄰接頂點的哈希值,頂點相關度權重變化矩陣兩兩頂點的權重值隨著兩個頂點的鄰接頂點池中鄰接頂點的變化而改變,之后將局部信息相似性的方法結合到一起來作為兩個頂點直接發(fā)生鏈接概率的計算結果。該方法用stacking方式將利用不斷變化的有歷史信息流數據揉捏到局部信息相似性方法中形成了semi-lazy學習方法。
本發(fā)明的優(yōu)點是:
1)首先將圖流的鏈路預測問題進行了形式化的定義,根據目前存在的鏈路預測方法不能很好的解決圖流中的鏈路預測問題所帶來的巨大挑戰(zhàn),針對圖流模型下鏈路預測問題提出了一種新的方法與技術;
2)算法為每個頂點設計了存儲tx-ty個時間段的鄰接矩陣池,其中tx,ty隨著流數據時間戳的變化而改變的變量,但時間段的大小保持不變,因此可以高效的接收與處理圖流;
3)本發(fā)明設計了頂點相關度權重變化矩陣,并與局部信息相似性方法通過線性方式結合一起,動態(tài)的在線鏈路預測;
4)不僅如此,為了加快局部信息相似性方法的計算速度,我們設計了共同鄰居的快速計算法與共同鄰居的估計法。這些方法都是經過理論驗證和經驗穩(wěn)定性。
附圖說明
圖1將到達的頂點哈希映射。
圖2新頂點到達鄰接頂點哈希值存儲池。
圖3r(v0)刪除h(v3)并更新時間段。
圖4在t=10時新頂點到達鄰接頂點哈希值存儲池。
圖5主干索引可達性涵蓋圖可達性原理。
圖6在t=16時r(v0)刪除h(v30)。
圖7游標指向的值比較后向下一個元素移動。
圖8指向哈希值小的游標向下移動。
圖9將頂點按照冪律分布分類。
圖10大度結點采樣。
圖11算法總體流程圖。
具體實施方式
結合附圖1-11對本發(fā)明做進一步描述。
本發(fā)明分成三個部分——鄰接頂點的哈希值存儲池的建立,圖中兩兩頂點預測分值的計算與算法的優(yōu)化,其中的核心是鄰接頂點的哈希值存儲池的建立與圖的兩兩頂點預測分值的計算。
步驟1:圖流的鏈路預測問題中的圖流是一個不斷到達的帶有時間戳邊的序列,形如
步驟2:接著,由于邊序列
步驟3:表示兩個頂點u和v之間的關系的動態(tài)變化的參數,稱作活躍權重wuv(t),其表達式為:
wu,v(0)=0,δ=1,φ=0.5(2)
式(1)edge(u,v)∈g(t)表示頂點u與v之間在時刻t存在連邊。式(1)表示當兩個頂點在時間t發(fā)生過鏈接時wu,v(t)的值會增加δ,若沒發(fā)生過鏈接則會減少為以前的φ倍,頂點的鄰接頂點池每次更新時就會就會計算wu,v(t)的值,但始終wu,v(t)的值都會大于0。δ設為1的考慮是兩頂點每發(fā)生一次鏈接wu,v(t)就會增加1,φ值設為0.5是考慮當兩頂點連續(xù)δ次發(fā)生鏈接后中斷1天時的wu,v(t)與之前δ次都為0后發(fā)生一次鏈接的wu,v(t)值相等,當φ=0.5時兩頂點連續(xù)兩次發(fā)生鏈接后中斷一天與之前一直wu,v(t)為0后發(fā)生鏈接的值相等;如此可使最近發(fā)生鏈接的權重較大。由此,式(1)的意義是兩個頂點聯系的次數越多,并且最近聯系的越頻繁則參數wu,v(t)越大。式(1)會隨著時間的變化將以前兩頂點的關系融合進來達到半學習式的改變。
本專利將兩兩頂點的活躍權值wu,v(t)與共同鄰居值cnuv表示成線性關系作為最后的相似度評分,既
cnuv={i|i∈r(u)∩r(v)}α,β<1(4)
其中wu,i,wv,i分別表示頂點u與頂點i,頂點v與頂點i的活躍權重。α,β控制著wu,v(t)與cnuv對得分貢獻所占的比重,α、β值應根據網絡的不同而設置不同的值,cnuv表示頂點u的鄰接頂點池r(u)與頂點v的鄰接頂點池r(v)的交集。
如當cnuv的均值相比wu,v(t)的均值來說非常大,wu,v(t)的貢獻就顯現不出來,此時β的值應該小于α的值以此來提高wu,v(t)的作用。相似性評分反應兩頂點發(fā)生鏈接的概率大小,評分越高發(fā)生鏈接的概率越大。當圖在演進時,頂點之間的發(fā)生鏈接的概率也會發(fā)生變化,并不會像靜態(tài)圖的關系一樣,因此score(u,v;t)值可以很好反應出頂點u和v之間在t時間發(fā)生鏈接概率的變化情況。
步驟4:為了使共同鄰居方法能夠適應圖流數據,本文設計了一種為每個頂點建立哈希后排好序的鄰接頂點池的方法來減少比較鄰接頂點時間復雜度。給定一個圖流數據g(t),對數據中的每條邊的兩個頂點u和v,如果u沒有鄰接頂點池過則為其生成,并將v的哈希值h(v)插入u的鄰接頂點池中;如果頂點u有鄰接頂點池,將v的哈希值h(v)插入到u的鄰接頂點池中的適當位置,鄰接頂點池按照哈希值的大小從小到大進行排序。同樣的,如果v沒有鄰接頂點池過則為其生成,并將u的哈希值h(u)插入v的鄰接頂點池中;如果頂點v有鄰接頂點池,將u的哈希值h(u)插入到v的鄰接頂點池中的適當位置,鄰接頂點池按照哈希值的大小從小到大進行排序。
步驟5:要想快速的估計圖流數據中的共同鄰居,首先想到會是通過抽樣來估計。即從每個頂點的共同鄰居中抽取出一部分作為樣本,通過求頂點樣本之間的共同鄰居來估計總體中的共同鄰居的數量。樣本相對于總體數據來說要小了不少,因此可以提高數據處理的速度使共同鄰居法能夠適應圖流數據。但是問題來了,應該如何進行抽樣才能使樣本更好的體現總體,才能使準確率不降低太多?首先想到的是按固定的比例進行隨機采樣,這樣樣本最能反映總體。但是在現實環(huán)境中的圖中度的分布很多時候是一種冪律分布或者說是長尾分布,也就是說很少一部分的頂點卻包含了大部分的邊,很多頂點只有一條邊。如果按照20%比例采樣,這些度大的頂點會可以取到很好的樣本,但是度為5以下的頂點根本采不到樣本。根據長尾理論很多新鏈接的產生會發(fā)生在這些度數很小的頂點,而事實也是如此。為了解決這種情況,本專利采用不等比例采樣與等比例采樣相結合的方法。
本發(fā)明的一個示例,采用圖7中一個有向圖示例進行說明。圖7中為一個為了測試系統(tǒng)而設計的小的有向圖數據。
本發(fā)明方法的具體實施步驟如下:
步驟1:首先為了便于計算,算法首先設計了一個哈希算法:h:u∈v→[0,1]。輸入頂點u,輸出一個0到1的數作為頂點u的哈希值,哈希函數的映射可以是基于之前網絡中頂點的活躍度,或者共同鄰居的數量,可以根據不同的網絡進行不同的設置,每個頂點對應唯一的值。如圖1所示,頂點v1、v2通過哈希映射之后的哈希值變?yōu)閔(1)=0.234、h(2)=0.324
步驟2:由于邊序列
步驟3:本專利設計了一個表示兩個頂點u和v之間的關系的動態(tài)變化的參數如表3,稱作活躍權重wuv(t),其表達式為:
wu,v(0)=0,δ=1,φ=0.5(2)
式(1)edge(u,v)∈g(t)表示頂點u與v之間在時刻t存在連邊。
步驟3-1:權重wuv(t)的變化分為三種情形,第一種例如圖2中的頂點v0在其時間戳t=9時與頂點v30發(fā)生了鏈接,假設w0,30(9)=0.36,則此時w0,30(9)=0.36+1=1.36,并將結果保存到二維mat中;第二種情況當t=10,如圖4頂點v0的鄰接矩陣哈希值存儲池中r(v0)發(fā)生了更新,并且頂點v30仍然在r(v0)中則w0,30(10)=2.36,第三種情況為r(v0)刪除頂點v30的哈希值h(v30)此時w0,30(16)=w0,30(15)·0.5=5.36×0.5=2.68。權重矩陣的更新策略是為了增大在δt范圍內的與頂點v0相鏈接的頂點的權重,是為了在快速演進的圖流中使兩頂點最近發(fā)生鏈接越多越可能在計算時獲得更高的分數,并且總體發(fā)生鏈接情況越多在計算時獲得更高的分數,而分數越高增大兩個頂點都共同相關的概率。
步驟3-2:當需要在線的計算兩頂點相似性得分時只需比較每個頂點的共同鄰居哈希值存儲池的相同個數來計算,計算公式為
cnuv=|r(u)∩r(v)|(5)
式(5)中r(u)與r(v)分別表示頂點u和v的鄰接頂點集的總體,cnuv表示頂點u和v的共同鄰居得分。
步驟4:圖流數據在以用共同鄰居作為預測的評價指標時,需要計算兩兩頂點之間的共同鄰居的個數,需要對兩個頂點的鄰接頂點一一進行比較,時間復雜度為o(n2),在處理大量快速的圖流數據并且進行在線預測時就顯得太慢。為了使共同鄰居方法能夠適應圖流數據,本文設計了一種為每個頂點建立哈希后排好序的鄰接頂點池的方法來減少比較鄰接頂點的時間復雜度。
表1.時間t的頂點相關度權重矩陣
步驟4-1:給定一個圖流數據g(t),對數據中的每條邊的兩個頂點u和v,如果u沒有鄰接頂點池則為其生成,并將v的哈希值h(v)插入u的鄰接頂點池中;如果頂點u有鄰接頂點池,將v的哈希值h(v)插入到u的鄰接頂點池中的適當位置,其中鄰接頂點池按照哈希值的大小從小到大進行排序。同樣的,如果v沒有鄰接頂點池則為其生成,并將u的哈希值h(u)插入v的鄰接頂點池中;如果頂點v有鄰接頂點池,將u的哈希值h(u)插入到v的鄰接頂點池中的適當位置,其中鄰接頂點池按照哈希值的大小從小到大進行排序。如圖6,h(v56)按照折半查找的方式插入到頂點v1的鄰接頂點池中
步驟4-2:當頂點的鄰接頂點池都按照順序排列好之后,再進行計算共同鄰居時就會將時間復雜度降為o(n)。計算共同頂點的策略是利用兩個游標,如圖7.
步驟5:要想快速的估計圖流數據中的共同鄰居,首先想到會是通過抽樣來估計。即從每個頂點的共同鄰居中抽取出一部分作為樣本,通過求頂點樣本之間的共同鄰居來估計總體中的共同鄰居的數量。樣本相對于總體數據來說要小了不少,因此可以提高數據處理的速度使共同鄰居法能夠適應圖流數據。首先想到的是按固定的比例進行隨機采樣,這樣樣本最能反映總體。但是在現實環(huán)境中的圖中度的分布很多時候是一種冪律分布或者說是長尾分布,也就是說很少一部分的頂點卻包含了大部分的邊,很多頂點只有一條邊。如果按照20%比例采樣,這些度大的頂點會可以取到很好的樣本,但是度為5以下的頂點根本采不到樣本。根據長尾理論很多新鏈接的產生會發(fā)生在這些度數很小的頂點,而事實也是如此。
步驟5-1:為了解決這種情況,本文采用不等比例采樣與等比例采樣相結合的方法。為了方便采樣,對頂點集v中的每個頂點建立一個鄰接頂點池r(·),并獲取r(·)的長度li,并將li添加到鄰接頂點池的長度集l中。從l中選出可以作為拐點的值ld,將頂點分成v1={v∈v|lv≥ld},v2={v∈v|lv<ld}(其中l(wèi)v為v的鄰接頂點池的長度也就是度的大小)的兩個集合。如圖10中將頂點分成了兩類,左邊一類為大度結點,右邊一類為小度結點。
步驟5-2:對于v1中的頂點,頂點之間的共同鄰居計算采用等比抽樣,利用定理1可得估計的共同鄰居值。
定理1.r(u)與r(v)分別表示頂點u和v的鄰接頂點集的總體,p代表采樣率,因此兩個大度頂點u和v的共同鄰居的估計值cnuv,公式如下:
如圖11對于大度結點v2,隨機按照比率p隨機挑選出|r(u)|·p個頂點作為參與計算的鄰接頂點。
步驟5-3:當兩個頂點都是集合v2中的頂點,由于其鄰接頂點電池并不會很大,因此頂點之間的共同鄰居可由共同鄰居計算公式計算,即
cnuv=|r(u)∩r(v)|u,v∈v2(7)
步驟5-4::對于頂點u∈v1,v∈v2采用不等比例采樣估計。采樣率p等于頂點v的鄰接頂點集的大小lv與頂點u的鄰接頂點集大小lu的比值即
定理2.r(u)與r(v)分別表示頂點u和v的鄰接頂點集的總體,則頂點頂點u和v的共同鄰居估計值cnuv為,
如圖10中的頂點v9和v68分別屬于小度頂點集v2與大度頂點集v1,如果此時的|r(9)|=10,|r(9)|=253,因此根據定理2可得出