2016-12-12 19 views
1

У меня есть матрица смежности 500x500, равная 1 и 0, и мне нужно вычислить pagerank для каждой страницы. У меня есть код здесь, где R является матрицей и Т = 0,15 является константой:PageRank в R. Проблема с векторами и как выполнить итерацию по матрице смежности

n = ncol(R) 
B = matrix(1/n, n, n) # the teleportation matrix 
A = 0.85 * R + 0.15 * B 
ranks = eigen(A)$vectors[1] # my PageRanks 
print(ranks) 
[1] -0.5317519+0i 

У меня нет большого опыта работы с R, но я полагаю, что данный вывод является общим PageRank, и я нужна страница для каждой страницы.

Есть ли способ построить таблицу столбцов по отношению к матрице? Я не нашел ничего связанного с моим конкретным случаем в Интернете.

ответ

1

Несколько точек:

(1) Вы должны преобразовать двоичную матрицу смежности (R в вашем случае) к столбцам стохастической матрице перехода, чтобы начать с (что составляет вероятность переходов между страницами).

(2) А также должен оставаться стохастическим столбцом, тогда только доминирующим собственным вектором, соответствующим собственному значению 1, будет вектор ранга страницы.

(3) Для того, чтобы найти первый собственный вектор матрицы А, вам нужно использовать Эйген (A) $ векторы [1]

Пример с небольшими 5x5 матрицей смежности R:

set.seed(12345) 
R = matrix(sample(0:1, 25, replace=TRUE), nrow=5) # random binary adjacency matrix 
R = t(t(R)/rowSums(t(R))) # convert the adjacency matrix R to a column-stochastic transition matrix 
n = ncol(R) 
B = matrix(1/n, n, n) # the teleportation matrix 
A = 0.85 * R + 0.15 * B 
A <- t(t(A)/rowSums(t(A))) # make A column-stochastic 
ranks = eigen(A)$vectors[,1] # my PageRanks 
print(ranks) 
# [1] 0.05564937 0.05564937 0.95364105 0.14304616 0.25280990 
print(ranks/sum(ranks)) # normalized ranks 
[1] 0.03809524 0.03809524 0.65282295 0.09792344 0.17306313 
+0

благодарственными вы очень! это именно то, что мне нужно! – v0id

+0

, я получаю следующие ошибки: B = матрица (1/n, n, n) # матрица телепортации > A = 0.85 * R + 1 * B Ошибка в 0,85 * R + 1 * B: несогласованность массивы > A <- t (t (A)/rowSums (t (A))) # make Столбец-стохастик Ошибка в t (A): объект 'A' не найден @sandipan – v0id

+0

A не вычисляется, потому что некоторой ошибки. В этом случае R - ваша матрица вероятности перехода, а B - матрица телепортации, и, пожалуйста, убедитесь, что dim (R) = dim (B). У нас есть это? Кроме того, A = (1-p) * R + p * B, если проблема телепортации p = 0,15, 1-p = 0,85. –