对PageRank算法的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Oscar6280868/article/details/81130853

顾名思义,PageRank其实就是网页排名的意思,当我们现在在一个搜索引擎搜索一个关键词的时候,搜索引擎如何将我们最想得到的信息放在前面呢,这里就涉及到了网页的排名,在我们日常的搜索中,除了商业上的竞价排名,总的来说,一个特定的网页搜索取决于网页的质量信息和这个查询与每个网页的相关性信息。在互联网上,一个网页被很多其他网页所链接,那么就说明这个网页受到普遍的承认和信赖,那么这个网页的排名就应该高,这个网页的权重就应该大,这个就是PageRank的核心思想,当然了实际上每个大的搜索引擎所用的PageRank算法远比这个要复杂得多。以前有幸上过陈关荣教授的一门课程”Complex Network”,里面介绍过一种网络叫做无尺度网络(Scale-free Network),其实我们互联网就是一种无尺度网络,无尺度网络的特征就是整个网络中大部分的节点和少数几个节点相连接,而很少数的节点和很多的节点相连接,所以说在整个无尺度网络中,大的节点只有少数一部分,而多数都是小的节点。所以在我们的PageRank中,排名高的网页就相当于是大的节点,被很多的网页所指向,所以说被指向越高的网页,就表示更重要,权重越高,排名也应该靠前;还有就是被排名高的网页权重高的网页所指向的网页,排名也应该靠前,这个其实也很好理解,就比如说你拥有了某位知名教授的推荐信,那么对你找工作申请学校也会有很大的帮助。所以说一个网页的排名应该是参考所有指向它的网页的权重之和的,我们来举一个栗子:
网页排名
这个栗子中,Y网页被X1、X2、X3、X4这四个网页所指向,所以PageRank(Y) = 0.01 + 0.03 + 0.05 + 0.12 = 0.21。所以在这个网页排名中也有用到其他网页的排名,其他网页的排名又源自于指向它的网页的排名,这不就是一个悖论了吗。后来,有一个叫布林的人提出了一种解决方案,他把这个问题转换成了一个矩阵的问题,并用迭代的方法解决了此问题。我们再来举一个栗子:
转移图
我们现在假设有A、B、C、D这四个网页,A网页可以访问B、C、D三个网站,我们假设A网站访问B、C、D的概率是一样的都是1/3,不能访问自己,所以网站A的转移概率是(0,1/3,1/3,1/3),所以同理,我们可以得到这四个网站的转移概率矩阵:

T = [ 0 1 / 2 0 0 1 / 3 0 1 / 2 1 1 / 3 0 0 0 1 / 3 1 / 2 1 / 2 0 ]

我们把这个转移矩阵定义成T,在这个矩阵中T[i][j]表示从i网页跳转到j网页的概率,这个矩阵的特点就是每一列的和都是1,因为每一列就表示一个网站的转移向量。我们假定A、B、C、D四个网页初始的时候访问的概率都是相等的1/4,所以我们可以得到:

V 1 = T V 0 = [ 0 1 / 2 0 0 1 / 3 0 1 / 2 1 1 / 3 0 0 0 1 / 3 1 / 2 1 / 2 0 ] [ 1 / 4 1 / 4 1 / 4 1 / 4 ] = [ 1 / 8 11 / 24 1 / 12 1 / 3 ]

所以经过一次跳转之后,访问到各个网站的概率如上矩阵所示,同理,我们可以继续的迭代下去n次,可以得到:

V n = T V n 1 = T n V 0

其实n趋近于无穷大的时候,Vn要最终收敛,概率转移矩阵要T要满足下面三个条件:

  1. T为随机矩阵:T矩阵中的每一个元素不能小于0且每一列向量的元素和为1.
  2. T是不可约的:T矩阵中每一个点都能够到达另一个点,在数据结构图中,就是强连通的意思,不能够在矩阵中出现一些特殊的情况,比如说有一列向量都是0,也就是说有一个节点没有指向任何一个节点,也没有被任何一个节点所指向;还有就是在对角线上出现1,就表示这个网页只指向了自己,我们称之为陷阱。
  3. T是非周期的:若T是周期性的,那么就表示马尔科夫链没有随机性,所以T应该是非周期的。

所以最终V矩阵收敛的时候,最终得到的向量就可以表示网页的排名了。我们来看看计算的过程:
假定有向量B:

B = ( b 1 , b 2 , . . . , b N ) T

表示第1个到第N个网页的排名。
A = [ a 11 . . . a 1 n . . . a 1 M . . . . . . a m 1 . . . a m n . . . a m M . . . . . . a M 1 . . . a M n . . . a M M ]

这个矩阵A表示网页之间连接的数量,其中amn表示第m个网页指向第n个网页的连接数,这个时候我们要通过A来求解B。因为这是一个迭代的过程,所以我们可以知道:
B i = A B i 1

因为在初始的时候,假定每一个网页的概率都是相等的,假设网页的数量是N,那么:
B 0 = ( 1 N , 1 N , . . . , 1 N )

我们通过上述的运算,可以迭代得到B1,B2…,因为最中的结果是收敛的,我们可以认为i足够大的时候,Bi=Bi-1=B,那么我们可以得到B=B x A,其实我们可以将停止迭代的条件定义成:
| B i B i 1 | < ε

当两次迭代的结果小于某一个阈值的时候,我们可以认为这个时候已经收敛了,一般来说,整个过程进行10次左右的迭代就收敛了。
还有由于网页之间链接的数量相比于整个互联网来说非常稀疏,所以说整个计算的过程也要对小概率或者零概率的事件进行平滑处理,网页排名的计算是在一维向量中处理的,所以我们对他的处理需要一个常数alpha,所以我们可以得到公式:
B i = [ α N I + ( 1 α ) A ] B i 1 = α N I B i 1 + ( 1 α ) B i 1

其中N是网页的总数量,I是单位矩阵,整个式子的第一项就是我们对小概率或者是零概率事件所做的平滑处理,这个就是我们网页排名算法的迭代公式了。
当然了,现在搜索引擎公司的网页排名算法相比这个来说要复杂得多了,但是基本的思想就是基于PageRank的,希望这篇文章对于PageRank算法的理解有所帮助,本人能力有限,如有纰漏,也请朋友们不吝指教,谢谢。

猜你喜欢

转载自blog.csdn.net/Oscar6280868/article/details/81130853