PageRank 算法(从原理到实现)

spark 系列

Spark 核心原理及运行架构

Spark RDD详解

Spark 常用算子大全

Spark SQL 详解

Spark GraphX 图计算入门基础

Spark PageRank 算法——从原理到实现




前言

在上一篇博客已经为大家介绍了Spark GraphX图计算的入门基础。本篇博客将为大家详细介绍了 Spark GraphX中常用的算法之一:PageRank 算法的实现原理


本文整理自博文 PageRank算法 – 从原理到实现

算法来源

PageRank,即网页排名,又称网页级别、Google左侧排名佩奇排名

这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是分类目录的方法,即通过人工进行网页分类并整理出高质量的网站,就是靠工程师手工一条一条的整理分类得出。那时 Yahoo 和国内的 hao123 就是使用的这种方法。

后来网页越来越多,人工分类已经不现实了。搜索引擎进入了文本检索的时代,即计算用户查询关键词与网页内容的相关程度来返回搜索结果(最熟悉的就是Elasticsearch搜索引擎)。这种方法突破了数量的限制,但是搜索结果不是很好。因为总有某些网页来回地倒腾某些关键词使自己的搜索排名靠前。

谷歌的两位创始人,当时还是美国斯坦福大学 (Stanford University) 研究生的佩奇 (Larry Page) 和布林 (Sergey Brin) 开始了对网页排序问题的研究。他们的借鉴了学术界评判学术论文重要性的通用方法, 那就是看论文的引用次数。由此想到网页的重要性也可以根据这种方法来评价。于是PageRank的核心思想就诞生了,非常简单:

  1. 当一个网页被更多网页所链接时,其排名PageRank会越靠前;
  2. 排名高的网页应具有更大的表决权,即当一个网页被排名高的网页所链接时,其排名PageRank也应对应提高。

就如同下面两张图所示:
在这里插入图片描述

在这里插入图片描述

目前很多重要的链接分析算法都是在PageRank 算法基础上衍生出来的。PageRank 是Google 用于用来标识网页的等级/ 重要性的一种方法,是Google 用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title 标识和Keywords 标识等所有其它因素之后, Google 通过PageRank 来调整结果,使那些更具“等级/ 重要性”的网页在搜索结果中令网站排名获得提升,从而提高搜索结果的相关性和质量。其级别从0到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。例如:一个PR值为1的网站表明这个网站不太具有流行度,而PR值为7到10则表明这个网站非常受欢迎(或者说极其重要)。一般PR值达到4,就算是一个不错的网站了。Google把自己的网站的PR值定到10,这说明Google这个网站是非常受欢迎的,也可以说这个网站非常重要。

算法原理

PageRank算法简单来说分为两步:

  • 给每个网页一个PR值(下面用PR值指代PageRank值)
  • 通过(投票)算法不断迭代,直至达到平稳分布为止。

互联网中的众多网页可以看作一个有向图。下图是一个简单的例子
在这里插入图片描述
由于PR值物理意义上为一个网页被访问概率,所以初始值可以假设为 1 N \frac{1}{N} N1,其中N为网页总数。一般情况下,所有网页的PR值的总和为1。(如果不为1的话也不是不行,最后算出来的不同网页之间PR值的大小关系仍然是正确的,只是不能直接地反映概率了。而且公式也不再是本文提供的公式了,详见PageRank简单实现中的一个错误)。

A、B、C三个页面都链入D页面,则D的PR值将是A、B、C三个页面PR值的总和:
P R ( A ) = P R ( B ) + P R ( C ) + P R ( D ) PR(A)=PR(B)+PR(C)+PR(D) PR(A)=PR(B)+PR(C)+PR(D)
继续上面的假设,A除了链接到D以外,A还链接了C和B,那么当用户访问 A 的时候,就有跳转到 B、C 或者 D 的可能性,跳转概率均为 1 3 \frac{1}{3} 31。在计算D的PR值时,A的PR值只能投出 1 3 \frac{1}{3} 31的票,B的PR值只能投出 1 2 \frac{1}{2} 21的票,而C只链接到C,所以能投出全票,所以A的PR值总和应为:
P R ( D ) = P R ( A ) 3 + P R ( B ) 2 + P R ( C ) P R ( D ) = \frac{P R ( A )} { 3 }+ \frac{P R ( B )} { 2} + P R ( C ) PR(D)=3PR(A)+2PR(B)+PR(C)
所以可以得出一个网页的PR值计算公式应为:

P R ( u ) = ∑ ν ∈ B u P R ( ν ) L ( ν ) PR\left( u \right) = \sum\limits_{\nu \in {B_u}} {\frac{ {PR\left( \nu \right)}}{ {L\left( \nu \right)}}} PR(u)=νBu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值