2010-10-16 65 views
1

我試圖理解Google PageRank背後的概念,並試圖在Python中實現類似的(雖然是初級的)版本。我花了幾個小時熟悉算法,但它仍然不是很清楚。PageRank的Python實現

我所在的特別interesting website,概括的PageRank在Python中實現。但是,我似乎無法理解此頁面上顯示的所有功能的用途。任何人都可以澄清這些功能究竟在做什麼,特別是pageRankeGenerator?

回答

6

我會試着從我的個人筆記給PageRank算法簡單的解釋(定義)。

讓我們說,網頁T1,T2,... Tn的是指向網頁A,然後

PR(A) = (1-d) + d * (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 

其中

  • PR(TI)爲Ti
  • 的PageRank的C(Ti)是來自頁面Ti的輸出鏈接的數量
  • d是傾銷因子範圍0 < d < 1,通常LY設置爲0.85

每個PR(X)可以有起始值,我們通過重複算法〜10-20次,每次頁面調整頁面行列。

A <--> B 
^ /
    \ v 
     C 

回合1
A = 0.15 + 0.85(1/2 + 1/1)= 1.425
B = 0.15 + 0.85(1 /:

爲網頁A,B,C實施例1)= 1
C = 0.15 + 0.85(1/2)= 0.575

輪的總和= 3

回合2
A = 0.15 + 0.85(1/2 + 0.575)= 1.06375
B = 0.15 + 0.85(1.425)= 1.36125
C = 0.15 + 0.85(1/2)= 0.575

輪的總和= 3

回合3
A = 0.15 + 0.85(1.36125/2 + 0.575)= 1.217
B = 0.15 + 0.85(1.06375)= 1.054
C = 0.728

輪的總和= 3

...

+0

好吧,這樣做更有意義。我認爲「回合」與融合步驟是一回事嗎? (即,限制輪次數)。另外,我一直在閱讀的許多論文都使用特徵值,輸出鏈接矩陣(A)和輸入鏈接矩陣(A^T)。這些在上面哪裏適合,甚至有必要? – Julio 2010-10-16 21:08:24

+0

@Louis,是「收集」是收斂步驟。我的線性代數有點生疏,但我認爲特徵值只是計算出的頁面排名。在我的例子中,我使用了一個頁面的公式。如果我們將其重寫爲n個頁面的公式,我們可以得到n維(或矩陣)表示。海事組織矩陣表達式第一次難以掌握。 – 2010-10-16 21:30:00

+0

還有一個問題:爲什麼你不將更新後的值傳播到第2輪?例如,在第1輪中,您發現B = 1,C = 0.575。但是在第二輪中,你有A = 0.15 + 0.85(1/2 + 0.575)。爲什麼你仍然使用1/2而不是1,就像在第1輪中發現的那樣?我正在上課,第1輪是正確的,但後續輪次與您所顯示的不符。 http://pastebin.com/raw.php?i=mQXjXyRS – Julio 2010-10-17 00:10:25