PageRank是google搜素算法用到的算法思想。关于PageRank的背景网上有很多,这里不再介绍,下面本文将从以下方面介绍PageRank:
PageRank算法主要应用在搜索引擎的搜索功能中,其主要用来计算网页的重要程度,将最重要的网页展示在网页的前面,此算法主要围绕以下两个假设:
①如果存在一个网页,它被许多其他的链接链接到,则说明这个网页比较重要,则此网页的PageRank值比较高。
②如果存在一个网页,它本身的PageRank值比较高,且此网页又链接了一个网页,则这个被链接的网页比较重要,其PageRank值较高。
PageRank主要基于马尔科夫随机游走的思想,即下一状态只与当前状态有关,与其他状态无关。形式化表示为:若 X 0 , X 1 , X 2 , . . . . , X n X_0, X_1, X_2,....,X_n X0,X1,X2,....,Xn是一个随机过程, X i X_i Xi表示第 i i i个状态,则
P ( X n + 1 = x n + 1 ∣ X 0 = x 0 , X 1 = x 1 , . . . , X n = x n ) = P ( X n + 1 = x n + 1 ∣ X n = x n ) P(X_{n+1}=x_{n+1}|X_0=x_0, X_1= x_1,...,X_n=x_n)=P(X_{n+1}=x_{n+1}|X_n=x_n) P(Xn+1=xn+1∣X0=x0,X1=x1,...,Xn=xn)=P(Xn+1=xn+1∣Xn=xn)
其计算公式如下:
若图具有N个节点,则初始重要性为 v 0 = ( 1 N 1 N … 1 N ) T v_0 = \begin{pmatrix} \frac{1}{N} & \frac{1}{N} & \ldots & \frac{1}{N} \end{pmatrix}^T v0=(N1N1…N1)T,假设 P P P是其转移矩阵,则经过一次转移计算后的网页重要性为 v 1 = P T v 0 v_1 = P^Tv_0 v1=PTv0,通过以下公式不断迭代计算直到收敛:
v n = P T v n − 1 = ( P T ) 2 v n − 2 = … = ( P T ) n − 1 v 1 = ( P T ) n v 0 v_n=P^Tv_{n-1}=(P^T)^2v_{n-2}= \ldots = (P^T)^{n-1}v_{1}= (P^T)^{n}v_{0} vn=PTvn−1=(PT)2vn−2=…=(PT)n−1v1=(PT)nv0
则最后的平稳状态 v n v_n vn便是网页 1 , 2 , 3... , N 1,2,3...,N 1,2,3...,N的重要性排名。
假设网页之间的相互链接关系如下:
其转移矩阵P如下:
P = [ 0 1 2 0 1 2 1 2 0 1 2 0 0 1 0 0 0 0 1 0 ] P=\begin{bmatrix} 0 & \frac{1}{2} & 0 & \frac{1}{2}\\ \frac{1}{2} & 0 & \frac{1}{2} & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} P=⎣⎢⎢⎡02100210100210121000⎦⎥⎥⎤
下面解释一下这个矩阵的含义: P 21 P_{21} P21表示从B到A的转移概率是 1 2 \frac{1}{2} 21,这是因为B指向A和D两个顶点,所以每个顶点的概率是 1 2 \frac{1}{2} 21。同样, P 41 P_{41} P41表示从D到C的转移概率为1,因为D指向B,而不指向其他节点,所以概率为1。
因为共有4个节点,故 v 0 = ( 1 4 1 4 1 4 1 4 ) T v_0 = \begin{pmatrix} \frac{1}{4} & \frac{1}{4} &\frac{1}{4}& \frac{1}{4} \end{pmatrix}^T v0=(41414141)T,所以:
v 1 = P T v 0 = [ 0 1 2 0 0 1 2 0 1 0 0 1 2 0 1 1 2 0 0 0 ] ( 1 4 1 4 1 4 1 4 ) = ( 1 8 3 8 3 8 1 8 ) \begin{array}{lcl} v_1 &=& P^T v_0 \\ &=& \begin{bmatrix} 0 & \frac{1}{2} & 0 &0\\ \frac{1}{2} & 0 & 1 & 0\\ 0 & \frac{1}{2} & 0 & 1\\ \frac{1}{2}& 0 & 0 & 0 \end{bmatrix} \begin{pmatrix} \frac{1}{4} \\ \frac{1}{4} \\ \frac{1}{4} \\ \frac{1}{4} \\ \end{pmatrix} \\ &=&\begin{pmatrix} \frac{1}{8} \\ \frac{3}{8} \\ \frac{3}{8} \\ \frac{1}{8} \\ \end{pmatrix} \end{array} v1===PTv0⎣⎢⎢⎡02102121021001000010⎦⎥⎥⎤⎝⎜⎜⎛41414141⎠⎟⎟⎞⎝⎜⎜⎛81838381⎠⎟⎟⎞
v 2 = P T v 1 = [ 0 1 2 0 0 1 2 0 1 0 0 1 2 0 1 1 2 0 0 0 ] ( 1 8 3 8 3 8 1 8 ) = ( 3 16 7 16 5 16 1 16 ) \begin{array}{lcl} v_2 &=& P^T v_1 \\ &=& \begin{bmatrix} 0 & \frac{1}{2} & 0 &0\\ \frac{1}{2} & 0 & 1 & 0\\ 0 & \frac{1}{2} & 0 & 1\\ \frac{1}{2}& 0 & 0 & 0 \end{bmatrix} \begin{pmatrix} \frac{1}{8} \\ \frac{3}{8} \\ \frac{3}{8} \\ \frac{1}{8} \\ \end{pmatrix} \\ &=&\begin{pmatrix} \frac{3}{16} \\ \frac{7}{16} \\ \frac{5}{16} \\ \frac{1}{16} \\ \end{pmatrix} \end{array} v2===PTv1⎣⎢⎢⎡02102121021001000010⎦⎥⎥⎤⎝⎜⎜⎛81838381⎠⎟⎟⎞⎝⎜⎜⎛163167165161⎠⎟⎟⎞
不断迭代,直到 v n v_n vn收敛,则若 v n v_n vn的第 i i i个值最大,则说明对应的网页 i i i最重要。比如,若 v n v_n vn的第 2 2 2个值最大,说明 B B B的重要程序最高。
代码内容详见:https://github.com/Nana0606/machine_learning/tree/master/pagerank
代码中有注释,不懂的可以博客下评论。
因为最简单的PageRank算法假设网络图是连通的,这在实际的网络环境中很难达到,因此,如果在真实环境中使用PageRank算法,因为图形不连通的关系,在收敛情况下, v v v的值会出现很多0,导致算法效果极差。
因此,改进版的PageRank将随机跳转概率加入其中,其主要基于的考虑是用户在点击网页的时候不可能沿着一个网页的链接一直点下去,用户用以手动输入网址等改变点击方向,这个手动输入网址而不沿着当前页面继续点击的概率便是跳转概率。
改进版的概率转移矩阵为:
T = α P + ( 1 − α ) I T = \alpha P + (1-\alpha)I T=αP+(1−α)I
其中, 1 − α 1-\alpha 1−α表示随机跳转的概率, I I I为所有元素都为1的向量。 T T T仍然是一个马尔科夫链。
在networkX库中,pagerank函数默认 α = 0.85 \alpha=0.85 α=0.85,可自行更改。
HITS全称是Hyperlink-Induced Topic Search,即超链接诱导主题搜索,是一个链接分析方法,由康奈尔大学的Kleinberg教授提出。
HITS算法中有2个比较重要的概念,一个是“Authority”页面,另一个是“Hub”页面。
“Authority”,即权威,所有权威页面,是指页面本身的质量比较高,比如,百度搜索或者谷歌搜索首页。
“Hub”,即枢纽,表示本页面指向的其他很多高质量的“Authority”页面。
一个好的“Authority”会被很多好的“Hub”页面指向。
一个好的“Hub”页面会指向很多好的“Authority”页面。
“Authority”页面和“Hub”页面是相互增强的关系。
用户输入一个查询内容q -->找出与q相关的页面,取出相关性最大的若干页面组成根集 --> 再扩展网页集合,扩展内容为根集有相互指向关系的网页,即根集中任一网页指向的其他网页集合或者指向根集中任一网页的所有其他网页。着所有的网页构成一个网络,HITS算法就是在这个网页集合中产生的。
构建的根集有3个特点:
(1)根集中网页的数量较少
(2)根集中的网页与输入q相关
(3)根集中是authority较大的网页。
(1)初始化
一般都将所有网页的Hub值和Authority初始化为1.
(2)利用所有Hub值和Authority根据下面的规则更新“Authority”值,公式如下:
为了简化过程,这里将网页组成的网络化成二分图(实质上应该是一个网络,网络中的每一个网页都既有authority值又有hub值),示例的二分图如下:
网络中有H1、H2和H3这样3个hub节点,有A1和A2这样两个hub值节点,计算过程如下:
Step1:初始化
初始化所有authority值和hub值:
A u t h ( A 1 ) = 1 , A u t h ( A 2 ) = 1 , H u b ( H 1 ) = 1 , H u b ( H 2 ) = 1 , H u b ( H 3 ) = 1. Auth(A1) = 1, Auth(A2) = 1, Hub(H1) = 1, Hub(H2) = 1, Hub(H3) = 1. Auth(A1)=1,Auth(A2)=1,Hub(H1)=1,Hub(H2)=1,Hub(H3)=1.
Step2:更新所有Authority值
A u t h ( A 1 ) = h u b ( H 1 ) + h u b ( H 2 ) + h u b ( H 3 ) = 1 + 1 + 1 = 3 A u t h ( A 2 ) = h u b ( H 1 ) + h u b ( H 2 ) + h u b ( H 3 ) = 1 + 1 + 1 = 3 Auth(A1) = hub(H1) + hub(H2) + hub(H3) = 1 + 1 + 1 = 3 \newline Auth(A2) = hub(H1) + hub(H2) + hub(H3) = 1 + 1 + 1 = 3 Auth(A1)=hub(H1)+hub(H2)+hub(H3)=1+1+1=3Auth(A2)=hub(H1)+hub(H2)+hub(H3)=1+1+1=3
Step3:更新所有Hub值
H u b ( H 1 ) = A u t h ( A 1 ) + A u t h ( A 2 ) = 1 + 1 = 2 H u b ( H 2 ) = A u t h ( A 1 ) + A u t h ( A 2 ) = 1 + 1 = 2 H u b ( H 3 ) = A u t h ( A 1 ) = 1 Hub(H1) = Auth(A1) + Auth(A2) = 1 + 1 = 2 \newline Hub(H2) = Auth(A1) + Auth(A2) = 1 + 1 = 2 \newline Hub(H3) = Auth(A1) = 1 Hub(H1)=Auth(A1)+Auth(A2)=1+1=2Hub(H2)=Auth(A1)+Auth(A2)=1+1=2Hub(H3)=Auth(A1)=1
Step4:规范化
规范化有不同的方法,规范化之后再重复Step2-Step4,直到收敛,得到的结果就是接近真实值的authority值和hub值。
PageRank算法和HITS算法都是使用Random Walk(Random Walk思想:当前状态只依赖于前一个状态,与其他状态无关)的思想,那么二者有什么不同呢?
1、HITS是query-dependent的,PageRank是query-independent的
因为HITS是输入一个查询的关键词,而后才根据关键词构造的网页集合,因此它的搜索结果是和查询内容有关系的。而PageRank是把所有的网页构成的集合当做是一个大的网络,PageRank是在初始化之后,一直迭代直到最后稳定,而他的结果只和网页之间的链接有关系。所以,对于一个没有采用和内容相关策略控制方法、纯用PageRank的算法做成的系统,无论你输入什么样的搜索内容,返回的结果都是一样的,都是排序结果的前面几个值。
2、PageRank比HITS算法更高效
因为HITS构建网络的时候需要先根据关键字构建网络,而Pagerank是静态的,可以离线排序,因此HITS算法效率更低。
3、HITS算法中涉及到的网页的数量更少
因为PageRank涉及是全部网页,但是HITS算法是构造的网页,因此HITS算法的网页数量更少。
4、HITS算法的紧密链接社区现象
紧密社区现象,就是如果在扩展网页集合里包含部分与查询主题无关的页面,而且这些页面之间有较多的相互链接指向,那么使用HITS算法很可能会给予这些无关网页很高的排名,导致搜索结果发生主题漂移。
5、HITS算法容易反作弊
从链接反作弊的角度来说,PageRank从机制上优于HITS算法, HITS从机制上很容易被作弊者操纵,比如作弊者可以建立一个网页,页面内容增加很多指向高质量网页或者著名网站的网址,这就是一个很好的Hub页面,之后作弊者再将这个网页链接指向作弊网页,于是可以提升作弊网页的Authority得分。
6、HITS算法结构不稳定
因为HITS算法中,当对“扩充网页集合”内链接关系作出很小改变,则对最终排名有很大影响,PageRank不会有这些问题。
注意: 网络的同构性指网络中只含有一种实体,异构性指一个网络同时含有多种实体。
参考文献:
http://blog.csdn.net/hguisu/article/details/8013489