R 中的 PageRank。向量问题以及如何遍历邻接矩阵

PageRank in R. Issue with vectors and how to iterate through adjacency matrix

我有一个 1 和 0 的 500x500 邻接矩阵,我需要为每个页面计算 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。

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

几点:

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

(2) A也需要保持列随机,那么只有特征值1对应的主导特征向量才是page rank向量。

(3)求矩阵A的第一个特征向量,需要使用eigen(A)$vectors[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