PageRankPageRankPageRank算法由GoogleGoogleGoogle创始人LarryPageLarry\ PageLarry Page在斯坦福大学时提出,又称PRPRPR,佩奇排名。主要针对网页进行排名,计算网站的重要性优化搜索引擎的搜索结果。PRPRPR值表示其重要性的因子。
数量假设:
当在网页模型图中,一个网页受到的其他网页指向的入链(in−linksin-linksin−links)越多,说明该网页越重要。

质量假设:
当一个质量高的网页指向(out−linksout-linksout−links)一个网页,说明这个被指的网页很重要
入链与出链:

PR(a)i+1=∑j=0nPR(Tj)iL(Tj)PR(a)_{i+1}=\sum_{j=0}^n\frac{PR(T_j)_i}{L(T_j)}PR(a)i+1=j=0∑nL(Tj)PR(Tj)i
- PageRankPageRankPageRank算法的基本想法是在有向图上定义一个随机游走模型,即一阶马尔可夫链,描述随机游走者沿着有向图随机访问各个结点的行为。
- 浏览者在每个网页依照连接出去的超链接以等概率跳转到下一个网页,并在网上持续不断进行这样的随机跳转,这个过程形成随机游走的一阶马尔可夫链。
- 即每次PRPRPR的更新只会考虑一跳距离的网页,当迭代的次数足够多就能通过其他所有的网页信息得出自己的PRPRPR值。
实例:

| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) | PR(D)PR(D)PR(D) |
|---|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 |
i=0i=0i=0,第一轮循环:
先求PR(A)1PR(A)_{1}PR(A)1
PR(A)1=∑j=0nPR(Tj)0L(Tj)=PR(C)0L(C)+PR(D)0L(D)=142+141=38PR(A)_{1}=\sum_{j=0}^n\frac{PR(T_j)_0}{L(T_j)}=\frac{PR(C)_0}{L(C)}+\frac{PR(D)_0}{L(D)}=\frac{\frac{1}{4}}{2}+\frac{\frac{1}{4}}{1}=\frac{3}{8}PR(A)1=j=0∑nL(Tj)PR(Tj)0=L(C)PR(C)0+L(D)PR(D)0=241+141=83
因为指向AAA的节点只有CCC和DDD,所以只考虑这两个节点。L(C)L(C)L(C)表示节点CCC的出链数,图中有两个箭头从CCC发出,所以L(C)=2L(C)=2L(C)=2;同理L(D)=1L(D)=1L(D)=1;
其余节点进行相同的PRPRPR计算:
PR(B)1=∑j=0nPR(Tj)0L(Tj)=PR(A)0L(A)=142=18PR(B)_{1}=\sum_{j=0}^n\frac{PR(T_j)_0}{L(T_j)}=\frac{PR(A)_0}{L(A)}=\frac{\frac{1}{4}}{2}=\frac{1}{8}PR(B)1=j=0∑nL(Tj)PR(Tj)0=L(A)PR(A)0=241=81
PR(C)1=∑j=0nPR(Tj)0L(Tj)=PR(A)0L(A)+PR(B)0L(B)=142+141=38PR(C)_{1}=\sum_{j=0}^n\frac{PR(T_j)_0}{L(T_j)}=\frac{PR(A)_0}{L(A)}+\frac{PR(B)_0}{L(B)}=\frac{\frac{1}{4}}{2}+\frac{\frac{1}{4}}{1}=\frac{3}{8}PR(C)1=j=0∑nL(Tj)PR(Tj)0=L(A)PR(A)0+L(B)PR(B)0=241+141=83
PR(D)1=∑j=0nPR(Tj)0L(Tj)=PR(C)0L(C)=142=18PR(D)_{1}=\sum_{j=0}^n\frac{PR(T_j)_0}{L(T_j)}=\frac{PR(C)_0}{L(C)}=\frac{\frac{1}{4}}{2}=\frac{1}{8}PR(D)1=j=0∑nL(Tj)PR(Tj)0=L(C)PR(C)0=241=81
更新表格:
| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) | PR(D)PR(D)PR(D) |
|---|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 | 1N\frac{1}{N}N1 |
| i=1i=1i=1 | 38\frac{3}{8}83 | 18\frac{1}{8}81 | 38\frac{3}{8}83 | 18\frac{1}{8}81 |
| 排名排名排名 | 1 | 2 | 1 | 2 |
向量化
引入转移概率矩阵/马尔可夫矩阵:
W=ABCDABCD[001/211/20001/2100001/20]W=\begin{matrix} \ \ \ \ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \ D\\ \begin{matrix} A\\B\\C\\D \end{matrix}\begin{bmatrix} 0 &0&1/2&1 \\ 1/2 & 0&0&0\\1/2 & 1&0&0\\0 & 0&1/2&0\end{bmatrix} \end{matrix}W= A B C DABCD01/21/2000101/2001/21000
看第一列,有两个1/21/21/2分别表示AAA跳转到BBB的概率为1/21/21/2、AAA跳转到CCC的概率为1/21/21/2。
即列和为1,第iii行第jjj列表示从节点jjj跳转到节点iii的概率。
- 按列来看WWW矩阵:
每一列的和为111,所以按列看表示转移概率
而转移概率值正是出链的倒数
即若Wij≠0W_{ij}≠0Wij=0,则Wij=1L(j)W_{ij}=\frac{1}{L(j)}Wij=L(j)1- 按行来看WWW矩阵:
若Wij≠0W_{ij}≠0Wij=0,则jjj为指向iii的节点
将上一轮的PRPRPR值定义为VVV:
V=[PR(A)PR(B)PR(C)PR(D)]V=\begin{bmatrix} PR(A) \\ PR(B) \\ PR(C) \\ PR(D)\end{bmatrix}V=PR(A)PR(B)PR(C)PR(D)
所以新一轮的PRPRPR值更新公式为:
Vi+1=W∗ViV_{i+1}=W*V_{i}Vi+1=W∗Vi
所以上述的第一轮迭代向量化如下:
V1=ABCDABCD[001/211/20001/2100001/20]×[1/41/41/41/4]=[3/81/83/81/8]V_1=\begin{matrix} \ \ \ \ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \ D\\ \begin{matrix} A\\B\\C\\D \end{matrix}\begin{bmatrix} 0 &0&1/2&1 \\ 1/2 & 0&0&0\\1/2 & 1&0&0\\0 & 0&1/2&0\end{bmatrix} \end{matrix}\times \begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \end{bmatrix} = \begin{bmatrix} 3/8 \\ 1/8 \\ 3/8 \\ 1/8 \end{bmatrix}V1= A B C DABCD01/21/2000101/2001/21000×1/41/41/41/4=3/81/83/81/8
与之前计算的一致。
看第一行的计算,是计算AAA节点的PRPRPR值:
[001/21][1/41/41/41/4]\begin{bmatrix} 0&0&1/2&1 \end{bmatrix}\begin{bmatrix} 1/4 \\ 1/4 \\ 1/4 \\ 1/4 \end{bmatrix}[001/21]1/41/41/41/4
当左边的第jjj个元素为000时,表示第jjj个元素不是指向AAA的节点,则对PR(A)PR(A)PR(A)无贡献。
当左边的第jjj个元素不为000时,表示第jjj个元素是指向AAA的节点,其值为1/L(j)1/L(j)1/L(j),与右边第jjj个元素相乘:PR(j)/L(j)PR(j)/L(j)PR(j)/L(j)。
PR(A)+=PR(j)/L(j)PR(A)+=PR(j)/L(j)PR(A)+=PR(j)/L(j)
与之前定义的公式一致。
第二次迭代:
V1=ABCDABCD[001/211/20001/2100001/20]×[3/81/83/81/8]=[5/163/165/163/16]V_1=\begin{matrix} \ \ \ \ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \ D\\ \begin{matrix} A\\B\\C\\D \end{matrix}\begin{bmatrix} 0 &0&1/2&1 \\ 1/2 & 0&0&0\\1/2 & 1&0&0\\0 & 0&1/2&0\end{bmatrix} \end{matrix}\times \begin{bmatrix} 3/8 \\ 1/8 \\ 3/8 \\ 1/8 \end{bmatrix} = \begin{bmatrix} 5/16 \\ 3/16 \\ 5/16 \\ 3/16 \end{bmatrix}V1= A B C DABCD01/21/2000101/2001/21000×3/81/83/81/8=5/163/165/163/16
可以看出,向量化简化了迭代的计算。
DeadEnd问题:当某个节点不存在出链,经过nnn轮迭代,所以的节点的PRPRPR值都会变成000。
实例:
现要计算下图的执行PageRankPageRankPageRank算法:

| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) |
|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 13\frac{1}{3}31 | 13\frac{1}{3}31 | 13\frac{1}{3}31 |
| i=1i=1i=1 | |||
| i=2i=2i=2 |
转移概率矩阵为:
W=ABCABC[000101000]W=\begin{matrix} \ \ \ \ \ \ \ \ A\ \ B\ \ C\ \ \ \ \\ \begin{matrix} A\\B\\C \end{matrix}\begin{bmatrix} 0 &0&0 \\ 1 & 0&1\\0 &0&0\end{bmatrix} \end{matrix}W= A B C ABC010000010
新一轮的PRPRPR值为:
PR1=W∗PR0=ABCABC[000101000]×[131313]=[0230]PR_1=W*PR_0=\begin{matrix} \ \ \ \ \ \ \ \ A\ \ B\ \ C\ \ \ \ \\ \begin{matrix} A\\B\\C \end{matrix}\begin{bmatrix} 0 &0&0 \\ 1 & 0&1\\0 &0&0\end{bmatrix} \end{matrix}\times \begin{bmatrix}\frac{1}{3} \\ \\ \frac{1}{3} \\ \\\frac{1}{3} \end{bmatrix} = \begin{bmatrix}0 \\ \\ \frac{2}{3} \\ \\ 0 \end{bmatrix}PR1=W∗PR0= A B C ABC010000010×313131=0320
| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) |
|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 13\frac{1}{3}31 | 13\frac{1}{3}31 | 13\frac{1}{3}31 |
| i=1i=1i=1 | 000 | 23\frac{2}{3}32 | 000 |
| i=2i=2i=2 |
下一轮的PRPRPR值为:
PR1=W∗PR0=ABCABC[000101000]×[0230]=[000]PR_1=W*PR_0=\begin{matrix} \ \ \ \ \ \ \ \ A\ \ B\ \ C\ \ \ \ \\ \begin{matrix} A\\B\\C \end{matrix}\begin{bmatrix} 0 &0&0 \\ 1 & 0&1\\0 &0&0\end{bmatrix} \end{matrix}\times \begin{bmatrix}0 \\ \\ \frac{2}{3} \\ \\\ 0 \end{bmatrix} = \begin{bmatrix}0 \\ \\ 0 \\ \\ 0 \end{bmatrix}PR1=W∗PR0= A B C ABC010000010×032 0=000
| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) |
|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 13\frac{1}{3}31 | 13\frac{1}{3}31 | 13\frac{1}{3}31 |
| i=1i=1i=1 | 000 | 23\frac{2}{3}32 | 000 |
| i=2i=2i=2 | 000 | 000 | 000 |
可以发现,当我们循环多次后,这个模型中所有的PR值都会归为000
解决方法:teleportteleportteleport
我们假设一个没有出链的节点向任何其它节点的转移概率是均等的,然后修正WWW。
修正公式:
W=W+a(en)W = W+a(\frac{e}{n})W=W+a(ne)
实例:修正WWW
W=ABCABC[000101000]W=\begin{matrix} \ \ \ \ \ \ \ \ A\ \ B\ \ C\ \ \ \ \\ \begin{matrix} A\\B\\C \end{matrix}\begin{bmatrix} 0 &0&0 \\ 1 & 0&1\\0 &0&0\end{bmatrix} \end{matrix}W= A B C ABC010000010
根据矩阵WWW,可以得出aaa:
a0=[000]、a1=[111]、a2=[000]a_0=\begin{bmatrix} 0 \\ 0\\0\end{bmatrix}、a_1=\begin{bmatrix} 1 \\ 1\\1\end{bmatrix}、a_2=\begin{bmatrix} 0 \\ 0\\0\end{bmatrix}a0=000、a1=111、a2=000
a=[010010010]a=\begin{bmatrix} 0&1&0 \\ 0&1&0\\0&1&0\end{bmatrix}a=000111000
a(en)=[010010010]∗[131313]=[013001300130]a(\frac{e}{n})=\begin{bmatrix} 0&1&0 \\ 0&1&0\\0&1&0\end{bmatrix}*\begin{bmatrix} \frac{1}{3} \\ \\ \frac{1}{3}\\ \\ \frac{1}{3}\end{bmatrix}=\begin{bmatrix} 0&\frac{1}{3}&0 \\ 0&\frac{1}{3}&0\\0&\frac{1}{3}&0\end{bmatrix}a(ne)=000111000∗313131=000313131000
Wteleport=W+a(en)=[000101000]+[013001300130]=[013011310130]W_{teleport}=W+a(\frac{e}{n})=\begin{bmatrix} 0 &0&0 \\ 1 & 0&1\\0 &0&0\end{bmatrix} +\begin{bmatrix} 0&\frac{1}{3}&0 \\ 0&\frac{1}{3}&0\\0&\frac{1}{3}&0\end{bmatrix}=\begin{bmatrix} 0 &\frac{1}{3}&0 \\ 1 & \frac{1}{3}&1\\0 &\frac{1}{3}&0\end{bmatrix} Wteleport=W+a(ne)=010000010+000313131000=010313131010
从而解决了某顶点无出边导致PR多次迭代为0的问题。
因此,PRPRPR迭代公式更新为:
PRi+1=(W+a(en))∗PRiPR_{i+1}=(W+a(\frac{e}{n}))*PR_iPRi+1=(W+a(ne))∗PRi
节点AAA与其他节点之间无out−linksout-linksout−links,只能点击AAA节点继续访问;这就是SpiderTrapsSpider\ TrapsSpider Traps,这将会导致网站的权重向一个节点偏移(该节点的PRPRPR越来越大)。如下图:

实例:
现要计算下图的执行PageRankPageRankPageRank算法:
| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) |
|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 13\frac{1}{3}31 | 13\frac{1}{3}31 | 13\frac{1}{3}31 |
| i=1i=1i=1 | |||
| i=2i=2i=2 | |||
| i=3i=3i=3 | |||
| i=ni=ni=n |
PR(A)1=PR(A)0L(A)+PR(B)0L(B)+PR(C)0L(C)PR(A)_{1}=\frac{PR(A)_0}{L(A)}+\frac{PR(B)_0}{L(B)}+\frac{PR(C)_0}{L(C)}PR(A)1=L(A)PR(A)0+L(B)PR(B)0+L(C)PR(C)0
而L(A)=1L(A)=1L(A)=1,所以公式可如下:
PR(A)1=PR(A)0+PR(B)0L(B)+PR(C)0L(C)PR(A)_{1}=PR(A)_0+\frac{PR(B)_0}{L(B)}+\frac{PR(C)_0}{L(C)}PR(A)1=PR(A)0+L(B)PR(B)0+L(C)PR(C)0
所以PR(A)PR(A)PR(A)只会越来越大,而其余节点:
PR(B)1=PR(C)0L(C)PR(B)_{1}=\frac{PR(C)_0}{L(C)}PR(B)1=L(C)PR(C)0
PR(C)1=PR(B)0L(B)PR(C)_{1}=\frac{PR(B)_0}{L(B)}PR(C)1=L(B)PR(B)0
可以观察到,PR(B)、PR(C)PR(B)、PR(C)PR(B)、PR(C)都处于变小的趋势。
经过nnn轮更新后:
| 循环次数循环次数循环次数\PR值PR值PR值 | PR(A)PR(A)PR(A) | PR(B)PR(B)PR(B) | PR(C)PR(C)PR(C) |
|---|---|---|---|
| i=0i=0i=0 ,PRPRPR值初始化为1N\frac{1}{N}N1 | 13\frac{1}{3}31 | 13\frac{1}{3}31 | 13\frac{1}{3}31 |
| i=1i=1i=1 | 23\frac{2}{3}32 | 16\frac{1}{6}61 | 16\frac{1}{6}61 |
| i=2i=2i=2 | 56\frac{5}{6}65 | 112\frac{1}{12}121 | 112\frac{1}{12}121 |
| i=3i=3i=3 | 1112\frac{11}{12}1211 | 124\frac{1}{24}241 | 124\frac{1}{24}241 |
| i=ni=ni=n | 111 | 000 | 000 |
会发现权重慢慢的向AAA节点偏移。
解决方法:RandomTeleportRandom\ TeleportRandom Teleport
思想:没有出链的节点会以很小的概率跳转到其他节点。
修正概率转移矩阵WWW:
W=βW+(1−β)eeTnW=βW+(1-β)\frac{ee^T}{n}W=βW+(1−β)neeT
实例:
W=ABCABC[11/21/2001/201/20]W=\begin{matrix} \ \ \ \ \ \ \ \ A\ \ \ \ \ \ B\ \ \ \ \ \ \ C\ \ \ \ \\ \begin{matrix} A\\B\\C \end{matrix}\begin{bmatrix} 1 &1/2&1/2 \\ 0 & 0&1/2\\0 &1/2&0\end{bmatrix} \end{matrix}W= A B C ABC1001/201/21/21/20
根据公式:
W=βABC[11/21/2001/201/20]+(1−β)[1/31/31/31/31/31/31/31/31/3]W = β\begin{matrix}\ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \\ \begin{matrix} \end{matrix}\begin{bmatrix} 1 &1/2&1/2 \\ 0 & 0&1/2\\0 &1/2&0\end{bmatrix} \end{matrix}+(1-β)\begin{matrix} \\ \begin{matrix} \end{matrix}\begin{bmatrix} 1/3 &1/3&1/3 \\ 1/3 & 1/3&1/3\\1/3 &1/3&1/3\end{bmatrix} \end{matrix}W=β A B C 1001/201/21/21/20+(1−β)1/31/31/31/31/31/31/31/31/3
设置β=0.85β=0.85β=0.85:
W=0.85ABC[11/21/2001/201/20]+(1−0.85)[1/31/31/31/31/31/31/31/31/3]W = 0.85\begin{matrix}\ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \\ \begin{matrix} \end{matrix}\begin{bmatrix} 1 &1/2&1/2 \\ 0 & 0&1/2\\0 &1/2&0\end{bmatrix} \end{matrix}+(1-0.85)\begin{matrix} \\ \begin{matrix} \end{matrix}\begin{bmatrix} 1/3 &1/3&1/3 \\ 1/3 & 1/3&1/3\\1/3 &1/3&1/3\end{bmatrix} \end{matrix}W=0.85 A B C 1001/201/21/21/20+(1−0.85)1/31/31/31/31/31/31/31/31/3
=ABC[0.850.4250.425000.42500.4250]+[0.050.050.050.050.050.050.050.050.05]=[0.90.4750.4750.050.050.4750.050.4750.05]=\begin{matrix}\ \ \ A\ \ \ \ \ B\ \ \ \ \ C\ \ \ \ \\ \begin{matrix} \end{matrix}\begin{bmatrix} 0.85 &0.425&0.425 \\ 0 & 0&0.425\\0 &0.425&0\end{bmatrix} \end{matrix}+\begin{matrix} \\ \begin{matrix} \end{matrix}\begin{bmatrix} 0.05 &0.05&0.05 \\ 0.05 & 0.05&0.05\\0.05&0.05&0.05\end{bmatrix} \end{matrix}=\begin{bmatrix} 0.9 &0.475&0.475 \\ 0.05 & 0.05&0.475\\0.05&0.475&0.05\end{bmatrix} = A B C 0.85000.42500.4250.4250.4250+0.050.050.050.050.050.050.050.050.05=0.90.050.050.4750.050.4750.4750.4750.05
将上述修正后的WWW带入更新,就不会出现权重向AAA发生偏移的现象了。
所以,PRPRPR值新的迭代公式更新为:
PRi+1=[βW+(1−β)eeTn]∗PRiPR_{i+1}=[βW+(1-β)\frac{ee^T}{n}]*PR_{i}PRi+1=[βW+(1−β)neeT]∗PRi
综上,最终PRPRPR的迭代公式为:
PRi+1=[β(W+a(en))+(1−β)eeTn]∗PRiPR_{i+1}=[β(W+a(\frac{e}{n}))+(1-β)\frac{ee^T}{n}]*PR_{i}PRi+1=[β(W+a(ne))+(1−β)neeT]∗PRi
优点:
缺点:
上一篇:数组string