鏈接分析之Google PageRank 算法

一、引言

1. 鏈接分析算法

鏈接分析是指源于對(duì)Web結(jié)構(gòu)中超鏈接的多維分析座硕。在圖網(wǎng)絡(luò)的鏈接分析中闰挡,存在兩類模型:

  • 隨機(jī)游走模型:網(wǎng)頁(yè)節(jié)點(diǎn)通過(guò)鏈接進(jìn)行跳轉(zhuǎn),對(duì)應(yīng)跳轉(zhuǎn)的概率析校;這類模型主要基于PageRank构罗,如隨機(jī)游走模型(random walk)、主題敏感PageRank勺良、智能游走模型及偏置游走模型绰播;
  • 子集傳播模型:網(wǎng)頁(yè)劃分子集,給予特殊子集內(nèi)網(wǎng)頁(yè)初始權(quán)重尚困,根據(jù)特殊子集內(nèi)網(wǎng)頁(yè)與其他網(wǎng)頁(yè)的鏈接關(guān)系蠢箩,將權(quán)值傳遞到其他網(wǎng)頁(yè)。這類模型包括Hilltop算法事甜、HITS算法谬泌、PHITS算法。
    算法之間關(guān)系如下:

    其中的兩個(gè)算法最為經(jīng)典逻谦,一個(gè)是PageRank算法掌实,另外一個(gè)為HITS(Hyperlink - Induced Topic Search)算法。本文先介紹PageRank算法邦马,在后續(xù)文章中會(huì)對(duì)HITS算法原理做一簡(jiǎn)單介紹贱鼻。

2. PageRank算法背景及應(yīng)用

隨著網(wǎng)絡(luò)信息量越來(lái)越龐大,如何有效的搜索出用戶真正需要的信息非常重要滋将。自1998年搜索引擎網(wǎng)站Google創(chuàng)立以來(lái)邻悬,網(wǎng)絡(luò)搜索引擎稱為解決上述問(wèn)題的主要手段。
1998年随闽,美國(guó)斯坦福大學(xué)博士生Larry Page和Sergey Brin創(chuàng)立了Google公司父丰,他們核心技術(shù)是通過(guò)PageRank技術(shù)對(duì)海量的網(wǎng)頁(yè)進(jìn)行重要性分析。該技術(shù)利用網(wǎng)頁(yè)相互鏈接的關(guān)系對(duì)網(wǎng)頁(yè)進(jìn)行組織掘宪,確定出每個(gè)網(wǎng)頁(yè)的重要級(jí)別(Page Rank)蛾扇。當(dāng)用戶進(jìn)行搜索時(shí),Google找出符合搜索條件的網(wǎng)頁(yè)魏滚,并按它們的PageRank大小依次列出镀首。用戶一般在顯示結(jié)果的第一頁(yè)或者前幾頁(yè)就能找到真正有用的結(jié)果。在 Google技術(shù)的發(fā)展基礎(chǔ)上鼠次, PR只是目前頁(yè)面排序的一個(gè)小小的權(quán)重更哄,谷歌最新的算法稱為企鵝算法(Google Penguin)靖秩。
形象的解釋,PageRank的基本原理是:如果網(wǎng)頁(yè)A鏈接到網(wǎng)頁(yè)B竖瘾,則認(rèn)為“網(wǎng)頁(yè)A投了網(wǎng)頁(yè)B”一票,如果網(wǎng)頁(yè)A級(jí)別高花颗,則網(wǎng)頁(yè)B級(jí)別也相應(yīng)的高捕传。
PageRank除了網(wǎng)站搜索之外,還有很多其他應(yīng)用扩劝。更進(jìn)一步說(shuō)庸论,只要有圖譜,就可以使用PageRank棒呛。以下為一些應(yīng)用舉例:

  • 社交網(wǎng)絡(luò):評(píng)估社交網(wǎng)絡(luò)節(jié)點(diǎn)影響力聂示,如尋找關(guān)系網(wǎng)中的牛人;基于用戶的相似度的內(nèi)容推薦簇秒、可以挖掘用戶的價(jià)值鱼喉、用戶的社交影響力等
  • 生物領(lǐng)域:基因、蛋白研究趋观,如通過(guò)PageRank確定七個(gè)與遺傳有關(guān)的腫瘤基因(Google Goes Cancer: Improving Outcome Prediction for Cancer Patients by Network-Based Ranking of Marker Genes )扛禽;
  • 體育運(yùn)動(dòng):評(píng)估特定體育運(yùn)動(dòng)項(xiàng)目中歷史最佳球隊(duì)或球員(1968年文章);
  • 神經(jīng)科學(xué):評(píng)估不同大腦區(qū)域之間的聯(lián)結(jié)和重要性皱坛;
  • 交通網(wǎng)絡(luò):預(yù)測(cè)城市的交通流量和人流動(dòng)向编曼;
  • 推薦系統(tǒng):在推薦系統(tǒng)中,用戶行為數(shù)據(jù)可以表示成圖的形式剩辟,具體來(lái)說(shuō)是二部圖掐场。用戶的行為數(shù)據(jù)集由一個(gè)個(gè)(u,i)二元組組成,表示為用戶u對(duì)物品i產(chǎn)生過(guò)行為贩猎。用戶對(duì)他產(chǎn)生過(guò)行為的物品的興趣度是一樣的熊户,也就是只考慮“感興趣”O(jiān)R“不感興趣”。用G(V, E)來(lái)表示這個(gè)圖融欧,則頂點(diǎn)集V=U∪I敏弃,圖中的邊則是由數(shù)據(jù)集中的二元組確定。二元組(u, i)表示u對(duì)i有過(guò)行為噪馏,則在圖中表現(xiàn)為有邊相連麦到,即e(u,i)。對(duì)u進(jìn)行推薦物品欠肾,就轉(zhuǎn)化為計(jì)算用戶頂點(diǎn)u和與所有物品頂點(diǎn)之間的相關(guān)性瓶颠,然后取與用戶沒(méi)有直接邊相連的物品,按照相關(guān)性的高低生成推薦列表刺桃。

二粹淋、原始算法原理

PageRank的核心思想

  • 如果一個(gè)網(wǎng)頁(yè)被很多其他網(wǎng)頁(yè)鏈接到,則說(shuō)明這個(gè)網(wǎng)頁(yè)很重要,也就是PageRank值會(huì)相對(duì)較高桃移;
  • 如果一個(gè)PageRank很高的網(wǎng)頁(yè)鏈接到一個(gè)其他的網(wǎng)頁(yè)屋匕,則鏈接到的網(wǎng)頁(yè)的PageRank 值會(huì)相應(yīng)的提高。
    如下圖借杰,每個(gè)球代表一個(gè)網(wǎng)頁(yè)过吻,球的大小反應(yīng)了網(wǎng)頁(yè)的PageRank值的大小。指向網(wǎng)頁(yè)B和網(wǎng)頁(yè)E的鏈接很多蔗衡,所以B和E的PageRank值較高纤虽,另外,雖然很少有網(wǎng)頁(yè)指向C绞惦,但是最重要的網(wǎng)頁(yè)B指向了C逼纸,所以C的PageRank值比E還要大。


PageRank算法預(yù)先給每個(gè)網(wǎng)頁(yè)設(shè)定一個(gè)PR值济蝉,PR值物理意義上代表一個(gè)網(wǎng)頁(yè)被訪問(wèn)的概率杰刽,常規(guī)設(shè)置為1/N,N為網(wǎng)頁(yè)總數(shù)堆生。所有網(wǎng)頁(yè)的PR值總和為1专缠。多個(gè)網(wǎng)頁(yè)的連接可以認(rèn)為是一個(gè)有向圖(不含權(quán)重與時(shí)間,圖為靜態(tài))淑仆。
第1步:假設(shè)有5個(gè)網(wǎng)頁(yè)涝婉,分別用A, B, C, D, E表示:


第2步:對(duì)網(wǎng)頁(yè)進(jìn)行爬蟲(chóng)決定鏈接關(guān)系如下圖

第3步:給每個(gè)網(wǎng)頁(yè)的rank賦值為1/N,N為網(wǎng)頁(yè)個(gè)數(shù)蔗怠,此例中為5墩弯,所以每個(gè)網(wǎng)頁(yè)的Rank值為0.2.

第4步:通過(guò)將鏈接到它的每個(gè)頁(yè)面的權(quán)重除以從引用頁(yè)面發(fā)出的鏈接數(shù)量,連續(xù)更新每個(gè)頁(yè)面的rank寞射。以E為例渔工,分別從C, D出發(fā)桥温,E有兩個(gè)進(jìn)入的鏈接引矩。因?yàn)镃可到達(dá)三個(gè)頁(yè)面,頁(yè)面C貢獻(xiàn)了1/3的Rank給頁(yè)面E侵浸;同理旺韭,頁(yè)面D貢獻(xiàn)了1/2 Rank給頁(yè)面E,所以E的rank更新如下:

如果一個(gè)頁(yè)面沒(méi)有出去的鏈接掏觉,則其權(quán)重平均分配到剩余節(jié)點(diǎn)区端,如示例中E鲫骗,E的rank均分值A(chǔ)权旷, B, C盗似, D。之所以均分是因?yàn)榱ち冢?dāng)用戶到達(dá)一個(gè)沒(méi)有外部鏈接的網(wǎng)站后危虱,會(huì)繼續(xù)搜索其他網(wǎng)頁(yè)。





第5步:重復(fù)第4步直到頁(yè)面rank不在發(fā)生變化

:在實(shí)際應(yīng)用中唐全,PageRank算法會(huì)添加一個(gè)阻尼系數(shù)來(lái)模擬用戶停止搜索的情況槽地,在添加阻尼系數(shù)后,一個(gè)網(wǎng)頁(yè)的PR值計(jì)算如下:

其中是所有對(duì)網(wǎng)頁(yè)有出鏈的網(wǎng)頁(yè)集合(進(jìn)入的節(jié)點(diǎn)集合)芦瘾, 是網(wǎng)頁(yè)的出鏈數(shù)目,為網(wǎng)頁(yè)總數(shù)集畅,一般取0.85近弟。根據(jù)上述公式,反復(fù)計(jì)算網(wǎng)頁(yè)P(yáng)R值挺智,在不斷迭代穩(wěn)定時(shí)祷愉,為最終結(jié)果。

三赦颇、PageRank算法變種

1. 無(wú)向圖的PageRank

無(wú)向圖的PageRank統(tǒng)計(jì)上與圖的鏈接分布(degree distribution)相近二鳄,但又存在不同。假定R是PageRank向量媒怯,D是鏈接分布向量订讼。
D=\frac{1}{2|E|}\left[ \begin{matrix} deg(P_1) \\ deg(p_2) \\ \vdots\\ deg(p_N)\\ \end{matrix} \right] \tag{3}
deg(p_i)表示頁(yè)面p_i的鏈接,E為無(wú)向圖的邊集合扇苞,|E|為圖的總邊數(shù)欺殿。

2. 主題敏感PageRank(Topic-Sensitive PageRank)

PageRank算法遵循隨機(jī)游走模型,即用戶在瀏覽某網(wǎng)頁(yè)時(shí)鳖敷,如果希望跳轉(zhuǎn)到其他頁(yè)面脖苏,可隨機(jī)選擇本網(wǎng)頁(yè)包含的某個(gè)鏈接,進(jìn)入另外一個(gè)頁(yè)面定踱,與查詢搜索的主題無(wú)關(guān)棍潘。主題敏感PageRank引入更符合現(xiàn)實(shí)的假設(shè):一般用戶會(huì)對(duì)特定領(lǐng)域感興趣,當(dāng)瀏覽某一網(wǎng)頁(yè)時(shí)崖媚,這個(gè)頁(yè)面與主題相關(guān)亦歉;當(dāng)用戶瀏覽完畢后,希望跳轉(zhuǎn)到主題類似的鏈接至扰。主題敏感PageRank將用戶興趣鳍徽、頁(yè)面主題以及鏈接所指向網(wǎng)頁(yè)與當(dāng)前網(wǎng)頁(yè)主題相似程度綜合考慮而建立模型。
主題敏感PageRank引入16類主題敢课,對(duì)于某網(wǎng)頁(yè)阶祭,對(duì)應(yīng)某個(gè)主題類型都有相應(yīng)的PageRank分值绷杜,即每個(gè)網(wǎng)頁(yè)會(huì)被賦予16個(gè)主題相關(guān)的PageRank分值。主題敏感與查詢相關(guān)濒募,在接收到用戶查詢后鞭盟,主題敏感PageRank需要分類器,計(jì)算該查詢隸屬于事先定義好的16個(gè)主題的隸屬度瑰剃。16大主題如下:

ODP(Open Directory Project)上16大主題

ODP(Open Directory Project)是人工整理的多層級(jí)網(wǎng)頁(yè)分類導(dǎo)航站點(diǎn)齿诉,在頂級(jí)的16個(gè)大分類下還有更細(xì)致的小粒度分類結(jié)構(gòu),在最底層目錄下晌姚,人工收集了符合該目錄主題的精選高質(zhì)量網(wǎng)頁(yè)地址粤剧,以供互聯(lián)網(wǎng)用戶導(dǎo)航尋址。主題敏感PageRank采用了ODP最高級(jí)別的16個(gè)分類類別作為事先定義的主題類型挥唠。其計(jì)算流程如下:
(1) 確定話題分類:參考IDP網(wǎng)站抵恋;
(2)網(wǎng)頁(yè)主題歸屬:將每個(gè)頁(yè)面歸入最合適的分類,歸類方法如使用TF-IDF 或聚類后人工歸類宝磨。每個(gè)頁(yè)面會(huì)被歸屬到一類主題弧关;
(3)分主題計(jì)算網(wǎng)頁(yè)的PageRank向量:在計(jì)算網(wǎng)頁(yè)在特定類別的PageRank分值時(shí),在每個(gè)類別中網(wǎng)頁(yè)劃分為兩個(gè)集合唤锉,一個(gè)集合是ODP對(duì)應(yīng)分類主題下所包括的所有網(wǎng)頁(yè)世囊,即人工精選的高質(zhì)量網(wǎng)頁(yè),可以稱之為集合S窿祥,剩下的網(wǎng)頁(yè)放入另外一個(gè)集合內(nèi)株憾,可稱之為集合T。在計(jì)算PageRank時(shí)晒衩,由于集合S內(nèi)的網(wǎng)頁(yè)能夠很好地表征分類主題号胚,所以賦予較大的跳轉(zhuǎn)概率值。通過(guò)這種設(shè)定浸遗,集合S內(nèi)的網(wǎng)頁(yè)根據(jù)鏈接關(guān)系向集合T中網(wǎng)頁(yè)傳遞權(quán)值猫胁,因?yàn)橹苯佑墟溄又赶虻耐黝}類似,這樣就將與該分類主題內(nèi)容相似的網(wǎng)頁(yè)賦予較高的PageRank值跛锌,而無(wú)關(guān)的網(wǎng)頁(yè)則賦予較低權(quán)重的PageRank分值弃秆。
對(duì)于相同的網(wǎng)頁(yè)1,在不同類別的集合中髓帽,所計(jì)算出的PageRank不同

假設(shè)有個(gè)編號(hào)為1號(hào)的網(wǎng)頁(yè)菠赚,其被列為ODP目錄中的藝術(shù)類別中,在對(duì)藝術(shù)類別進(jìn)行PageRank計(jì)算時(shí)郑藏,1號(hào)網(wǎng)頁(yè)在集合S內(nèi)衡查,計(jì)算結(jié)束后,該網(wǎng)頁(yè)獲得的PageRank分值為0.5必盖。當(dāng)計(jì)算體育和商業(yè)類別的主題PageRank分值時(shí)拌牲,1號(hào)網(wǎng)頁(yè)在集合T中俱饿,獲得了相應(yīng)的集合S中網(wǎng)頁(yè)傳遞的權(quán)值,分別為0.02和0.01塌忽。在所有類別計(jì)算結(jié)束后拍埠,1號(hào)網(wǎng)頁(yè)獲得了3個(gè)不同主題對(duì)應(yīng)的PageRank分值,組成一個(gè)主題PageRank向量[0.5, 0.02, 0.01]土居。
(4)在線相似度計(jì)算:在用戶提交搜索時(shí)枣购,確定用戶的主題傾向,以選擇合適的Rank向量擦耀。例如用戶輸入查詢請(qǐng)求“喬丹”棉圈,“喬丹”隸屬于體育類別的概率為0.6, 娛樂(lè)類別的概率為0.1眷蜓, 商業(yè)類別的概率為0.3迄损,那么查詢條件的類別概率向量為[0.6, 0.1, 0.3]。
同時(shí)账磺,搜索系統(tǒng)讀取包含“喬丹”的所有網(wǎng)頁(yè),對(duì)于每個(gè)網(wǎng)頁(yè)痊远,利用計(jì)算好的分類主題PageRank向量與查詢條件的類別概率向量相乘垮抗,得到相似度。假定網(wǎng)頁(yè)A的分類主題PageRank向量為[0.2,0.3,0.1]碧聪,則相似度為:

對(duì)于其他網(wǎng)頁(yè)類似冒版,計(jì)算所搜尋到網(wǎng)頁(yè)相似度,按照相似度由高到低排序輸出逞姿,作為搜索結(jié)果返回到用戶辞嗡。

3. PersonalRank

在推薦系統(tǒng)中,目標(biāo)一般是向用戶推薦商品滞造,如在購(gòu)物網(wǎng)站中续室,需要根據(jù)用戶歷史購(gòu)買行為,向用戶推薦實(shí)際的商品谒养;在社交網(wǎng)站中挺狰,推薦的可能是用戶,圖展示如下:


A买窟、B丰泊、C表示三個(gè)用戶,a始绍、b瞳购、c、d表示四個(gè)商品亏推,中間聯(lián)系表示用戶與商品之間有過(guò)關(guān)聯(lián)学赛,推薦的目的是從商品列表中向指定的用戶推薦用戶未接觸過(guò)的商品年堆。 推薦算法種類很多,包括協(xié)同過(guò)濾(基于用戶的協(xié)同過(guò)濾罢屈、基于物品的協(xié)同過(guò)濾)和其他算法嘀韧。在協(xié)同過(guò)濾中,用戶與商品之間的關(guān)系表示成二維矩陣(用戶商品矩陣)缠捌,而在基于圖的推薦算法中锄贷,上述關(guān)系表示為二部圖的形式。
PersonalRank算法對(duì)每個(gè)節(jié)點(diǎn)打分曼月,具體講谊却,算法不區(qū)分用戶和商品。若計(jì)算用戶A對(duì)所有商品的感興趣程度轉(zhuǎn)變?yōu)閷?duì)用戶A計(jì)算各個(gè)節(jié)點(diǎn)B哑芹、C炎辨、a、b聪姿、c碴萧、d的重要程度。
具體的過(guò)程如下(以用戶A為例):

  • 初始化:
    PR(A)=1, PR(B)=0, PR(C)=0, PR(a)=0, PR(b)=0, PR(c)=0, PR(d)=0
  • 選擇PR值不為0的節(jié)點(diǎn)開(kāi)始末购,停在當(dāng)前節(jié)點(diǎn)的概率為1-\alpha破喻,往前走的概率為\alpha
    • 從A開(kāi)始,A到a盟榴、c的概率為0.5曹质, 則PR(a)=PR(c)= \alpha\times PR(A)\times 0.5, A的PR值變?yōu)?1-\alpha
    • 此時(shí)PR值不為0的節(jié)點(diǎn)為A擎场、a羽德、c,從這三點(diǎn)出發(fā)迅办,繼續(xù)上述過(guò)程宅静,直到收斂為止。
      節(jié)點(diǎn)PR的更新公式為:
      j\neq u, PR(j)=\alpha \sum_{i \in in(j)}\frac{PR(i)}{|out(i)|};
      j=u, PR(j)=(1-\alpha)+\alpha \sum_{i \in in(j)}\frac{PR(i)}{|out(i)|};

四站欺、PageRank算法R及python實(shí)現(xiàn)

1. R實(shí)現(xiàn):igraph包的page_rank函數(shù)

示例:

require(igraph)
g <- sample_gnp(20, 5/20, directed=TRUE)
#plot(g, layout=layout_with_kk, vertex.color="green")
page_rank(g)$vector

結(jié)果:

> page_rank(g)$vector
 [1] 0.02341596 0.02631466 0.01231889 0.06031833 0.05306684 0.02874900 0.04125774
 [8] 0.05669780 0.06568727 0.03468001 0.04879063 0.10330288 0.03968495 0.04109741
[15] 0.03534523 0.04664756 0.04055067 0.08679532 0.05055317 0.10472569

2. Python實(shí)現(xiàn)

使用第三方模塊python-graph坏为,python-graph模塊實(shí)現(xiàn)了很多圖算法,使用前需要安裝镊绪,代碼如下:

pip3 install graphviz
pip3 install python-graph-core
pip3 install python-graph-dot

python版本的算法實(shí)現(xiàn)帶阻尼系數(shù)的pagerank:

# coding=utf-8

# python-graph https://code.google.com/p/python-graph/

# Import graphviz
import graphviz as gv #可視化graph

# Import pygraph
from pygraph.classes.digraph import digraph
from pygraph.readwrite.dot import write

# Define pagerank function
def pagerank(graph, damping_factor=0.85, max_iterations=100, \
             min_delta=0.00001):
    """
    Compute and return the PageRank in an directed graph.

    @type  graph: digraph
    @param graph: Digraph.

    @type  damping_factor: number
    @param damping_factor: PageRank dumping factor.

    @type  max_iterations: number
    @param max_iterations: Maximum number of iterations.

    @type  min_delta: number
    @param min_delta: Smallest variation required for a new iteration.

    @rtype:  Dict
    @return: Dict containing all the nodes PageRank.
    """

    nodes = graph.nodes()
    graph_size = len(nodes)
    if graph_size == 0:
        return {}
    # value for nodes without inbound links
    min_value = (1.0-damping_factor)/graph_size

    # itialize the page rank dict with 1/N for all nodes
    #pagerank = dict.fromkeys(nodes, 1.0/graph_size)
    pagerank = dict.fromkeys(nodes, 1.0)

    for i in range(max_iterations):
        diff = 0 #total difference compared to last iteraction
        # computes each node PageRank based on inbound links
        for node in nodes:
            rank = min_value
            for referring_page in graph.incidents(node):
                rank += damping_factor * pagerank[referring_page] / \
                        len(graph.neighbors(referring_page))

            diff += abs(pagerank[node] - rank)
            pagerank[node] = rank

        print("This is NO.%s iteration" % (i+1))
        print (pagerank)
        print("")

        #stop if PageRank has converged
        if diff < min_delta:
            break

    return pagerank

# Graph creation
gr = digraph()

# Add nodes and edges
gr.add_nodes(["A","B","C","D","E"])

gr.add_edge(("A","B"))
gr.add_edge(("A","C"))
gr.add_edge(("B","A"))
gr.add_edge(("B","C"))
gr.add_edge(("B","D"))
gr.add_edge(("C","A"))
gr.add_edge(("C","D"))
gr.add_edge(("C","E"))
gr.add_edge(("D","A"))
gr.add_edge(("D","E"))


# Draw as PNG
# dot = write(gr)
# gvv = gv.readstring(dot)
# gv.layout(gvv,'dot')
# gv.render(gvv,'png','Model.png')

pagerank(gr)

示例結(jié)果:

This is NO.1 iteration
{'A': 1.0216666666666667, 'B': 0.4642083333333334, 'C': 0.5957340277777778, 'D': 0.3303170023148148, 'E': 0.3391760338541666}

This is NO.2 iteration
{'A': 0.4707017282986111, 'B': 0.23004823452690973, 'C': 0.2952285676428675, 'D': 0.17882842728143689, 'E': 0.1896501757600898}

This is NO.3 iteration
{'A': 0.2548305088760476, 'B': 0.13830296627232022, 'C': 0.17748880671614428, 'D': 0.11947433568006494, 'E': 0.13106508790026847}

This is NO.4 iteration
{'A': 0.17025092834409253, 'B': 0.10235664454623933, 'C': 0.13135769383434048, 'D': 0.09621906254116427, 'E': 0.10811111483305796}

This is NO.5 iteration
{'A': 0.1371121641211591, 'B': 0.08827266975149262, 'C': 0.11328325951441552, 'D': 0.0871075132920073, 'E': 0.0991176166781875}

This is NO.6 iteration
{'A': 0.12412820644111042, 'B': 0.08275448773747193, 'C': 0.10620159259642231, 'D': 0.08353755609460337, 'E': 0.09559391257585942}

This is NO.7 iteration
{'A': 0.1190410174348098, 'B': 0.08059243240979416, 'C': 0.10342695492590251, 'D': 0.08213882641178073, 'E': 0.0942133051206792}

This is NO.8 iteration
{'A': 0.11704782763678755, 'B': 0.07974532674563471, 'C': 0.1023398359902312, 'D': 0.08159079610849534, 'E': 0.09367237521000937}

This is NO.9 iteration
{'A': 0.11626688445460587, 'B': 0.07941342589320749, 'C': 0.10191389656294961, 'D': 0.08137607469591118, 'E': 0.09346043577193132}

This is NO.10 iteration
{'A': 0.11596090644167344, 'B': 0.07928338523771122, 'C': 0.10174701105506273, 'D': 0.08129194561628596, 'E': 0.09337739668585598}

This is NO.11 iteration
{'A': 0.11584102250320749, 'B': 0.0792324345638632, 'C': 0.10168162435695777, 'D': 0.08125898336089928, 'E': 0.0933448614961869}

This is NO.12 iteration
{'A': 0.11579405128928147, 'B': 0.07921247179794463, 'C': 0.10165600547402895, 'D': 0.08124606856039251, 'E': 0.09333211402247502}

This is NO.13 iteration
{'A': 0.11577564769855933, 'B': 0.07920465027188772, 'C': 0.10164596784892257, 'D': 0.08124100846756292, 'E': 0.09332711948924231}

This is NO.14 iteration
{'A': 0.11576843706627717, 'B': 0.0792015857531678, 'C': 0.10164203504989867, 'D': 0.08123902589420218, 'E': 0.09332516260250723}

This is NO.15 iteration
{'A': 0.11576561189923809, 'B': 0.07920038505717619, 'C': 0.10164049415670945, 'D': 0.08123824911060093, 'E': 0.09332439588307308}

{'A': 0.11576561189923809,
 'B': 0.07920038505717619,
 'C': 0.10164049415670945,
 'D': 0.08123824911060093,
 'E': 0.09332439588307308}

參考資料

[1] wiki: https://en.wikipedia.org/wiki/PageRank;
[2] Eric Roberts, CS 54N, The Google Page Rank Algorithm;
[3] PageRank算法--從原理到實(shí)現(xiàn): https://www.cnblogs.com/rubinorth/p/5799848.html;
[4] 深入淺出PageRank算法: https://segmentfault.com/a/1190000000711128;
[5] Google的PageRank算法無(wú)所不能?: https://36kr.com/p/214680;
[6] Christof Winter et.al, Google Goes Cancer: Improving Outcome Prediction for Cancer Patients by Network-Based Ranking of Marker Genes, PLOS Computational Biology, 2012.
[7]PageRank 與基于圖的推薦算法: https://donche.github.io/2017/10/31/PageRankNPersonalRank.html;
[8]鏈接分析算法總結(jié): http://www.reibang.com/p/d81bc99f1fe2;
[9]鏈接分析算法之:主題敏感PageRank: https://blog.csdn.net/hguisu/article/details/8005192;
[10] 大話主題敏感PageRank: https://blog.csdn.net/malefactor/article/details/7192168;
[11] PersonalRank:一種基于圖的推薦算法:https://www.cnblogs.com/zhangchaoyang/articles/5470763.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匀伏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝴韭,更是在濱河造成了極大的恐慌够颠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榄鉴,死亡現(xiàn)場(chǎng)離奇詭異履磨,居然都是意外死亡蛉抓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門剃诅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)巷送,“玉大人,你說(shuō)我怎么就攤上這事矛辕⌒︴耍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵聊品,是天一觀的道長(zhǎng)飞蹂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翻屈,這世上最難降的妖魔是什么陈哑? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮伸眶,結(jié)果婚禮上惊窖,老公的妹妹穿的比我還像新娘。我一直安慰自己厘贼,他們只是感情好界酒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著涂臣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪售担。 梳的紋絲不亂的頭發(fā)上赁遗,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音族铆,去河邊找鬼岩四。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哥攘,可吹牛的內(nèi)容都是我干的剖煌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逝淹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耕姊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起栅葡,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茉兰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后欣簇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體规脸,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坯约,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莫鸭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闹丐。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖被因,靈堂內(nèi)的尸體忽然破棺而出卿拴,到底是詐尸還是另有隱情,我是刑警寧澤氏身,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布巍棱,位于F島的核電站,受9級(jí)特大地震影響蛋欣,放射性物質(zhì)發(fā)生泄漏航徙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一陷虎、第九天 我趴在偏房一處隱蔽的房頂上張望到踏。 院中可真熱鬧,春花似錦尚猿、人聲如沸窝稿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伴榔。三九已至,卻和暖如春庄萎,著一層夾襖步出監(jiān)牢的瞬間踪少,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工糠涛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留援奢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓忍捡,卻偏偏與公主長(zhǎng)得像集漾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸脊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容