PageRank

这个学期选了数据挖掘的课程,期末要做一个关于链接分析算法的报告,这是PR算法的小结。

算法

PR算法基于等级权威的思想,及不仅考虑指向该网页的链接数,同时也考虑指向该网页网站的重要程度。
PR算法是一种静态的网页评级方法,因为它为每个网页离线计算PR值,与查询内容无关。计算出的PR值即可作为网页排序的依据。
从权威的时角来说,PR值应体现以下的两点:

  1. 从一个网页指向另一个网页的链接是一种对目标网站权威性的隐含认可,也就是说,指向一个网页的连接数越多,该网页的PR值也就越高;
  2. 指向某个网页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算法小结的更多相关文章

  1. C#排序算法小结

    前言 算法这个东西其实在开发中很少用到,特别是web开发中,但是算法也很重要,因为任何的程序,任何的软件,都是由很多的算法和数据结构组成的.但是这不意味着算法对于每个软件设计人员的实际工作都是很重要的 ...

  2. 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码

    在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...

  3. 【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍

    考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表. 1.机器学习之PageRank算法应用与C#实现(1)算法介绍 2.机器学习之PageRank算法应用与C#实现(2 ...

  4. 张洋:浅析PageRank算法

    本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...

  5. PageRank算法简介及Map-Reduce实现

    PageRank对网页排名的算法,曾是Google发家致富的法宝.以前虽然有实验过,但理解还是不透彻,这几天又看了一下,这里总结一下PageRank算法的基本原理. 一.什么是pagerank Pag ...

  6. [图论]Dijkstra 算法小结

    Dijkstra 算法小结  By Wine93 2013.11 1. Dijkstra 算法相关介绍 算法阐述:Dijkstra是解决单源最短路径的算法,它可以在O(n^2)内计算出源点(s)到图中 ...

  7. [图论]Floyd 算法小结

    Floyd 算法小结  By Wine93 2013.11 1. Floyd算法简介 Floyd算法利用动态规划思想可以求出任意2点间的最短路径,时间复杂度为O(n^3),对于稠密图, 效率要高于执行 ...

  8. PageRank算法

    PageRank,网页排名,又称网页级别,传说中是PageRank算法拯救了谷歌,它是根据页面之间的超链接计算的技术,作为网页排名的要素之一.它通过网络浩瀚的超链接关系来确定一个页面的等级.Googl ...

  9. [转]PageRank算法

    原文引自: 原文引自: http://blog.csdn.net/hguisu/article/details/7996185 感谢 1. PageRank算法概述 PageRank,即网页排名,又称 ...

随机推荐

  1. CSS文字,文本常用样式

    CSS文字,文本常用样式 字体属性 font-family 如果电脑没有第一个字体,就切换到下一个 body { font-family: Microsoft YaHei,Helvetica,Aria ...

  2. AWK工具 使用介绍

    第6周第5次课(4月27日) 课程内容: 9.6/9.7 awk扩展把这里面的所有练习题做一下http://www.apelearn.com/study_v2/chapter14.html 9.6/9 ...

  3. ubuntu安装过程中遇到的一些问题及解决办法。

    由于ubuntu与win10的双系统安装过程百度一下就有很多,在此不再赘述. (其实主要是忘记拍照片了,我一个菜鸡说得肯定也没有那些大佬们好,但网上确实也很多哈,加上有中文引导安装,问题不大.) 此篇 ...

  4. ThreadLocal快速了解一下

    欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 1 引入 在Java8里面,ThreadLocal 是一个泛型类.这个类可以提供线程变量.每个线 ...

  5. 【灵魂拷问】你真的懂得Mysql的管理和使用吗?

    作者 | Jeskson 来源 | 达达前端小酒馆 MySQL管理,数据库管理和数据表管理,用户管理. 初始化数据库,创建数据库,查看数据库,删除数据库. 创建数据表,查看数据表,修改数据表,删除数据 ...

  6. Kubernetes 时代的安全软件供应链

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏  阿里云 ...

  7. tp5引用第三方类vendor或extend(多种方法)

    extend 方法一:命名空间引入 我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如: 我们在extend目录下面新增一个l ...

  8. 深入比特币原理(三)——交易的输入(input)与输出(output)

    本节内容非常重要,如果你不能很好的掌握本节内容,你无法真正理解比特币的运行原理,请务必要学习清楚. 比特币的交易模型为UTXO(unspend transaction output),即只记录未花费的 ...

  9. CSS 3D图片翻转 ——3D Flipping Effect

    效果: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. Evevt Loop 事件循环

    目录 JavaScript 是一门单线程的语言 一.什么是event Loop的执行机制 练习 异步任务-setTimeout 练习1: 练习2: 练习3: 练习4: 二 事件队列作用 同步任务 例1 ...