如何计算 PageRank 向量?

How to compute PageRank vector?

问题

这是教科书中的例子。但是,我得到了不同的答案。

示例:

对于 0.14 的隐形传态,其(随机)转移概率矩阵如下。这个矩阵的 pagerank 向量是

>  P =  [0.05 0.04 0.11 0.25 0.21 0.04 0.31].

转移概率矩阵

A = 

    0.0200    0.0200    0.8800    0.0200    0.0200    0.0200    0.0200 
    0.0200    0.4500    0.4500    0.0200    0.0200    0.0200    0.0200
    0.3100    0.0200    0.3100    0.3100    0.0200    0.0200    0.0200
    0.0200    0.0200    0.0200    0.4500    0.4500    0.0200    0.0200
    0.0200    0.0200    0.0200    0.0200    0.0200    0.0200    0.8800
    0.0200    0.0200    0.0200    0.0200    0.0200    0.4500    0.4500
    0.0200    0.0200    0.0200    0.3100    0.3100    0.0200    0.3100

我的尝试

我用MATLAB解决了这个问题。真正的瞬移矩阵是

> A' = A * (1 - 0.14) + 0.14 * 1 / 7

然后我尝试计算特征向量。

> [V,D] = eig(A')

而特征值=1 的特征向量就是答案。然而,我得到了

>  [0.1751    0.1377    0.3550    0.5137    0.4255    0.1377  0.6005].

我做错了什么?这是相应的 MATLAB 输出:

>> A' =

    0.0372    0.0372    0.7768    0.0372    0.0372    0.0372    0.0372
    0.0372    0.4070    0.4070    0.0372    0.0372    0.0372    0.0372
    0.2866    0.0372    0.2866    0.2866    0.0372    0.0372    0.0372
    0.0372    0.0372    0.0372    0.4070    0.4070    0.0372    0.0372
    0.0372    0.0372    0.0372    0.0372    0.0372    0.0372    0.7768
    0.0372    0.0372    0.0372    0.0372    0.0372    0.4070    0.4070
    0.0372    0.0372    0.0372    0.2866    0.2866    0.0372    0.2866

>> [V,D] = eig(A')

V =

    0.1751    0.4326   -0.0005   -0.0003    0.2826    0.2820    0.3396
    0.1377   -0.0000    0.0005    0.0007    0.0000   -0.4279   -0.5152
    0.3550   -0.5594    0.0012    0.0010    0.6482    0.4182    0.5035
    0.5137   -0.0000   -0.4121   -0.5374   -0.0000    0.4279    0.3142
    0.4255   -0.4326   -0.4097   -0.2704   -0.2826    0.1459   -0.0253
    0.1377    0.0000    0.0005    0.0007    0.0000   -0.4279   -0.1132
    0.6005    0.5594    0.8139    0.7988   -0.6482   -0.4182   -0.5035


D =

    1.0035         0         0         0         0         0         0
         0   -0.3225         0         0         0         0         0
         0         0   -0.1229         0         0         0         0
         0         0         0   -0.0010         0         0         0
         0         0         0         0    0.5719         0         0
         0         0         0         0         0    0.3698         0
         0         0         0         0         0         0    0.3698

>> V'

ans =

    0.1751    0.1377    0.3550    0.5137    0.4255    0.1377    0.6005
    0.4326   -0.0000   -0.5594   -0.0000   -0.4326    0.0000    0.5594
    -0.0005    0.0005    0.0012   -0.4121   -0.4097    0.0005    0.8139
    -0.0003    0.0007    0.0010   -0.5374   -0.2704    0.0007    0.7988
    0.2826    0.0000    0.6482   -0.0000   -0.2826    0.0000   -0.6482
    0.2820   -0.4279    0.4182    0.4279    0.1459   -0.4279   -0.4182
    0.3396   -0.5152    0.5035    0.3142   -0.0253   -0.1132   -0.5035

一件事是你的转换矩阵的行总和应该为 1,这样它就是一个合适的随机矩阵(它们稍微偏离)。当你计算平稳分布时,你采用特征值为 1 的特征向量。这是正确的,但你必须将它归一化使其和为 1,这样它就是一个适当的概率分布。如果你这样做,你会看到平稳分布(你列出的矩阵 A,在将行归一化为单位总和之后)基本上等于你声明的 'correct' 值 [0.05 0.04 0.11 0.25 0.21 0.04 0.31].根据您的描述,听起来 A 已经包含了传送转换,因此您的代码中没有必要 运行 A = A * (1 - 0.14) + 0.14 * 1 / 7。这解释了为什么 A 的平稳分布已经与 'correct' 答案匹配。