首先,咱们将Web作以下抽象:一、将每一个网页抽象成一个节点;二、若是一个页面A有连接直接链向B,则存在一条从A到B的有向边(多个相同连接不重复计算边)。所以,整个Web被抽象为一张有向图。算法
如今假设世界上只有四张网页:A、B、C、D,其抽象结构以下图,显然这个图是强连通的(从任一节点出发均可以到达另外任何一个节点)。数据结构
而后须要用一种合适的数据结构表示页面间的链接关系。PageRank算法是基于这样一种背景思想:被随机冲浪者访问越多的网页质量更可能高,而随机冲浪者在浏览网页时主要经过超连接进行页面跳转,所以咱们须要经过分析超连接组成的图结构来推算每一个网页被访问频率的高低。更直观的讲,一个网页的PangRank值越高,随机冲浪者浏览网页过程当中,停留在该页面的几率越大,该网页越重要。分布式
简单起见,咱们能够假设当一个随机冲浪者停留在某页面时,跳转到页面上每一个被链页面的几率是相同的。例如,上图中A页面链向B、C、D,因此一个用户从A跳转到B、C、D的几率各为1/3。设一共有N个网页,则能够组织这样一个N维矩阵:其中i行j列的值表示用户从页面j转到页面i的几率。这样一个矩阵叫作转移矩阵(Transition Matrix)。上图的四个网页对应的转移矩阵M以下:ide
而后,假定随机冲浪者出于n个页面的初始几率相等,那么初始的几率分布向量就是一个每维均为1/n的n维列向量V0。这里咱们有4个网页,故V0-1=[1/4 , 1/4 , 1/4 , 1/4 ]。大数据
这样,咱们就能够从初始向量V0开始,不断的左乘转移矩阵M,用户在浏览网页时主要经过超连接进行i次跳转后,停留在每一个页面的几率为:Mi*V。直到最后两轮迭代产生的结果向量差别很小时中止。实际中,对于Web而言,在错误控制在双精度的状况下,迭代50至75次已经足够收敛。.net
下面是前四次跳转过程当中,每次迭代后每一个页面的PageRank值:get
能够看见,随着迭代次数的增长,网页A的PageRank值愈来愈大,趋近与它的极限几率3/9。这也说明了随机冲浪者停留在网页A上的几率相对于网页B、C、D来说较大,该网页也较为重要。it
终止点即为没有任何出链的点,以下图中的C。数据挖掘
若是咱们不加处理,容许终止点存在的话,那么随着PageRank迭代次数的增长,各个网页的PageRank值会趋向于0,从而没法获得任何有关网页相对重要性的信息。io
处理终止点的方法是将终止点及其入链从图中剔除。这样作以后可能会产生更所的终止点,继续迭代剔除终止点。可是最终咱们会获得一个强连通子图,其中全部节点都非终止点。下面咱们以左图为例,进行说明。左图按上述步骤剔除终止点以后,得到右图。
咱们获得右图对应的转移矩阵,并计算图中A、B、C的PageRank值。
咱们获得A、B、C的PageRank值分别为2/九、4/9,3/9,接下来按照刚才删除相反的顺序来计算C和E的PageRank值。因为C最后一个被删除,于是首先计算C的PageRank值。A有三条出链,所以它对C贡献了其1/3的PageRank值。D有三条出链,所以它对C贡献了其1/2的PageRank值。因而C的PageRank值为 。而E的入链就只有C,C的出链只有E,因此E的PageRank值与C相等。
须要注意的是,当前全部节点的PageRank值和已经超过1,所以不能表明随机冲浪者的几率分布,但他们仍然可以反映网页相对重要程度的合理估计值。
采集器陷阱是一系列节点集合,他们虽然没有一个是终止点,可是却没有出链指向该集合以外的其余节点。采集器陷阱致使在计算时将全部的PageRank值都分配给采集器陷阱之内的节点。
以下图所示,C为单节点构成的采集器陷阱及其转移矩阵。
随着迭代的进行,C的PageRank值不断趋向于1,其余非采集器陷阱内节点的PageRank值趋向于0。
处理采集器陷阱的作法是容许每一个随机冲浪者以一个较小的跳转几率随机跳转到一个随机网页,而不必定要沿着当前网页上的出链前进。因而,根据前面的PageRank估计值V和转移矩阵M估计下一次迭代后的PageRank值V’的迭代公式变为:
其中,β是一个选定的常数,一般取值在0.8跟0.9之间。而e是一个份量都为1维数为n的向量,n是Web图中全部节点的个数。βMv表示随机冲浪者以几率β从当前网页选择一个出链前进的状况。(1−β)e/n是一个全部份量都是(1−β)/n的向量,它表明一个新的随机冲浪者已(1−β)的几率随机选择一个网页进行访问。
取β=0.8,上图的迭代公式变为:
下面是前几轮迭代的结果:
做为一个采集器陷阱,C得到了超过一半以上的PageRank值,可是这种效果受到了限制,其余每一个节点也得到了一些PageRank值。
-------------------------------------------------
参考资料:
@王斌_ICTIR老师的《大数据:互联网大规模数据挖掘与分布式处理》及其对应的英文电子书《Mining of Massive Datasets》