PageRank是google搜素算法用到的算法思想。关于PageRank的背景网上有很多,这里不再介绍,下面本文将从以下方面介绍PageRank:
- PageRank原理
- PageRank举例
- PageRank实现及使用networkX调用pagerank算法
- 改进的PageRank算法
一、PageRank原理
PageRank算法主要应用在搜索引擎的搜索功能中,其主要用来计算网页的重要程度,将最重要的网页展示在网页的前面,此算法主要围绕以下两个假设:
①如果存在一个网页,它被许多其他的链接链接到,则说明这个网页比较重要,则此网页的PageRank值比较高。 ②如果存在一个网页,它本身的PageRank值比较高,且此网页又链接了一个网页,则这个被链接的网页比较重要,其PageRank值较高。
PageRank主要基于马尔科夫随机游走的思想,即下一状态只与当前状态有关,与其他状态无关。形式化表示为:若是一个随机过程,
表示第
个状态,则
其计算公式如下:
若图具有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]
下面解释一下这个矩阵的含义:
因为共有4个节点,故,所以:
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 )
不断迭代,直到收敛,则若
的第
个值最大,则说明对应的网页
最重要。比如,若
的第
个值最大,说明
的重要程序最高。
三、 PageRank实现及使用networkX调用pagerank算法
代码内容详见:github.com/Nana0606/da…
代码中有注释,不懂的可以博客下评论。
四、改进的PageRank算法
因为最简单的PageRank算法假设网络图是连通的,这在实际的网络环境中很难达到,因此,如果在真实环境中使用PageRank算法,因为图形不连通的关系,在收敛情况下,
因此,改进版的PageRank将随机跳转概率加入其中,其主要基于的考虑是用户在点击网页的时候不可能沿着一个网页的链接一直点下去,用户用以手动输入网址等改变点击方向,这个手动输入网址而不沿着当前页面继续点击的概率便是跳转概率。
改进版的概率转移矩阵为:
T =αP +(1−α)I T=αP+(1−α)I
其中,
在networkX库中,pagerank函数默认