Код R: алгоритм ранжирования страницы Google с мощной итерацией - PullRequest
0 голосов
/ 22 февраля 2020

Мы изучали алгоритм Google Page Rank в классе и на практике работаем над полужестким набором данных. Я собрал коды, но результат не имеет смысла, и я уверен, что где-то по пути что-то сделал не так (но не смог выяснить где).

## I read in the dataset (Hollins University webpages, total of 6012 pages), and use the igraph package to create a sparse adjacency matrix
h <- as_adjacency_matrix(h_graph)

## add "1" to diagonal positions of the adjacency matrix h to avoid rows of 0's
i <- 1
for (i in 1:nrow(h)){
  h[i,i] <- 1
  i <- i + 1
}

##turn the adjacency matrix into a transition probability matrix
rs <- Matrix:: rowSums(h)
h <- h/rs


Hollins_PR <- function(v0, p = 0.15){
  i <- 0
  v <- v0
  for (i in 0:50){
    i <- i + 1
    vs <- sum(v)
    Bv <- rep(vs, nrow(h))
    v <- (1-p)*t(h)%*%v + p*(1/nrow(h))*Bv
    v <- v/sqrt(sum(v)) ##normalize vector so it sums to 1
  }
  print(sum(v)) ##to make sure the probability vector sums to 1
##order the values by index so I can extract the largest probabilities
  pr <- order(v, decreasing = TRUE)[1:3]
  print(pr)
  print(v[pr[1]])
}

## M = (1-p)A + pB
## "A" (h in my case) is sparse, and I want to keep M sparse as well.  
## v1 = t(M)v0 = (1-p) * t(A) %*% v + p * B %*% v0
## B %*% v0 = (1/n) * z, where z is a nx1 vector of the same value - sum of values in v0
## v0 = 6012 x 1 vector (random initial guess; I used v0 <- rep(1, nrow(h))

Результат показал, что страница архива имеет наивысший рейтинг страниц, что выглядит ОЧЕНЬ НЕВЕРНО. Где это go не так?

...