R中的PageRank有向量的问题以及如何迭代邻接矩阵

时间:2016-12-12 18:36:23

标签: r matrix vector data-science pagerank

我有一个500x500的邻接矩阵1和0,我需要计算每页的pagerank。我这里有一个代码,其中R是矩阵,T = 0.15是常数:

 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,我需要每页的pagerank。

有没有办法构建一个与矩阵有关的pageranks表?我在网上找不到与我的特定案例相关的任何内容。

1 个答案:

答案 0 :(得分:1)

几点:

(1)您需要将二元邻接矩阵(在您的情况下为R)转换为列 - 随机转移矩阵,以(表示页面之间的转换概率)开始。

(2)A也需要保持为列随机,然后只有对应于特征值1的主导特征向量将是页面等级向量。

(3)要找到矩阵A的第一个特征向量,需要使用特征(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