Spark GraphX的图形数据分析(三)

pageRank(PR)算法

  • 用于评估网页链接的质量和数量,以确定该网页的重要性和权威性的相对分数,范围为0到10
  • 从本质上讲,PageRank是找出图中顶点(网页链接)的重要性
  • GraphX提供了PageRank API用于计算图的PageRank
//tol:收敛时允许的误差,越小越精确, 确定迭代是否结束的参数
//resetProb:![随机重置概率
  def pageRank(tol: Double, resetProb: Double = 0.15): Graph[Double, Double]

pageRank算法剖析:

首先,将Web做如下抽象:

(1)将每个网页抽象成一个节点;

(2)如果一个页面A有链接直接链向B,则存在一条有向边从A到B(多个相同链接不重复计算边)。

因此,整个Web被抽象为一张有向图。现在假设世界上只有四张网页:A、B、C、D,其抽象结构如下图:
在这里插入图片描述
这张图是从从任意节点可以到达任意节点的强连通图

PageRank算法基本思想描述:被用户访问越多的网页更可能质量越高,而用户在浏览网页时主要通过超链接进行页面跳转,因此需要通过分析超链接组成的拓扑结构来推算每个网页被访问频率的高低。最简单的,我们可以假设当一个用户停留在某页面时,跳转到页面上每个被链页面的概率相同。

例如,上图中A页面链向B、C、D,所以一个用户从A跳转到B、C、D的概率各为1/3。设一共有N个网页,则可以组织这样一个N维矩阵,其中第i行j列的值表示用户从页面j转到页面i的概率。这样一个矩阵叫做转移矩阵(Transition Matrix)。下面是上图的转移矩阵M:
在这里插入图片描述
设初始时每个页面的rank值为1/N,这里就是1/4。按A−D顺序得到向量v:
在这里插入图片描述
根据矩阵相乘后得出新的向量值Mv:
在这里插入图片描述
之后M再乘以新的向量值,往复迭代计算,直到计算的结果趋于收敛,得出的结果就是各个页面的pageRank值。此处A,B,C,D大约收敛在(1/4,1/4,1/5,1/4),这就是A、B、C、D最后的pagerank。

而满足上述结论的条件是必须要保证网页之间是强连通的,但实际上不可能达到,往往会有这样两种情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种情况经过不断迭代计算后各个网页跳转的概率都为0。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种在某一网页出现自己指向自己的情况时,最终会出现死循环的结果,因此计算的概率会全指向某一网页。

为了解决上述问题,下面需要对算法进行改进。假设选取下一个跳转页面时,既不选当前页面,也不选当前网页上的其他链接,而是以一定概率跳转到其他不相关网页,那么上面两个问题就能得到很好的解决,这就是完整PageRank算法思想。

假设跳转到当前页面(包括当前页面上的链接)的概率为α(也称为基尼系数),那么跳转到其他页面概率为(1−α),进一步假设每个页面被访问的概率相同都是e = 1/n,于是原来的迭代公式转化为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值