PageRank算法小结
PageRank
这个学期选了数据挖掘的课程,期末要做一个关于链接分析算法的报告,这是PR算法的小结。
算法
PR算法基于等级权威的思想,及不仅考虑指向该网页的链接数,同时也考虑指向该网页网站的重要程度。
PR算法是一种静态的网页评级方法,因为它为每个网页离线计算PR值,与查询内容无关。计算出的PR值即可作为网页排序的依据。
从权威的时角来说,PR值应体现以下的两点:
- 从一个网页指向另一个网页的链接是一种对目标网站权威性的隐含认可,也就是说,指向一个网页的连接数越多,该网页的PR值也就越高;
- 指向某个网页w的网页本身也具有PR值。在现实生活中,我们知道被一个高权威的人认可的事比被一个低权威的人认可的更具有可信度。因此,如果一个网页被其他具有高PR值的网页认可,那么该网页的PR值也应该较高。
根据以上的思想,我们可以推导出计算PR值的公式。将网页之间的链接关系看作一个有向图G(V, E),其中V是所有节点(即网页)的集合,E是所有有向边(即超链接)的集合。假设 |V|=n,PR值的定义如下:
\[P(i) = \sum\limits_{(j,i)\in E} \frac{P(j)}{O_j}\]
其中,\(O_j\)为网页的链出链接数目。根据线性代数的知识,以上的式子可以写成矩阵的形式。
不妨用P表示PR值的列向量,令A为图G的邻接矩阵,有:
\[A = \left \{
\begin{array}{c}
\frac{1}{O_i} , (i,j)\in E \\
0, \text{其他}
\end{array}
\right.
\]
于是可以写出如下的形式:
\[
P = A^T P
\]
显然,P是特征值1对应的特征向量。然而在Web图中上诉的等式并不一定有效。为了改进这个等式,这里用马尔科夫链来重新推导这个等式。
在马尔科夫链模型中,每张网页都被认为是一个状态,每个状态有一定概率向另一个状态转移,也就是说将网页浏览看作一个随机过程。它将用户随机浏览网页的行为看作马尔科夫链中一个状态向另一个状态的转移
\[
\left[
\begin{matrix}
A_{11} & A_{12} & \cdots & A_{1n} \\
A_{21} & A_{22} & \cdots & A_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
A_{n1} & A_{n2} & \cdots & A_{nn} \\
\end{matrix}
\right]
\]
其中,\(A_{ij}\)为正在浏览网页i的用户浏览网页j的概率。可见这里矩阵A的定义与前面的相同。
如果A每一行元素的和为1,那么就可以称A是一个马尔科夫链的随机转移矩阵。但是这个条件在很多情况下并不成立,因为很多网页并没有链出链接,那么在A对应行上的元素全为0。首先不妨假设A是一个随机转移矩阵,那么在经过k次状态转移后的概率分布为:
\[
p_k = A^Tp_{k-1}
\]
根据随机过程的知识,如果矩阵A是不可约的且是非周期的,那么该马尔科夫链会收敛到一个概率分布,且这个概率分布是唯一的。即
\[
\lim_{k \to \infty} p_k = \pi
\]
\(\pi\)体现了一个用户浏览某个网页的长期概率,这个概率越高说明该网页的权威越高。于是在PageRank算法中,我们可以将此处的\(\pi\)作为PR值的向量P,于是我们又得到了
\[
P = A^T P
\]
但是在现实中,Web中的网页并不能满足以上的条件。
首先,由于很多网页没有链出链接,A常常不是一个随机转移矩阵。为了解决这个问题,我们可以将矩阵A中全0行的元素替换为\(1/n\),即将没有链出链接的网页链接到其他所有网页。记转换后的矩阵为\(\overline{A}\),此时的矩阵\(\overline{A}\)就是一个随机转移矩阵。
第二,矩阵\(\overline{A}\)常常不是不可约的,这就意味这图G不是强连通图。实际上,并不能保证Web中的任意两个网页之间可以链接起来。
最后,\(\overline{A}\)不是非周期的。这是因为在网页中常有经过几次链接后回到原网页的情况。在马尔科夫链中,这就意味着从状态i开始经过若干次转移后总是回到状态i。显然这不是我们想要的效果。
为了解决以上的两个问题,可以给每个网页增加一个以转移概率\(1-d\)指向所有网页的链接。也就是说,在用户浏览一个网页时,他随机选择一个链出链接进行浏览的概率是d,而不点击页面中的链接跳到另一个网页继续浏览的概论是1-d。这样一来,Web图就变为强连通的。且从状态i出发回到状态i就有了各种不同的路径,也就是说该马尔科夫链成为了非周期的。
此时,PR值的计算公式为
\[
P = ((1-d)\frac{E}{n} + d \overline{A}^T)P
\]
其中E为元素全为1的n阶方阵,称d为衰减系数,取值在0到1之间。
现实世界中的网页有很多,将PR值计算至收敛需要很大的代价。实际上我们只关注网页的排序情况,只需要迭代到一个可以接受的程度即可。
优缺点
PageRank算法的一大优点是PR值都被离线计算并保存下来,而不是在用户进行搜索时再进行计算,可以提升查询的效率。
另一个优点是它有一定的反作弊能力。一个网页的拥有者很难将指向自己网页的链接添加到其他重要网页中。
但是魔高一尺道高一丈,还是有办法认为提升PR值。在一些重要网页的评论区中附上一些“僵尸”网页的地址,这些“僵尸”网页中有指向目标网页的链接,这样就能达到提升PR值的效果。
另一个缺点在于该算法没有考虑时间,往往一个网页存在的时间越久,指向它的链接就越多。也就是说PR值的计算对旧的网页更加有利,使得一些新的高质量网页在搜索中不能获得高的排名。
由于PageRank算法非查询相关的特性,查询结果有可能发生偏离。
PageRank算法小结的更多相关文章
- C#排序算法小结
前言 算法这个东西其实在开发中很少用到,特别是web开发中,但是算法也很重要,因为任何的程序,任何的软件,都是由很多的算法和数据结构组成的.但是这不意味着算法对于每个软件设计人员的实际工作都是很重要的 ...
- 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...
- 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍
考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...
- 张洋:浅析PageRank算法
本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...
- PageRank算法简介及Map-Reduce实现
PageRank对网页排名的算法,曾是Google发家致富的法宝.以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理. 一.什么是pagerank Pag ...
- [图论]Dijkstra 算法小结
Dijkstra 算法小结 By Wine93 2013.11 1. Dijkstra 算法相关介绍 算法阐述:Dijkstra是解决单源最短路径的算法,它可以在O(n^2)内计算出源点(s)到图中 ...
- [图论]Floyd 算法小结
Floyd 算法小结 By Wine93 2013.11 1. Floyd算法简介 Floyd算法利用动态规划思想可以求出任意2点间的最短路径,时间复杂度为O(n^3),对于稠密图, 效率要高于执行 ...
- PageRank算法
PageRank,网页排名,又称网页级别,传说中是PageRank算法拯救了谷歌,它是根据页面之间的超链接计算的技术,作为网页排名的要素之一.它通过网络浩瀚的超链接关系来确定一个页面的等级.Googl ...
- [转]PageRank算法
原文引自: 原文引自: http://blog.csdn.net/hguisu/article/details/7996185 感谢 1. PageRank算法概述 PageRank,即网页排名,又称 ...
随机推荐
- jsp中标签的序号问题
采用ststus.count进行序号的显示,但是设置了分页之后会出现点击下一页之后第二页的序号还是从1开始排序的,有时候并不方便,所以本文章针对带有分页的序号进行设置: <c:forEach i ...
- 【Java】Java中的final关键字和static
0.概述 final关键字表示是不可变的: 下面分别从属性(字段).方法.类中进行说明: 1.属性(or字段),表示常量 final声明在属性(or字段)中,表示常量,有两种初始化方法,1是在声明时直 ...
- 相关性不一定等于因果性:从 Yule-Simpson’s Paradox 讲起
1. 两件事伴随发生,不代表他们之间有因果关系 - 从一些荒诞相关性案例说起 在日常生活和数据分析中,我们可以得到大量相关性的结论,例如: 输入X变量,有98%置信度得到Y变量 只要努力,就能成功 只 ...
- PHP命令空间namespace及use的用法
使用namespace的目的 命名空间将代码划分出不同的空间(区域),每个空间的常量.函数.类(为了偷懒,我下边都将它们称为元素)的名字互不影响, 这个有点类似我们常常提到的'封装'的概念. 团队合作 ...
- pikachu 暴力破解
一 暴力破解 1.基于表单的暴力破解 先随意测试root/root登录,用Burp抓包,丢进Intruder 添加username和password两个参数变量,攻击类型选择Clusterbomb 有 ...
- 华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- mac eclipse Android开发环境搭建
http://www.cnblogs.com/macro-cheng/archive/2011/09/30/android-001.html
- 浏览器主页锁定之战——IE:我太难了
精彩回顾: 我是一个explorer的线程 我是一个杀毒软件线程 我是一个IE浏览器线程 比特宇宙-TCP/IP的诞生 产品vs程序员:你知道www是怎么来的吗? Hello, World! 我是一个 ...
- [TimLinux] JavaScript 中循环执行和定时执行
1. 两对函数 // 循环执行 // 在每个毫秒数之后,调用函数 var timeid = window.setInterval(函数名, 毫秒数); window.clearInterval(tim ...
- golang包管理的古往今来
https://golang.org/ before GO1.5-GOPATH 在GO1.5之前用GOPATH以及GOROOT这两个环境变量来决定包的位置. GOROOT就是告知当前go的安装位置,编 ...