2016-12-12 6 views
1

1과 0의 500x500 인접 행렬이 있으며 각 페이지마다 PageRank를 계산해야합니다. 나는 R 행렬이고, 여기에 코드를 T는 = 0.15가 일정 : 나는 R과 많은 경험이없는PageRank in 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 

,하지만 난 지정된 출력은 일반적으로 페이지 랭크 (PageRank)라고 가정하고, I 각 페이지마다 페이지 랭크가 필요합니다.

매트릭스와 관련하여 페이지 랭크 테이블을 구성하는 방법이 있습니까? 나는 웹에서 나의 특별한 사건과 관련된 것을 찾지 못했다.

답변

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 
+0

감사 당신이 아주 많이! 그게 내가 필요한거야! – v0id

+0

더 많은 오류가 발생합니다.B = 행렬 (1/n, n, n) # 순간 이동 행렬 > A = 0.85 * R + 1 * B 0.85 * R + 1 * B의 오류 : 배열은 A <- t (A)/rowSums (t (A))) # 행렬 화열을 만든다. t (A)의 오류 : 'A'객체를 찾을 수 없다. @sandipan – v0id

+0

A가 계산되지 않기 때문에 어떤 오류가 있습니다. 이 경우 R은 전환 확률 행렬이고 B는 순간 이동 행렬이며 dim (R) = dim (B)인지 확인하십시오. 우리가 그걸 가지고 있니? 또한 순간 이동 prob p = 0.15, 1-p = 0.85 인 경우 A = (1-p) * R + p * B. –