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,即网页排名,又称 ...
随机推荐
- ASP.NET Core 2 preview 1中Program.cs,Startup.cs和CreateDefaultBuilder的探索
Exploring Program.cs, Startup.cs and CreateDefaultBuilder in ASP.NET Core 2 preview 1 ASP.NET Core 2 ...
- http://t.cn/xxxxx的短链接如何生成?
var convertStr = encodeURIComponent(urlStr); //转换的原链接可能存在"&"这样的特殊符号,导致原链接的某些字段会被当做ajax ...
- Android组合Windows环境下Frida的安装步骤
Frida是什么 我觉得官网已经说得很清楚了.简单的说就是一款动态代码检测工具,可用于各种系统,这里的主要用途是动态检测Android代码,配合Windows系统环境使用. Frida ...
- .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换
1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...
- 借 redis cluster 集群,聊一聊集群中数据分布算法
Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 r ...
- Mac 中环境变量的配置
1. 基本了解 1.1. 查看当前path 在讲解Mac环境变量配置之前,大家可以打开dos框,输入 echo $PATH 查看当前的path. 本机结果: /usr/local/bin:/usr/l ...
- 数据库Oracle 数字,字符,日期之间的相互转换
数据类型转换分为俩种 . 隐式数据类型转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换. 对于直接赋值转换: 对于表达式赋值: 隐式转换的问题: 性能 ...
- GZIP怎么运用在.NET MVC 简单实现
ZIP压缩其实就是将网页内容压缩,减少HTML代码网络传输的代价,来提高Web性能. 这个请求的过程解释一下: 1:客户端Request请求.Http_header中会根据相应的浏览器发送相应的编码规 ...
- 洛谷 P2764(最小路径覆盖=节点数-最大匹配)
给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别 ...
- 简述c和c++的基本区别,你真的懂吗?(面试必学)
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:angry_youth **1.c和c++的头文件不同:** c的头 ...