PageRank 算法

文章目录

    • 1. PageRank 的定义
      • 1.1 基本想法
      • 1.2 PageRank 的基本定义
      • 1.3 PageRank 的一般定义
    • 2. PageRank 的计算
      • 2.1 迭代算法
      • 2.2 幂法
      • 2.3 代数算法

PageRank算法是图的链接分析(link analysis)的代表性算法,属于图数据上的无监督学习方法。

PageRank算法最初作为互联网网页重要度的计算方法,1996年由Page和Brin提出,并用于谷歌搜索引擎的网页排序
事实上,PageRank可以定义在任意有向图上,后来被应用到社会影响力分析文本摘要等多个问题。
PageRank算法基本想法

  • 在有向图上定义一个随机游走模型,即一阶马尔可夫链,描述随机游走者沿着有向图随机访问各个结点的行为
  • 在一定条件下,极限情况访问每个结点的概率收敛到平稳分布,这时各个结点的平稳概率值就是其PageRank值,表示结点的重要度
  • PageRank是递归定义的,PageRank的计算可以通过迭代算法进行

1. PageRank 的定义

1.1 基本想法

PageRank是定义在网页集合上的一个函数,对网页给出一个正实数,表示网页的重要程度,整体构成一个向量,PageRank值越高,网页就越重要,在互联网搜索的排序中可能就被排在前面

  • 假设互联网是一个有向图
  • 在其基础上定义随机游走模型,即一阶马尔可夫链,表示网页浏览者在互联网上随机浏览网页的过程
  • 假设浏览者在每个网页依照连接出去的超链接以等概率跳转到下一个网页,并在网上持续不断进行这样的随机跳转,这个过程形成一阶马尔可夫链
  • PageRank表示这个马尔可夫链的平稳分布。每个网页的PageRank 值就是平稳概率

1.2 PageRank 的基本定义

给定一个包含 nnn 个结点 v1,v2…,vnv_1,v_2…,v_nv1v2vn强连通非周期性的有向图,在有向图上定义随机游走模型,即一阶马尔可夫链。
随机游走的特点是从一个结点 到有 有向边连出的所有结点的转移概率相等,转移矩阵为M。这个马尔可夫链具有平稳分布 R, MR=RMR=RMR=R

平稳分布 R 称为这个有向图的 PageRank。R的各个分量称为各个结点的PageRank值

其中PR(vi),i=1,2,⋯,n,P R\left(v_{i}\right), i=1,2, \cdots, n,PR(vi),i=1,2,,n, 表示结点 viv_{i}vi 的 PageRank 值
R=[PR(v1)PR(v2)⋮PR(vn)]PR(vi)⩾0,i=1,2,⋯,n∑i=1nPR(vi)=1PR(vi)=∑vj∈M(vi)PR(vj)L(vj),i=1,2,⋯,n\begin{array}{c}R=\left[\begin{array}{c}P R\left(v_{1}\right) \\ P R\left(v_{2}\right) \\ \vdots \\ P R\left(v_{n}\right)\end{array}\right] \\ \begin{array}{c} \\P R\left(v_{i}\right) \geqslant 0, \quad i=1,2, \cdots, n \\ \\ \sum\limits_{i=1}^{n} P R\left(v_{i}\right)=1\end{array} \\ \begin{array}{l}\\ P R\left(v_{i}\right)=\sum\limits_{v_{j} \in M\left(v_{i}\right)} \frac{P R\left(v_{j}\right)}{L\left(v_{j}\right)}, \quad i=1,2, \cdots, n\end{array}\end{array}R=PR(v1)PR(v2)PR(vn)PR(vi)0,i=1,2,,ni=1nPR(vi)=1PR(vi)=vjM(vi)L(vj)PR(vj),i=1,2,,n
M(vi)M(v_i)M(vi) 表示指向节点 viv_ivi 的节点集合,L(vj)L(v_j)L(vj) 表示节点 vjv_jvj 连出的有向边个数

定理 :不可约且非周期的有限状态马尔可夫链,有唯一平稳分布存在,并且当时间趋于无穷时状态分布收敛于唯一的平稳分布。

  • 一般的有向图未必满足强连通且非周期性的条件
  • 比如,在互联网,大部分网页没有连接出去的超链接,也就是说从这些网页无法跳转到其他网页。所以PageRank的基本定义不适用

1.3 PageRank 的一般定义

有 n 个结点的任意有向图,定义一个一般的随机游走模型,即一阶马尔可夫链。
一般的随机游走模型的转移矩阵两部分的线性组合组成:

  • 一部分是有向图的基本转移矩阵M,表示从一个结点到其连出的所有结点的转移概率相等
  • 另一部分是完全随机的转移矩阵,表示从任意一个结点到任意一个结点的转移概率都是1/n,线性组合系数为阻尼因子 d(0≤d≤1)d(0≤d≤1)d0d1

这个一般随机游走的马尔可夫链存在平稳分布,记作 R。
定义平稳分布向量R为这个有向图的一般PageRank。R由公式 R=dMR+1−dn1R= dMR+\frac{1-d}{n} \bf1R=dMR+n1d1 决定,1\bf 11 是所有分量为 1 的 n 维向量

PR(vi)=d(∑vj∈M(vi)PR(vj)L(vj))+1−dn,i=1,2,⋯,nP R\left(v_{i}\right)=d\left(\sum_{v_{j} \in M\left(v_{i}\right)} \frac{P R\left(v_{j}\right)}{L\left(v_{j}\right)}\right)+\frac{1-d}{n}, \quad i=1,2, \cdots, nPR(vi)=dvjM(vi)L(vj)PR(vj)+n1d,i=1,2,,n

一般PageRank的定义意味着互联网浏览者:

  • 在任意一个网页上,浏览者或者以概率 d 决定按照超链接随机跳转,这时以等概率从连接出去的超链接跳转到下一个网页
  • 或者以概率(1-d)决定完全随机跳转,这时以等概率1/n跳转到任意一个网页
  • 第二个机制保证从没有连接出去的超链接的网页也可以跳转出。这样可以保证平稳分布,即一般PageRank的存在

2. PageRank 的计算

包括迭代算法幂法代数算法。常用的方法是 幂法

2.1 迭代算法

输入:含有 n 个结点的有向图,转移矩阵 M,阻尼因子 d,初始向量 R0
输出:有向图的 PageRank 向量 R

  1. t=0t=0t=0
  2. 计算 Rt+1=dMRt+1−dn1R_{t+1} = dMR_t+\frac{1-d}{n}\bf1Rt+1=dMRt+n1d1
  3. 如果 Rt+1R_{t+1}Rt+1RtR_tRt 充分接近,令 R=Rt+1R=R_{t+1}R=Rt+1,停止迭代
  4. 否则,令 t=t+1t=t+1t=t+1,执行步 2

2.2 幂法

输入:含有 n 个结点的有向图,转移矩阵 M,系数 d,初始向量 x0,计算精度 ε\varepsilonε
输出:有向图的 PageRankR

  1. t=0t=0t=0,选择初始向量 x0x_0x0
  2. 计算有向图的一般转移矩阵 A ,A=dM+1−dnEA=dM+\frac{1-d}{n}\bf EA=dM+n1dEE\bf EE 是所有元素为1的n阶方阵
  3. 迭代并规范化结果向量
    yt+1=Axty_{t+1} = Ax_tyt+1=Axt
    xt+1=yt+1∣∣yt+1∣∣\quad \quad x_{t+1} = \frac{y_{t+1}}{||y_{t+1}||}xt+1=yt+1yt+1
  4. ∣∣xt+1−xt∣∣<ε||x_{t+1}-x_t|| < \varepsilonxt+1xt<ε 时,令 R=xtR=x_tR=xt,停止迭代
  5. 否则,令 t=t+1t=t+1t=t+1,执行步 3
  6. 对 R 进行规范化处理,使其表示概率分布

2.3 代数算法

代数算法 通过一般转移矩阵逆矩阵计算求有向图的一般 PageRank
按照PR的一般定义:R=dMR+1−dn1R=d M R+\frac{1-d}{n} \mathbf{1}R=dMR+n1d1
于是有:
(I−dM)R=1−dn1(I-d M) R=\frac{1-d}{n} \mathbf{1} (IdM)R=n1d1
R=(I−dM)−11−dn1R=(I-d M)^{-1} \frac{1-d}{n} \mathbf{1}R=(IdM)1n1d1
这里 I\bf II 是单位矩阵。
0<d<10<d<10<d<1 时,上面方程的解存在且唯一
可以通过求逆矩阵 (I−dM)−1(I-d M)^{-1}(IdM)1 得到有向图的一般 PageRank

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

基于JavaSpringMvcVue求职招聘系统详细设计实现 &#x1f345; 作者主页 专业程序开发 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringMvcVue求职招聘系统详细设计实现一、前言介…

NameValueCollection详解

1.NameValueCollection类集合是基于 NameObjectCollectionBase 类。 但与 NameObjectCollectionBase 不同&#xff0c;该类在一个键下存储多个字符串值&#xff08;就是键相同&#xff0c;值就连接起来如下例子&#xff09;。该类可用于标头、查询字符串和窗体数据。每个元素都…

一名英格兰球迷眼里的本届英格兰队

英格兰的世界杯旅程昨晚被德国终结了。身为一个英格兰的球迷的确心里不好受。比赛中兰帕德的本来可以扳平比 分的一粒进球被判无效&#xff08;难道真的“兰怕德”了&#xff1f;&#xff09;&#xff0c; 是整场比赛最大的争议点。有些人认为此球误判导致英格兰的最后大比分失…

无监督学习方法总结

文章目录1. 无监督学习方法的关系和特点1.1 各种方法之间的关系1.2 无监督学习方法1.3 基础机器学习方法1. 无监督学习方法的关系和特点 八种常用的统计机器学习方法&#xff1a; 聚类方法&#xff08;层次聚类、k均值聚类&#xff09;奇异值分解&#xff08;SVD&#xff09;…

java继承序列化_java中序列化之子类继承父类序列化

当一个父类实现Serializable接口后&#xff0c;他的子类都将自动的实现序列化。以下验证了这一点&#xff1a;package Serial;import java.io.Serializable;public class SuperC implements Serializable {//父类实现了序列化int supervalue;public SuperC(int supervalue) {th…

LeetCode 1324. 竖直打印单词

1. 题目 给你一个字符串 s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。 单词应该以字符串列表的形式返回&#xff0c;必要时用空格补位&#xff0c;但输出尾部的空格需要删除&#xff08;不允许尾随空格&#xff09;。 每个单词只能放在一列上&#xff0c;每一列中也…

SubSonic中的字段付值--MakeOld Update

根据设计当MakeOld后&#xff08;在读取数据库后&#xff0c;或者手动调用&#xff09;&#xff0c;对记录(SubSonic生成的类&#xff09;属性附值时&#xff0c;Sonic会检测这个Value是否与原来的不同&#xff0c;只有值不同时才会附值成功&#xff0c;并将该列添加到DirtyCol…

java从控制台输入数组_Java将控制台输入的一行整数转成整型数组

思路&#xff1a;将一行数据按字符串的形式读取进来。首先判断输入的字符串是不是空&#xff0c;为空的话&#xff0c;则不作任何操做。其次&#xff0c;将字符串按照指定方式切分为字符串数组&#xff0c;此处是按照空格切分&#xff0c;由于输入是按空格区分的。最后&#xf…

java私有表示标识_java里面的标识符、关键字和类型

1. 注释Java中有三种注释&#xff1a;(1) // -单行注释&#xff0c;注释从“//”开始&#xff0c;终止于行尾&#xff1b;(2) -多行注释&#xff0c;注释从““结束&#xff1b;(3) -是Java特有的doc注释&#xff0c;这种注释主要是为支持JDK工具Javadoc而采用的。Javadoc能识…

在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换

很久之前用过Socket&#xff0c;由于近期项目需要用socket传输视频流&#xff0c;早上花了半小时回顾了一下。 Socket类简要介绍 socket下提供的主要类有四个&#xff0c;分别是socket,tcpclient,tcplistener,udpclient&#xff0c;他们的作用如下&#xff1a; Socket 含有大量…

LeetCode 692. 前K个高频单词(优先队列)

1. 题目 给一非空的单词列表&#xff0c;返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。 如果不同的单词有相同出现频率&#xff0c;按字母顺序排序。 示例 1&#xff1a; 输入: ["i", "love", "leetcode", &q…

LeetCode 583. 两个字符串的删除操作(动态规划)

1. 题目 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: "sea", "eat" 输出: 2 解释: 第一步将"sea"变为"ea"&…

java listview控件_ListView普通列表控件的使用

Android中的列表空间非常灵活&#xff0c;可以自定义每一个列表项&#xff0c;实际上每一个列表项就是一个View&#xff0c;在Android定义了3个列表控件&#xff1a;ListView、ExpandableListView和Spinner&#xff0c;其中Spinner就是在Windows中常见的下拉列表框。ListView控…

【Kaggle】Intro to Machine Learning 第一次提交 Titanic

项目官网地址 新手可以参考这篇 8、Getting Started With Titanic&#xff0c;教你如何操作、提交等 自己简要再记录一下&#xff1a; Join the competition 各个 tab 下可以查看数据Data、代码编写Notebooks、讨论、排名、比赛规则、队伍点击 Notebooks&#xff0c;新建文…

在C#代码中执行BCS外部内容类型方法

在前面的博文中我们讨论了如何使用Business Connectivity Services对象模型栏获取已部署在SharePoint BCS中的外部内容类型。 本文中我们将学习如何获取一个ECT的BCS方法集合。并且还要通过Business Connectivity Services对象模型执行其中的Finder方法和SpecificFinder方法。…

java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪

在分布式系统或者较为复杂的系统中&#xff0c;我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志。由于slf4j/log4j基本是日志记录的标准组件&#xff0c;所以slf4j/log4j成为了我的重点研究对象。slf4j/log4j支持MDC&#xff0c;可以实现同一请求的…

常用的匹配正则表达式

常用的匹配正则表达式 正则表达式用于字符串处理、表单验证等场合&#xff0c;实用高效。现将一些常用的表达式收集于此&#xff0c;以备不时之需。 匹配中文字符的正则表达式&#xff1a; [\u4e00-\u9fa5]评注&#xff1a;匹配中文还真是个头疼的事&#xff0c;有了这个表达式…

LeetCode 1091. 二进制矩阵中的最短路径(BFS)

1. 题目 在一个 N N 的方形网格中&#xff0c;每个单元格有两种状态&#xff1a;空&#xff08;0&#xff09;或者阻塞&#xff08;1&#xff09;。 一条从左上角到右下角、长度为 k 的畅通路径&#xff0c; 由满足下述条件的单元格 C_1, C_2, ..., C_k 组成&#xff1a;相邻…

java 反射的弊端_java反射机制的一些学习心得小结

概述之前在了解Spring的类加载机制的时候&#xff0c;了解了java的反射机制。但是&#xff0c;我对反射理解一直不深。也一直有点疑惑&#xff1a;Spring为什么利用反射创建对象&#xff1f;直接new对象和依靠反射创建对象有什么区别&#xff1f;什么是动态加载类&#xff1f;什…

llog

/Files/TNTZWC/zxLog.rar转载于:https://www.cnblogs.com/TNTZWC/archive/2010/07/13/1776437.html