阅读LBSN中的位置推荐的一些文献时,遇到了一种用个性化PageRank算法来进行位置推荐的算法,虽然以前也大体了解过PageRank算法,但不细致,此次特地作一个整理总结。算法
PageRank,中文通常叫佩奇排名或网页排名,是利用网页简单的超连接来计算网页的分值,从而给网页进行排名的一种算法,以Google公司创办人Larry Page之姓来命名。Google用它来体现网页的相关性和重要性,在搜索引擎优化操做中是常常被用来评估网页优化的成效因素之一。网络
它的思想是模拟一个清闲的上网者,上网者首先随机选择一个网页打开,而后在这个网页上呆了几分钟后,跳转到该网页所指向的连接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank就是估计这个清闲的上网者分布在各个网页上的几率。优化
互联网的网页能够看做是一个有向图,其中网页是结点,若是网页A有连接到网页B,则存在一条有向边A-->B,下面是一个简单的示例:搜索引擎
这个简单的网络中只有四个网页,若是当前在A网页,因为A有3条出链,则上网者将会各以1/3的几率跳转到B、C和D。因此若是一个网页有$k$条出链,那么该网页跳转到任意一个出链上的几率时1/k,同理D到B、C的几率各为1/2,而B到C的几率为0 。访问一个网页的几率由连接到它的全部网页的几率来决定,例如网页A由B、C两个网页连接,则:spa
$$ P(A)=P(C)+\frac{P(B)}{2} $$3d
每一个网页的访问几率能够用一个向量进行表示,则全部网页的跳转几率能够用户一个用转移矩阵来表示,当一个网络中有n个网页结点时,则转移矩阵M是一个$n\times n$的方阵。所以上面示例图对应的转移矩阵以下:blog
初始时,假设上网者在每个网页的几率都是相等的,即$\frac{1}{n}$,因而初始的几率分布就是一个全部值都为1/n的n维列向量$V_0$,用$V_0$去右乘转移矩阵,就能够获得下一步对每一个网页的访问几率$V_1$:索引
以后的过程就是一个不断的迭代过程,用获得的网页访问几率去右乘转移矩阵,直到达到一个收敛的状态。能够发现,这是一个马尔科夫过程,即当前的状态仅由它前一个状态来决定。rem
咱们知道,要知足马尔科夫过程的收敛性,须要具有一个条件,即图要是强连通的。get
而互联网上的网页不知足强连通的特性,由于有一些网页不指向任何网页,因此当上网者到达这类网页时,他将无法跳转到其余的网页,所以一直迭代下去,会致使全部网页的访问几率都为0;
如上所示,网页C不指向任何一个网页,其对应的转移矩阵为:
用初始的访问几率右乘转移矩阵,而后一直迭代下去,则最终全部的访问几率都变为0:
另一个问题是陷阱问题,即有些网页不存在指向其余网页的连接,但存在指向本身的连接,如图所示:
咱们能够发现,当上网者跑到C网页后,就像跳进了陷阱,不再能从C中出来了,这将致使几率分布值所有转移到C网页上来,其对应的转移矩阵为:
用初始的访问几率右乘转移矩阵,而后一直迭代下去,则全部的几率都会转移到网页C:
上述的问题只是特殊的状况,为了更好的理解PageRank算法的原理而已。实际上Google提出的PageRank算法分为两部分,另外一部分是由必定的几率跳转到一个随机的网页,这样就能避免终止点问题和陷阱问题。
其中$\alpha$通常取为0.85,如今咱们来计算带陷阱问题的网络的几率分布:
重复迭代下去,获得:
上述的网络只有四个结点,直接用矩阵乘法进行是十分快捷的。可是真实的网络中有上千万个网页结点,若是仍是直接用矩阵乘法进行计算,时间复杂度就过高了。所以不少有关PageRank算法的博客都提到了Map-Reduce的计算,这里后续进行补充...
个性化PageRank算法的目标是要计算全部节点相对于用户u的相关度。从用户u对应的节点开始游走,每到一个节点都以1-d的几率中止游走并从u从新开始,或者以d的几率继续游走,从当前节点指向的节点中按照均匀分布随机选择一个节点往下游走。这样通过不少轮游走以后,每一个顶点被访问到的几率也会收敛趋于稳定,这个时候咱们就能够用几率来进行排名了。
个性化PageRank的计算能够用bookmark-coloring算法,参考文献[2]
具体的算法原理后期补充...
参考内容: