Почему собственные векторы «демпфированной» матрицы переходов не равны оценкам 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