我尝试了 PageRank 算法。当页数很大时,我遇到一种情况,一个用于重新归一化向量的公式(使其分量之和等于 1;向量的元素保证为正)工作正常,而另一个停止工作并且使用它会导致迭代在一段时间后开始发散(新旧 r 之间的差异开始变大)。
r = r./sum(r) # this does not work
r = r + (1-sum(r))/N * ones(N) # this works
我的 PageRank 算法看起来像这样 (Julia)
M # M is NxN sparse transition matrix;
# may contain all-zero columns (sinks);
beta = 0.8
epsilon = 1e-6
r = 1/N ./ ones(N)
rtm1 = ones(N)
while(sum(abs(r-rtm1)) > epsilon)
rtm1 = r
r = beta*M*r
######
# renormalization
# pick one or the other
# r = r./sum(r)
# r = r + (1-sum(r))/N * ones(N)
######
end
# now r holds the result
我猜测对于大量页面,r 的元素可能会变得非常小(如 1.0e-7 或更小),然后第一个标准化公式就不能很好地工作。我想听听一个对数字计算有一定经验的人的解释。