pagerank算法详解
目录
- 一、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代表当前时刻或迭代次数
计算演示
接下来以下图为例进行计算演示:
- 将四个节点的初始PR都设置为1/4
- 根据每一个节点(a)的入链节点(Ti)的PR值及出链数和自身(a)的PR值
- 不断进行迭代,直到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算法详解相关推荐
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码
粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...
- 基础排序算法详解与优化
文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- 数据结构与算法详解目录
数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章 基 ...
- [搜索]波特词干(Porter Streamming)提取算法详解(2)
接[搜索]波特词干(Porter Streamming)提取算法详解(1), http://blog.csdn.net/zhanghaiyang9999/article/details/4162 ...
最新文章
- GATB=The Genome Analysis Toolbox with de-Bruijn graph 带有de-Bruijn图的基因组分析工具箱
- 一个菜鸟程序猿--再谈六月坚持英语学习
- 将shp文件导入到GeoDatabase中
- HDU2026 首字母变大写
- 【问链财经-EOS公开课】 第十九课 EOS存储之IPFS
- 查看PLC IP 端口_三种方法实现以太网远程访问西门子PLC!
- boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
- 前端学习(3236):react生命周期3
- [机器学习-实践篇]学习之线性回归、岭回归、Lasso回归,tensorflow实现的线性回归
- 教你实现一个朴实的Canvas时钟效果
- mssql差异备份获得的webshell的个人体会
- pushd popd
- qt将tablewidget导出为excel
- 行为识别TSM训练ucf101数据集
- 高空瞭望视频监控+三维场景视频融合平台
- python爬不同图片分别保存在不同文件夹中的实现
- 发那科2021参数_发那科参数
- 2个DIV制作十字架
- Java 中最简单打印数组的方式
- DCS、PLC与SCADA的区别
热门文章
- 原始值(primitive value)
- AtCoder Beginner Contest 242 C~E 题解
- wikioi1369 xth 砍树
- python 宏定义函数_python 宏使用详解
- springboot自动创建Oracle,一键生成项目 SpringBoot项目代码生成器 支持Oracle 支持MySql...
- 《出师表 》-英文版 苟全性命于乱世,不求闻达于诸侯
- EDM电子邮件营销策划常用创意
- 货代专业术语中英文对照
- Javaweb 实现简单的用户注册登录(含数据库访问功能)
- C语言之指针知识大总结