目录

  • 一、pagerank简介
    • 两个重要假设
  • 二、pagerank算法
    • 公式定义
    • 计算演示
    • 矩阵化计算
  • 三、存在的两个问题
    • 问题1.Dead Ends
    • 问题2.Spider Traps

一、pagerank简介

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

入链数:指向该节点的链接数
出链数:由该节点指出的链接数
以上图为例:A的入链数为1,出链数为3,所以将由A指向其他节点的边权重设置为1/3,表示A访问B、C、D节点的概率均为1/3

两个重要假设

  • 数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
  • 质量假设:指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。

二、pagerank算法

公式定义

  • PR(a)表示当前节点a的PR值
  • PR(Ti)表示其他各个节点(能够指向a)的PR值
  • L(Ti)表示其他各个节点(能够指向a)的出链数
  • i代表当前时刻或迭代次数

计算演示

接下来以下图为例进行计算演示:

  1. 将四个节点的初始PR都设置为1/4
  2. 根据每一个节点(a)的入链节点(Ti)的PR值及出链数和自身(a)的PR值
  3. 不断进行迭代,直到PR值不再发生变化

以A为例:
A有两个入链节点C(出链数为1,PR=1/4)和D(出链数为2,PR=1/4)由计算公式得到:i=1时刻的PR(A) = (1/4)/1 + (1/4)/2 = 3/8
其余节点计算方法类似,不作赘述。

矩阵化计算

该有向图的邻接矩阵如下所示:

借助邻接矩阵(转移矩阵)的表示方式,我们可以简化上述计算,将四个节点的PR值转化为V向量,并于转移矩阵相乘,可以得到新一轮的PR值向量

由此可以得到每一步PR值迭代的结果为:MV, MMV, MMM*V 最终会收敛为M‘ * V(详细数学证明,有兴趣可以百度查询)

三、存在的两个问题

问题1.Dead Ends

如上图所示:B没有任何出链,这就是Dead Ends,Dead Ends会导致网站权重变成0.

最朴素的想法是:对全是0的列的每一个元素加上1/n(n为节点个数)
对M进行修正

问题2.Spider Traps

如上图所示,A节点与其它节点之间没有出链,这就是Spider Traps,这将导致网站权重变为像一个节点偏移(经过多轮迭代后,A的权重越来越大,趋近于1)
需要对M进行修正:

如上图所示仍有β的概率访问出链页面,但剩下(1 -β)的概率会随机跳转到其他页面,防止一直从A跳转到A的情况

pagerank算法详解相关推荐

  1. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  2. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  3. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

  4. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  5. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  6. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  7. Twitter-Snowflake,64位自增ID算法详解

    Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...

  8. 数据结构与算法详解目录

    数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章  基 ...

  9. [搜索]波特词干(Porter Streamming)提取算法详解(2)

     接[搜索]波特词干(Porter Streamming)提取算法详解(1), http://blog.csdn.net/zhanghaiyang9999/article/details/4162 ...

最新文章

  1. GATB=The Genome Analysis Toolbox with de-Bruijn graph 带有de-Bruijn图的基因组分析工具箱
  2. 一个菜鸟程序猿--再谈六月坚持英语学习
  3. 将shp文件导入到GeoDatabase中
  4. HDU2026 首字母变大写
  5. 【问链财经-EOS公开课】 第十九课 EOS存储之IPFS
  6. 查看PLC IP 端口_三种方法实现以太网远程访问西门子PLC!
  7. boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
  8. 前端学习(3236):react生命周期3
  9. [机器学习-实践篇]学习之线性回归、岭回归、Lasso回归,tensorflow实现的线性回归
  10. 教你实现一个朴实的Canvas时钟效果
  11. mssql差异备份获得的webshell的个人体会
  12. pushd popd
  13. qt将tablewidget导出为excel
  14. 行为识别TSM训练ucf101数据集
  15. 高空瞭望视频监控+三维场景视频融合平台
  16. python爬不同图片分别保存在不同文件夹中的实现
  17. 发那科2021参数_发那科参数
  18. 2个DIV制作十字架
  19. Java 中最简单打印数组的方式
  20. DCS、PLC与SCADA的区别

热门文章

  1. 原始值(primitive value)
  2. AtCoder Beginner Contest 242 C~E 题解
  3. wikioi1369 xth 砍树
  4. python 宏定义函数_python 宏使用详解
  5. springboot自动创建Oracle,一键生成项目 SpringBoot项目代码生成器 支持Oracle 支持MySql...
  6. 《出师表 》-英文版 苟全性命于乱世,不求闻达于诸侯
  7. EDM电子邮件营销策划常用创意
  8. 货代专业术语中英文对照
  9. Javaweb 实现简单的用户注册登录(含数据库访问功能)
  10. C语言之指针知识大总结