【问题标题】:PageRank in R. Issue with vectors and how to iterate through adjacency matrixR中的PageRank。向量问题以及如何遍历邻接矩阵
【发布时间】:2016-12-12 18:36:22
【问题描述】:

我有一个 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。

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

【问题讨论】:

    标签: r matrix vector data-science pagerank


    【解决方案1】:

    几点:

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

    (2) A 也需要保持列随机性,那么只有特征值 1 对应的主导特征向量才会是页面排名向量。

    (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
    

    【讨论】:

    • 不过,我得到更多错误: B = matrix(1/n, n, n) # the teleportation matrix > A = 0.85 * R + 1 * B Error in 0.85 * R + 1 * B : non-conformable arrays > A
    • 由于某些错误,未计算 A。在这种情况下,R 是您的转移概率矩阵,B 是传送矩阵,请确保 dim(R) = dim(B)。我们有吗?此外,A = (1-p)*R+p*B,如果瞬移概率 p = 0.15,则 1-p=0.85。
    猜你喜欢
    • 2013-04-07
    • 2022-12-03
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多