Я пытаюсь реализовать алгоритм ранжирования страницы в R, используя следующие шаги:
Загрузите образец графика, такой как этот:
0 1 0 2 0 3 1 2 1 5 2 0 2 4 3 1 3 0 3 4 4 1 4 5 5 2 5 3
Создайте матрицу смежности из этого графика
- Создайте цепь Маркова (матрицу перехода)
- Найдите стационарное распределение и нормализуйте его
Ниже приведен код, реализующий все эти шаги:
g = read.graph(x)
a = get.adjacency(g)
markov = a / rowSums(a)
e = eigen(t(markov))
v <- e$vec[,1]
normalized <- v / sum(v)
когда я сравниваю вектор из нормализованного объекта с вектором, созданным page.rank(g) для этого конкретного графика, они почти одинаковы с небольшими отличиями. Однако, когда я пробую это на этом графике:
0 1
0 2
0 3
1 2
1 5
2 0
2 4
3 1
3 0
3 4
4 1
4 5
5 2
5 3
6 1
6 2
6 5
6 0
7 3
7 4
7 6
7 7
7 1
8 2
8 5
9 8
9 7
9 1
9 5
10 2
10 3
10 9
Разница огромная!
У кого-нибудь есть объяснение этому или альтернативная реализация этого алгоритма в R.