PageRank и собственные векторы, Python - PullRequest
0 голосов
/ 16 июня 2019

Почему собственные векторы «демпфированной» матрицы переходов не равны оценкам PageRank с помощью модуля python networkx, см. Следующий пример:

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
...