简单快速地理解pagerank
2015-12-07 17:21
260 查看
直观理解
一句话概括:pagerank求的是,一个人沿着网站之间的超链接浏览整个互联网,一段时间后,其停留在某个网页上的概率。这个概率就是这个网页的pagerank值。当然,这只是基本思想,实际的pagerank值不一定非要在0-1之间。(根据实现方法不同)
以及,还有一种解释是,一个网页A包含一条指向另一个网页B的超链接,就可以理解为网页A认为网页B比较重要,相当于为网页B投了一票。而这种通过超链接的形式得到的“票数”越多,就说明这个网页越重要(pagerank值越高)。不过,这个说法容易跟其他类似的算法搞混(比如HITS算法),所以我还是比较喜欢第一种解释。
实际例子可以参考这篇博客
数学建模
数学建模部分参考了这篇博客。相当于对其重新整理,再加上自己的理解。首先,我们需要一个超链接矩阵GG(所有元素都是0或1),其中GijG_{ij}表示有一条从网页jj指向网页ii的超链接。(虽然这么定义貌似有些别扭,但是为了后面的式子好看,这种别扭还是值得的)
然后,我们假设一个user只能通过两种方式访问一个网页。
通过其当前所在页面的超链接跳转到另一个网页
随机地访问一个网页
我们假设用户采用第一种方式的概率是pp,采用第二种方式的概率是1−p1-p。这个pp通常取0.85(经验性的)。
之所以定义了两种方式,是因为如果只采用第一种方式,则若一个网页不指向任何其他网页,则用户到了这个页面后就无法继续访问其他网页了。这就是pagerank理论中说的黑洞,或者悬挂页面。所以我们加上一个随机访问的方式,从而使得每个页面都是可达的。
我们定义另外一个矩阵AA,AijA_{ij}表示从页面jj进入页面ii的概率。另外我们定义cjc_j代表页面jj中所有超链接的个数。
显然,AijA_{ij}由两部分组成:
从jj通过超链接跳转到ii,概率为:pGijcjp\frac{G_{ij}}{c_j}。其中GijG_{ij}取0或1。
通过随机访问进入页面ii,概率为:(1−p)1n(1-p)\frac{1}{n}。其中nn为所有网页的个数。
所以:
Aij=pGijcj+(1−p)1n\begin{equation}
A_{ij} = p\frac{G_{ij}}{c_j} + (1-p)\frac{1}{n}
\end{equation}
写成矩阵形式:
A=pGD+(1−p)1nI\begin{equation}
A = pGD + (1-p)\frac{1}{n}I
\end{equation}
其中,DD是对角矩阵,DjjD_{jj}是1cj\frac{1}{c_j},即第jj个页面超链接数目的倒数。II是单位矩阵,即对角线元素为1的对角矩阵。
这样,我们就得到包含从页面jj进入页面ii的概率的转移矩阵A。
设rkr^k代表第k轮迭代后,每个页面的pagerank值组成的向量。且|rk|1=1|r^k|_1=1,即所有页面pagerank值之和等于1(因为pagerank值是若干步后,user停留在某个页面上的概率)。初始时,r0r^0中每个元素都是1n\frac{1}{n}。
通过下面的式子进行若干轮迭代后,即可得到最终的pagerank值:
rk+1=Ark\begin{equation}
r^{k+1} = Ar^k
\end{equation}
当然这个求解方式只是最naive的版本。更快速的版本可以参考本节开头的引文。
pagerank算法的收敛性
所谓的收敛,即经过若干轮迭代后,rk+1r^{k+1}与rkr^k相差很小。上述迭代的过程其实是一个马尔科夫过程,即当前状态只跟其前一个状态有关的随机过程(一阶马尔科夫过程),这里的状态就是user停留在各个页面的概率。
而pagerank算法的收敛性,则来自于马尔科夫过程的收敛性。
随机过程理论表明,当一个马尔科夫过程满足下面四个条件时,其经过若干步后,会达到一个平稳分布,即各个状态的概率不再改变(pagerank中就是user在若干步后,其停留在某个页面的概率不再改变)。
这四个条件是:
可能的状态数量是有限的。
转移概率固定不变。
从任意一个状态能够变到任意其他一个状态。有可能不是从状态A直接变到状态C,而是先变到状态B再变到C,但只要有路径从状态A变成状态C就行。
过程不是简单循环。比如不能是从全A变到全B,然后又自动从全B变到全A。
显然,pagerank算法所对应的马尔科夫过程全都满足。所以,pagerank算法必然会收敛。
当然,上面的四个条件只是比较白话的版本,正式的版本是:有限状态的不可约非周期马尔可夫链必存在平稳分布。看不懂的话随便找一本随机过程的书即可。
相关文章推荐
- Notification
- iOS开发ARC内存管理技术要点
- 聊天数据库
- IOS使用soap。
- 移动小球链表实现
- 理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题
- 第十三周项目3Floyd算法验证
- 第十三周实践项目~Prim算法的验证
- 第16周项目3归并排序算法的改进
- 3115 高精度练习之减法
- rz和sz上传下载文件工具lrzsz
- 节点 二级节点 三级节点 for循环 树结构
- WMI 编程之接收事件通知
- 第十四周 项目2 二叉树排序树中查找的路径
- 支付宝支付开发教程
- 安装redis,含安装步骤和安装中出现的详细错误分析
- 洞穴探测
- SVG 动画实现弹性的页面元素效果
- IntelliJ IDEA Community Edition 14.1.4下 javafx scenebuilder的使用
- JS原生父子页面操作