PageRank原理、举例、实现及使用networkX库简单调用

2,130 阅读4分钟
原文链接: blog.csdn.net

PageRank是google搜素算法用到的算法思想。关于PageRank的背景网上有很多,这里不再介绍,下面本文将从以下方面介绍PageRank:

  • PageRank原理
  • PageRank举例
  • PageRank实现及使用networkX调用pagerank算法
  • 改进的PageRank算法

一、PageRank原理


PageRank算法主要应用在搜索引擎的搜索功能中,其主要用来计算网页的重要程度,将最重要的网页展示在网页的前面,此算法主要围绕以下两个假设:

①如果存在一个网页,它被许多其他的链接链接到,则说明这个网页比较重要,则此网页的PageRank值比较高。 ②如果存在一个网页,它本身的PageRank值比较高,且此网页又链接了一个网页,则这个被链接的网页比较重要,其PageRank值较高。

PageRank主要基于马尔科夫随机游走的思想,即下一状态只与当前状态有关,与其他状态无关。形式化表示为:若X_0, X_1, X_2,....,X_n是一个随机过程, X_i表示第 i个状态,则

P (X n +1 =x n +1 | X 0 =x 0 ,X 1 =x 1 ,. .., X n =x n )= P( X n +1 =x n +1 | X n =x n ) P(Xn+1=xn+1|X0=x0,X1=x1,...,Xn=xn)=P(Xn+1=xn+1|Xn=xn)

其计算公式如下:
若图具有N个节点,则初始重要性为v_0 = \begin{pmatrix} \frac{1}{N} & \frac{1}{N} & \ldots & \frac{1}{N} \end{pmatrix}^T,假设 P是其转移矩阵,则经过一次转移计算后的网页重要性为v_1 = P^Tv_0,通过以下公式不断迭代计算直到收敛:

v n =P T v n −1 =( P T ) 2 v n −2 =… =(P T ) n −1 v 1 =( P T ) n v 0 vn=PTvn−1=(PT)2vn−2=…=(PT)n−1v1=(PT)nv0
则最后的平稳状态v_n便是网页1,2,3...,N的重要性排名。

二、PageRank举例


假设网页之间的相互链接关系如下:

其转移矩阵P如下:
P =⎡ ⎣⎢ ⎢⎢ ⎢ 0 1 2 0 0 1 2 0 1 0 0 1 2 0 1 1 2 0 0 0 ⎤ ⎦⎥ ⎥⎥ ⎥ P=[01201212012001000010]
下面解释一下这个矩阵的含义:P_{21}表示从B到A的转移概率是 \frac{1}{2},这是因为B指向A和D两个顶点,所以每个顶点的概率是\frac{1}{2}。同样,P_{41}表示从D到C的转移概率为1,因为D指向B,而不指向其他节点,所以概率为1。

因为共有4个节点,故v_0 = \begin{pmatrix} \frac{1}{4} & \frac{1}{4} &\frac{1}{4}& \frac{1}{4} \end{pmatrix}^T,所以:

v 1 =P T v 0 =⎡ ⎣⎢ ⎢⎢ ⎢⎢ 0 1 2 0 1 2 1 2 0 1 2 0 0 1 0 0 0 0 1 0 ⎤ ⎦⎥ ⎥⎥ ⎥⎥ ⎛ ⎝⎜ ⎜⎜ ⎜⎜ 1 4 1 4 1 4 1 4 ⎞ ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ =⎛ ⎝ ⎜ ⎜ ⎜ ⎜ ⎜ 1 8 3 8 3 8 1 8 ⎞ ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ v 1 = P T v 0 = [ 0 1 2 0 0 1 2 0 1 0 0 1 2 0 1 1 2 0 0 0 ] ( 1 4 1 4 1 4 1 4 ) = ( 1 8 3 8 3 8 1 8 )

v 2 =P T v 1 =⎡ ⎣⎢ ⎢⎢ ⎢⎢ 0 1 2 0 1 2 1 2 0 1 2 0 0 1 0 0 0 0 1 0 ⎤ ⎦⎥ ⎥⎥ ⎥⎥ ⎛ ⎝⎜ ⎜⎜ ⎜⎜ 1 8 3 8 3 8 1 8 ⎞ ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ =⎛ ⎝ ⎜ ⎜ ⎜ ⎜ ⎜ 3 16 7 16 5 16 1 16 ⎞ ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ v 2 = P T v 1 = [ 0 1 2 0 0 1 2 0 1 0 0 1 2 0 1 1 2 0 0 0 ] ( 1 8 3 8 3 8 1 8 ) = ( 3 16 7 16 5 16 1 16 )

不断迭代,直到v_n收敛,则若 v_n的第i个值最大,则说明对应的网页i最重要。比如,若v_n的第2个值最大,说明B的重要程序最高。

三、 PageRank实现及使用networkX调用pagerank算法


代码内容详见:github.com/Nana0606/da…
代码中有注释,不懂的可以博客下评论。

四、改进的PageRank算法


因为最简单的PageRank算法假设网络图是连通的,这在实际的网络环境中很难达到,因此,如果在真实环境中使用PageRank算法,因为图形不连通的关系,在收敛情况下,v的值会出现很多0,导致算法效果极差。
因此,改进版的PageRank将随机跳转概率加入其中,其主要基于的考虑是用户在点击网页的时候不可能沿着一个网页的链接一直点下去,用户用以手动输入网址等改变点击方向,这个手动输入网址而不沿着当前页面继续点击的概率便是跳转概率。
改进版的概率转移矩阵为:
T =αP +(1−α)I T=αP+(1−α)I
其中,1-\alpha表示随机跳转的概率, I为所有元素都为1的向量。T仍然是一个马尔科夫链。
在networkX库中,pagerank函数默认\alpha=0.85,可自行更改。