2010-10-16 56 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