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,即网页排名,又称 ...
随机推荐
- WebGPU学习(二): 学习“绘制一个三角形”示例
大家好,本文学习Chrome->webgl-samplers->helloTriangle示例. 准备Sample代码 克隆webgl-samplers Github Repo到本地. ( ...
- Nginx动静分离(Nginx+Tomcat)
第一步:nginx构建 第二步:Tomcat构建 1.Tomcat基础点 (1)Tomcat 是基于java开发的web容器,用来发布java代码和jsp网页. (2)开发人员开发java web网站 ...
- 关于使用Java Mail发邮件的问题
今天做东西的时候突然遇到需要发邮件的问题,然后就使用SMTP协议进行邮件的发送.用了一个工具类简化邮件发送的功能, 在这次试验中,我使用了自己的QQ邮箱进行发送邮件的发送者. public class ...
- UITableView 实例详解 滑动编辑 headerView
转自:http://blog.csdn.net/reylen/article/details/8505960 self.dataArray = [[[NSMutableArray alloc]init ...
- Spring代理模式(CGLIB动态代理模式)
jdk动态代理和CGLIB动态代理 没什么太大的区别,CGLIB动态代理不需要接口,但是需要导入jar包. 房东出租房子的方法: package com.bjsxt.proxy2; public cl ...
- 编译安装nginx时配置开机自启
详细编译安装nginx请参考[Nginx目录结构与配置文件详解]以及[Nginx安装部署],在这里就进行简单安装 安装Nginx 环境介绍 操作系统: [root@localhost ~]# cat ...
- UVA-1608
We were afraid of making this problem statement too boring, so we decided to keep it short. A sequen ...
- css3(1)
边框: 盒子圆角:border-radius:5px / 20%: border-radius:5px 4px 3px 2px; 左上,右上,右下,左下. 盒子阴影: box-shadow: box- ...
- 【React】在React中 JSX 代码如何转成 JS 代码?
一.介绍 写 React 代码的朋友应该都是直接写 JSX 代码,JSX 让我们可以在 JS 中直接写 HTML 代码,可阅读性较高.本章节主要介绍 JSX 通过 babel 转换后会生成什么样式代码 ...
- Navicat for mysql 免费破解工具+教程
转载自:https://blog.csdn.net/BigCabbageFy/article/details/79789833 navicat for mysql带给大家这款高性能数据库管理开发工具的 ...