PageRank
PageRank是用Link Analysis来计算结点重要性的一种算法,最经典的应用就是网页的重要性排序。我们可以把互联网看作是一张有向图,每个网址都是一个结点,边就是网站中的超链接,如果网站 i i i中有跳转到网站 j j j的链接,那么就连一条从 i i i到 j j j的边。显然,每个网站的重要性是不一样的,比如www.google.com的重要程度显然要比www.nus.edu.sg的重要程度高。
“Flow” Model
最直接的想法是把边看作投票,根据每个结点的入度排序,认为入度大的结点比较重要。但是每条边的重要程度也不一样,一般来说,从重要的结点射出的边比较重要,因此我们定义:对于结点
    
     
      
       
        i
       
      
      
       i
      
     
    i,如果它的重要度为
    
     
      
       
        
         r
        
        
         i
        
       
      
      
       r_i
      
     
    ri,有
    
     
      
       
        
         d
        
        
         i
        
       
      
      
       d_i
      
     
    di条出边,那么每条出边分得得票数为
    
     
      
       
        
         r
        
        
         i
        
       
       
        /
       
       
        
         d
        
        
         i
        
       
      
      
       r_i/d_i
      
     
    ri/di。这里于是对于任意一个结点
    
     
      
       
        j
       
      
      
       j
      
     
    j,它的重要度就可以表示为:
 
     
      
       
        
         
          r
         
         
          j
         
        
        
          
        
        
         =
        
        
          
        
        
         
          ∑
         
         
          
           i
          
          
           →
          
          
           j
          
         
        
        
         
          
           r
          
          
           i
          
         
         
          
           d
          
          
           i
          
         
        
       
       
         r_j\ =\ \sum_{i \rightarrow j}\frac{r_i}{d_i} 
       
      
     rj = i→j∑diri
 下图是一个例子

下面改写为矩阵形式。定义矩阵stochastic adjacency matrix 
    
     
      
       
        M
       
      
      
       M
      
     
    M,设结点
    
     
      
       
        j
       
      
      
       j
      
     
    j有
    
     
      
       
        
         d
        
        
         j
        
       
      
      
       d_j
      
     
    dj条出边,那么如果
    
     
      
       
        i
       
       
        →
       
       
        j
       
      
      
       i \rightarrow j
      
     
    i→j有一条边,就令
    
     
      
       
        
         M
        
        
         
          i
         
         
          j
         
        
       
       
        =
       
       
        
         1
        
        
         
          d
         
         
          j
         
        
       
      
      
       M_{ij}=\frac{1}{d_j}
      
     
    Mij=dj1,再令
    
     
      
       
        r
       
      
      
       r
      
     
    r表示结点重要度vector,
    
     
      
       
        
         r
        
        
         i
        
       
      
      
       r_i
      
     
    ri表示结点
    
     
      
       
        i
       
      
      
       i
      
     
    i的重要度。于是,上面的式子就可以直接写作:
 
     
      
       
        
         r
        
        
          
        
        
         =
        
        
          
        
        
         M
        
        
         r
        
       
       
         r\ =\ Mr 
       
      
     r = Mr
Stationary Distribution
我们令
    
     
      
       
        p
       
       
        (
       
       
        t
       
       
        )
       
      
      
       p(t)
      
     
    p(t)表示
    
     
      
       
        t
       
      
      
       t
      
     
    t时刻我们所处结点的概率分布,那么
    
     
      
       
        t
       
       
        +
       
       
        1
       
      
      
       t+1
      
     
    t+1时刻的分布就可以写作:
 
     
      
       
        
         p
        
        
         (
        
        
         t
        
        
         +
        
        
         1
        
        
         )
        
        
          
        
        
         =
        
        
          
        
        
         M
        
        
          
        
        
         p
        
        
         (
        
        
         t
        
        
         )
        
       
       
         p(t+1)\ =\ M \ p(t) 
       
      
     p(t+1) = M p(t)
 那么当
    
     
      
       
        p
       
       
        (
       
       
        t
       
       
        +
       
       
        1
       
       
        )
       
       
         
       
       
        =
       
       
         
       
       
        M
       
       
         
       
       
        p
       
       
        (
       
       
        t
       
       
        )
       
       
         
       
       
        =
       
       
         
       
       
        p
       
       
        (
       
       
        t
       
       
        )
       
      
      
       p(t+1)\ =\ M\ p(t)\ =\ p(t)
      
     
    p(t+1) = M p(t) = p(t)时,我们称达到了stationary distribution。那么其实我们的
    
     
      
       
        r
       
      
      
       r
      
     
    r就是一个stationary distribution,因此我们只需要求解出
    
     
      
       
        r
       
      
      
       r
      
     
    r即可。
Power Iteration
求解
    
     
      
       
        r
       
      
      
       r
      
     
    r的方法叫做power iteration,就是迭代求解。
 
     
      
       
        
         
          r
         
         
          
           (
          
          
           t
          
          
           +
          
          
           1
          
          
           )
          
         
        
        
          
        
        
         =
        
        
          
        
        
         M
        
        
         
          r
         
         
          
           (
          
          
           t
          
          
           )
          
         
        
       
       
         r^{(t+1)}\ =\ M r^{(t)} 
       
      
     r(t+1) = Mr(t)
 迭代终止的条件是:
    
     
      
       
        ∣
       
       
        
         r
        
        
         
          (
         
         
          t
         
         
          +
         
         
          1
         
         
          )
         
        
       
       
         
       
       
        −
       
       
         
       
       
        
         r
        
        
         
          (
         
         
          t
         
         
          )
         
        
       
       
        <
       
       
        δ
       
       
        ∣
       
      
      
       |r^{(t+1)}\ -\ r^{(t)} \lt \delta|
      
     
    ∣r(t+1) − r(t)<δ∣
Dead End & Spider Trap
PageRank其实有两种比较特殊的情况需要特殊处理,一个叫做dead end,另一个是spider trap。
dead end
这种情况指的是某个结点没有任何出边,那么当我们走到这个结点的时候就跳不出来了。在这种情况下进行power iteration,最终我们会得到一个全是0的概率分布,这不是我们想要的。

针对这一问题的解决方法叫做Teleport。具体来说,假设结点 u u u是没有出边的,那么在 M M M中, u u u这一列应该全是0。我们手动更改一下,将这个一列修改为一个 ∣ V ∣ |V| ∣V∣的uniform distribution,也就是当我们到达结点 u u u时,我们有 1 ∣ V ∣ \frac{1}{|V|} ∣V∣1的概率跳到任何结点,这样就不会一直卡死在dead end了。

spider trap
spider trap指的是我们进入了一个环,那么在这种情况下进行power iteration的结果就是概率分布只会存在于环上的结点,非环上的结点概率分布为0。

针对这一问题的方法也是类似Teleport。我们增加一个概率 β \beta β,,每一步,我们有 β \beta β的概率继续走出边, 1 − β 1-\beta 1−β的概率随即跳到某个结点, β \beta β的取值大概在 0.8 ∼ 0.9 0.8 \sim 0.9 0.8∼0.9。

Optimized PageRank
解决了上述两个问题之后,我们优化过的PageRank公式如下:
 
     
      
       
        
         
          r
         
         
          j
         
        
        
          
        
        
         =
        
        
          
        
        
         
          ∑
         
         
          
           i
          
          
           →
          
          
           j
          
         
        
        
         
          β
         
         
          
           
            r
           
           
            i
           
          
          
           
            d
           
           
            i
           
          
         
         
           
         
         
          +
         
         
           
         
         
          (
         
         
          1
         
         
          −
         
         
          β
         
         
          )
         
         
          
           1
          
          
           N
          
         
        
       
       
         r_j\ =\ \sum_{i \rightarrow j}{\beta\frac{r_i}{d_i}\ +\ (1-\beta) \frac{1}{N}} 
       
      
     rj = i→j∑βdiri + (1−β)N1
 著名的Google PageRank就是这么来的,写作矩阵形式就是:
 
     
      
       
        
         G
        
        
          
        
        
         =
        
        
          
        
        
         β
        
        
         M
        
        
         +
        
        
         (
        
        
         1
        
        
         −
        
        
         β
        
        
         )
        
        
         [
        
        
         
          1
         
         
          N
         
        
        
         
          ]
         
         
          
           N
          
          
           ×
          
          
           N
          
         
        
       
       
         G\ =\ \beta M+(1-\beta)[\frac{1}{N}]_{N \times N} 
       
      
     G = βM+(1−β)[N1]N×N










