Pagerank和特征向量,Python

时间:2019-06-16 08:09:36

标签: python eigenvector pagerank

为什么使用python networkx模块的“阻尼”转换矩阵的特征向量不等于pagerank分数,请参见以下示例:

import numpy as np
M = np.array([[0,   0,   0,   0,    0 ],
              [1/3, 0,   0,   1/2, 1/2],
              [1/3, 0,   0,   1/2,  0 ],
              [1/3, 1/2, 1/2, 0,   1/2],
              [0,   1/2, 1/2, 0,    0 ]])
d=.85 #default damping factor
w0, v0 =np.linalg.eig(d*M + (1-d)*np.ones(M.shape))

import networkx as nx
nx_graph = nx.from_numpy_array(M)
scores = nx.pagerank(nx_graph,1)

分数与第一个特征向量完全不同。 这仅仅是一个规范化问题,还是可能存在概念上的错误? 以下“手动功能”返回了另一组分数:

def pagerank(M, eps=1.0e-8, d=0.85):
    N = M.shape[1]
    v = np.random.rand(N, 1)
    v = v / np.linalg.norm(v, 1)
    last_v = np.ones((N, 1), dtype=np.float32) * 100

    while np.linalg.norm(v - last_v, 2) > eps:
        last_v = v
        v = d * np.matmul(M, v) + (1 - d) / N
    return v

0 个答案:

没有答案