PageRank 算法(从原理到实现)

article/2025/9/25 19:20:21

spark 系列

Spark 核心原理及运行架构

Spark RDD详解

Spark 常用算子大全

Spark SQL 详解

Spark GraphX 图计算入门基础

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


Spark PageRank

  • spark 系列
  • 前言
  • 算法来源
  • 算法原理
    • 排名泄露
    • 排名下沉
    • 排名上升
    • 算法证明
  • PR值计算方法
    • 幂迭代法
    • 特征值法
    • 代数法
  • 案例演示
  • 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)=νBuL(ν)PR(ν)

其中, B u B_{u} Bu是所有链接到网页u的网页集合,网页v是属于集合 B u B_{u} Bu的一个网页,L(v)则是网页v的对外链接数(即出度)。

根据上图计算的PR值如下:
在这里插入图片描述
经过几次迭代后,PR值逐渐收敛稳定。

排名泄露

如下图所示,如果存在网页没有出度链接,如A节点所示,则会产生排名泄露问题,经过多次迭代后,所有网页的PR只都趋向于0。
在这里插入图片描述
在这里插入图片描述
解决办法

中的A网页没有出链,对其他网页没有PR值的贡献,为了满足 Markov 链的收敛性,于是我们设定其对所有的网页(包括它自己)都有出链,则此图中B的PR值可表示为:
P R ( B ) = P ( A ) 4 + P R ( D ) 2 PR(B)= \frac{P(A)}{4} + \frac{PR(D)}{2} PR(B)=4P(A)+2PR(D)

排名下沉

如下图所示,若网页没有入度链接,如节点A所示,经过多次迭代后,A的PR值会趋向于0。

在这里插入图片描述
在这里插入图片描述

排名上升

互联网中一个网页只有对自己的出链,或者几个网页的出链形成一个循环圈。那么在不断地迭代过程中,这一个或几个网页的PR值将只增不减。如下图中的C网页:
在这里插入图片描述
为了解决这个问题。我们想象一个随机浏览网页的人,当他到达C网页后,显然不会傻傻地一直被C网页的小把戏困住。我们假定他有一个确定的概率会输入网址直接跳转到一个随机的网页,并且跳转到每个网页的概率是一样的。

于是则此图中C的PR值可表示为:

P R ( C ) = α ( P R ( D ) 2 + P R ( A ) 3 ) + ( 1 − α ) 4 PR(C)=α(\frac{ PR(D)}{2} + \frac{PR(A)}{3})+ \frac{(1−α)}{4} PR(C)=α(2PR(D)+3PR(A))+4(1α)
在一般情况下,一个网页的PR值计算如下:
P R ( p i ) = ∑ p i ∈ M p i P R ( p j ) L ( p j ) + ( 1 − α ) N PR(p_{i})=\sum_{p_{i}\in M_{p_{i}}}\frac{PR(p_{j})}{L(p_{j})} +\frac{(1−α)}{N} PR(pi)=piMpiL(pj)PR(pj)+N(1α)

其中 M p i M_{p_{i}} Mpi是所有对 p i p_{i} pi网页有出链的网页集合, L ( p j ) L(p_{j}) L(pj)是网页 p j p_{j} pj的出链数目,N是网页总数,α一般取0.85(很多论文都取0.85)。

根据上面的公式,我们可以计算每个网页的PR值,在不断迭代趋于平稳的时候,即为最终结果。具体怎样算是趋于平稳,我们在下面的PR值计算方法部分再做解释。

算法证明

  1. lim ⁡ n → ∞ p n \mathop {\lim }\limits_{n \to \infty } {p_{\rm{n}}} nlimpn是否存在?
  2. 如果极限存在,那么它是否与 P 0 P_{0} P0的值无关?

PageRank算法的正确性证明包括上面两点。为了方便证明,我们先将PR值的计算方法转换一下。
在这里插入图片描述
我们可以用一个矩阵来表示这张图的出链入链关系, S i j = 0 S_{ij}=0 Sij=0 表示j网页没有对i网页的出链:
S = ( 0 1 2 0 0 1 3 0 0 1 2 1 3 0 1 1 2 1 3 1 2 0 0 ) S = {\begin{pmatrix} 0&{\frac{1}{2}}&0&0\\ {\frac{1}{3}}&0&0&{\frac{1}{2}}\\ {\frac{1}{3}}&0&1&{\frac{1}{2}}\\ {\frac{1}{3}}&{\frac{1}{2}}&0&0 \end{pmatrix}} S=03131312100210010021210
取E为所有分量都为 1 的列向量,接着定义矩阵:
A = α S + ( 1 − α ) N E E T A=αS+\frac {(1−α)}{N} EE^T A=αS+N(1α)EET

则PR值的计算如下,其中 P n P_{n} Pn为第n次迭代时各网页PR值组成的列向量:
P n + 1 = A P n ​ P_{n+1}=AP_{ n}​ Pn+1=APn

于是计算PR值的过程就变成了一个 Markov 过程,那么PageRank算法的证明也就转为证明 Markov 过程的收敛性证明:如果这个 Markov 过程收敛,那么 lim ⁡ n → ∞ p n \mathop {\lim }\limits_{n \to \infty } {p_{\rm{n}}} nlimpn 存 在 ,且与 P 0 P_0 P0 存 在 , 且 与 P 0 存在,且与P_0 P0的选取无关。

若一个 Markov 过程收敛,那么它的状态转移矩阵A需要满足:

  1. A为随机矩阵。
  2. A是不可约的。
  3. A是非周期的。

第一点,随机矩阵又叫概率矩阵或 Markov 矩阵,满足以下条件:
在这里插入图片描述
显然我们的A矩阵所有元素都大于等于0,并且每一列的元素和都为1。所以A矩阵为左随机矩阵。

第二点,不可约矩阵:方阵A是不可约的当且仅当与A对应的有向图是强联通的。有向图G=(V,E)是强联通的当且仅当对每一对节点对u,v∈V,存在从u到v的路径。

因为我们在之前设定用户在浏览页面的时候有确定概率通过输入网址的方式访问一个随机网页,所以A矩阵同样满足不可约的要求。

第三点,要求A是非周期的。

所谓周期性,体现在Markov链的周期性上,即,在经历一段转移之后必然会回到链中的某个位置并开始循环。若A的幂具有周期性,那么这个Markov链的状态就是周期性变化的。

因为A是素矩阵(素矩阵指自身的某个次幂为正矩阵的矩阵),所以A是非周期的。

至此,我们证明了PageRank算法的正确性。

PR值计算方法

幂迭代法

首先给每个页面赋予随机的PR值,然后通过 P n + 1 = A P n ​ P_{n+1}=AP_{ n}​ Pn+1=APn不断地迭代PR值。当满足下面的不等式后迭代结束,获得所有页面的PR值:

∣ P n + 1 − P n ∣ < ϵ ∣ P n + 1 − P n ∣ < ϵ Pn+1Pn<ϵ

特征值法

当上面提到的Markov链收敛时,必有:

P = A P ⇒ P 为 矩 阵 A 特 征 值 1 对 应 的 特 征 向 量 P = A P ⇒ P 为 矩 阵 A 特 征 值 1 对 应 的 特 征 向 量 P=APPA1( 随 机 矩 阵 必 有 特 征 值 1 , 且 其 特 征 向 量 所 有 分 量 全 为 正 或 全 为 负 )$$

代数法

相似的,当上面提到的Markov链收敛时,必有:
在这里插入图片描述

案例演示

用spark GraphX自带的pageRank()方法实现如下:

object MyLove {def main(args: Array[String]): Unit = {// 创建 sparkSession对象val spark = SparkSession.builder().master("local[*]").appName("love").getOrCreate()val sc = spark.sparkContext// 创建所有的点、边和图val points = Seq((1L,("Alice",28)),(2L,("Bob",27)),(3L,("Charlie",65)),(4L,("David",42)),(5L,("Ed",55)),(6L,("Fran",50)))val eds = Seq(Edge(2L,1L,7),Edge(2L,4L,2),Edge(4L,1L,1),Edge(5L,2L,2),Edge(5L,3L,8),Edge(5L,6L,3),Edge(3L,2L,4),Edge(3L,6L,3))val vertices = sc.makeRDD(points)val edges = sc.makeRDD(eds)val graph = Graph(vertices,edges)// 找出用户社交网络中最重要的用户// 保证收敛的确定性,可以设置最大迭代次数和tol值。如果全局中所有节点和上次比较,小于tol,则运算终止。graph.pageRank(0.0001).vertices.sortBy(_._2,false).collect().foreach(println)spark.stop()}
}

PageRank算法的优缺点

优点:

是一个与查询无关的静态算法,所有网页的PageRank值通过离线计算获得;有效减少在线查询时的计算量,极大降低了查询响应时间。

缺点:

  • 没有区分站内导航链接。很多网站的首页都有很多对站内其他页面的链接,称为站内导航链接。这些链接与不同网站之间的链接相比,肯定是后者更能体现PageRank值的传递关系。

  • 没有过滤广告链接和功能链接(例如常见的“分享到微博”)。这些链接通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。

  • 对新网页不友好。一个新网页的一般入链相对较少,即使它的内容的质量很高,要成为一个高PR值的页面仍需要很长时间的推广。


http://chatgpt.dhexx.cn/article/Z3I7dO9F.shtml

相关文章

浅谈PageRank算法

TOC[目录] PageRank 是 由佩奇(Larry Page)等人提出 的 Google 最为有名的技术之一 PageRank 是一种基于随机游走 的 评价网站权值的算法 总之&#xff0c; PageRank 是一种十分重要的算法 不管在学术界 还是在产业界 Node Similarity(节点相似度) 假设在一个图G(V,E)中研究两…

PageRank算法 到 textRank

1. PageRank算法概述 PageRank,即网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出的链接分析算法&#xff0c;自从Google在商业上获得空前的成功后&#xff0c;该 算法也成为其他搜索引…

PageRank算法浅析

转载请注明出处&#xff01;&#xff01;&#xff01;http://blog.csdn.net/zhonghuan1992 本文是根据 Topic-Sensitive PageRank Google’s PageRank:The Math Behind the Search Engine http://blog.csdn.net/hguisu/article/details/7996185 http://blog.codinglabs.…

PageRank 算法详解

转载自&#xff1a;https://blog.csdn.net/m0_37786726/article/details/79864012 参考文献&#xff1a;https://blog.csdn.net/androidlushangderen/article/details/43311943 链接分析 在链接分析中有2个经典的算法&#xff0c;1个是PageRank算法&#xff0c;还有1个是HITS…

数据挖掘十大算法:PageRank算法原理及实现

一、PageRank的概念 PageRank&#xff0c;网页排名&#xff0c; 是一种由根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c; 它由Larry Page 和 Sergey Brin在20世纪90年代后期发明&#xff0c;并以拉里佩吉&#xff08;Larry Page&#xf…

PageRank 算法及实例分析

本文一部分是针对图的PageRank 的实现&#xff0c;以及具体数据集的分析过程的记录。 另一部分是BFS的实现&#xff0c;并记录每一层的节点数。 数据集下载地址 soc-Slashdot0811 、 roadNet-CA 、 soc-LiveJournal1 1. java 实现代码 Main.java import java.util.List;pu…

PageRank算法(二)

原文地址&#xff1a;https://blog.csdn.net/monkey_d_meng/article/details/6556295 说明&#xff1a;这是我学习过程中看到对PageRank来龙去脉解释非常清晰的博客&#xff0c;博主很厉害&#xff0c;大家可以关注一下原创作者&#xff01; 一、PageRank算法的简单举例 Goo…

PageRank 算法实现

大数据管理与分析实验报告 实验一 大数据系统基本实验 实验二 文档倒排索引算法实现 实验三 PageRank 算法实现 实验目的 PageRank 网页排名的算法&#xff0c;曾是Google 发家致富的法宝。用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。通过对PageRank 的…

(简单介绍)PageRank算法

文章目录 前言引入形式化PageRank 前言 这个是一个经典算法&#xff0c;还是有必要了解的&#xff0c;这里由于讲得不会很详细&#xff0c;所以要求你有一点数学知识&#xff0c;如果有&#xff0c;看完这篇就大概明白PageRank是个啥了。本篇不涉及证明之类的&#xff0c;而是…

算法--PageRank

概念 PageRank是Google提出的算法&#xff0c;用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里佩奇和谢尔盖布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。 GOOGLE PageRank并不是唯一的链接相关的排名算法&#xff0c;而…

pagerank以及个性化的pagerank算法

pagerank以及个性化的pagerank算法 pagerank最开始是Google提出来用来衡量网页重要度排行的算法。 她的思想是基于网页之间互相的链接作为加权投票。假如网页a指向b&#xff0c; 那么网页b的重要程度受网页a的影响&#xff0c;a越重要&#xff0c;则b就越重要。假如网页c也指…

PageRank算法原理详解

&#xfeff;&#xfeff; 转自&#xff1a;http://blog.csdn.net/hguisu/article/details/7996185 1. PageRank算法概述 PageRank,即网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出…

PageRank算法改进

PageRank算法的应用 PageRank 算法是 Google 搜索引擎进行网页排名的一种算法&#xff0c;那么它如何映射到其他领域&#xff1f; 比如&#xff0c;我们如何在文献排名中应用PageRank算法呢&#xff1f; 对文献的质量进行排序是对文献价值进行评估的一种重要手段&#xff0c…

什么是Pagerank?Pagerank算法介绍与计算公式

一、什么是Pagerank&#xff1f; PageRank&#xff0c;网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名&#xff0c;是一种由根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c;而我们SEO简称为PR&#xff0c;以Google公司创办…

PageRank算法 -- 从原理到实现

本文整理自博文PageRank算法 – 从原理到实现 1. 算法来源 这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是 分类目录1的方法,即通过人工进行网页分类并整理出高质量的网站。那时 Yahoo 和国内的 hao123 就是使用的这种方法。 后来网页越来越多,人工分类已经不现实了…

第4关: 网页排序——PageRank算法

要求&#xff1a;编写实现网页数据集PageRank算法的程序&#xff0c;对网页数据集进行处理得到网页权重排序。 ####相关知识 ######PageRank算法原理 1.基本思想&#xff1a; 如果网页T存在一个指向网页A的连接&#xff0c;则表明T的所有者认为A比较重要&#xff0c;从而把T的一…

PageRank算法--从原理到实现

本文将介绍PageRank算法的相关内容&#xff0c;具体如下&#xff1a; 算法来源算法原理算法证明PR值计算方法 1 幂迭代法2 特征值法3 代数法 算法实现 1 基于迭代法的简单实现2 MapReduce实现 PageRank算法的缺点写在最后参考资料 1. 算法来源 这个要从搜索引擎的发展讲起。最…

PageRank算法原理与实现

正文共835个字&#xff0c;8张图&#xff0c;预计阅读时间6分钟。 1、PageRank 1.1.简介 PageRank&#xff0c;又称网页排名、谷歌左侧排名&#xff0c;是一种由搜索引擎根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c;以Google公司创办人…

PageRank算法原理及代码

本文内容出自帅器学习的课程内容&#xff0c;讲得原理清晰&#xff0c;概念深入&#xff0c;链接&#xff1a; PANKRANK算法视频 另有一篇知乎文章&#xff0c;PAGERANK讲得系统透彻&#xff0c;链接在此&#xff1a;关键词提取和摘要算法TextRank详解与实战 PAGERANK算法是一…

PageRank算法 -- 图算法

一、简述&#xff1a; PageRank算法是一个迭代求解算法&#xff0c;可以处理网页排名&#xff08;根据网页的重要性进行排序&#xff09;、社会影响力分析、文本摘要 等问题。 PageRank算法在1996年由Page和Brin提出 PageRank适用于解决用有向图表示的图数据 二、各节点重要性…