Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pagerank概率收敛到零?_Python_Math_Pagerank - Fatal编程技术网

Python Pagerank概率收敛到零?

Python Pagerank概率收敛到零?,python,math,pagerank,Python,Math,Pagerank,我试图从头开始编写pagerank算法,到目前为止,我已经构建了随机矩阵G,现在我试图找到极限概率。极限概率计算如下: - choose a random vector pi, such that each element is positive and sums to 1 - compute pi * G - compute pi * G^2 - compute pi * G^3 - repeat until convergence 结果应该是另一个带有正元素的向量,和为1。当我计算时,我的

我试图从头开始编写pagerank算法,到目前为止,我已经构建了随机矩阵
G
,现在我试图找到极限概率。极限概率计算如下:

- choose a random vector pi, such that each element is positive and sums to 1
- compute pi * G
- compute pi * G^2
- compute pi * G^3
- repeat until convergence
结果应该是另一个带有正元素的向量,和为1。当我计算时,我的结果收敛到零。代码如下:

import numpy as np

# Define stochastic matrix (rows sum to 1), dimensions [6, 6]
G = np.array([[  8.29187396e-04,   4.98341625e-01,   8.29187396e-04,
      4.98341625e-01,   8.29187396e-04,   8.29187396e-04],
   [  3.32779623e-01,   5.53709856e-04,   3.32779623e-01,
      5.53709856e-04,   3.32779623e-01,   5.53709856e-04],
   [  1.66666667e-01,   1.66666667e-01,   1.66666667e-01,
      1.66666667e-01,   1.66666667e-01,   1.66666667e-01],
   [  4.98341625e-01,   4.98341625e-01,   8.29187396e-04,
      8.29187396e-04,   8.29187396e-04,   8.29187396e-04],
   [  1.66666667e-01,   1.66666667e-01,   1.66666667e-01,
      1.66666667e-01,   1.66666667e-01,   1.66666667e-01],
   [  1.65016502e-03,   1.65016502e-03,   1.65016502e-03,
      1.65016502e-03,   9.91749175e-01,   1.65016502e-03]])

# Compute probability vector by repeated multiplication
n_iter = 200 # Number of iterations
pi = np.random.random(size=6) # Random starting vector
pi /= sum(pi) # Normalise
evolution = [np.dot(pi, G**i) for i in range(1, n_iter + 1)] # Stores each step
算法应收敛到一个结果,且结果之和应为1。但是我得到了
evolution[-1].sum()=0.043971902333195777
。此外,如果我在每次迭代中绘制结果,很明显结果最终会收敛到零:

我哪里做错了?我相信转移矩阵是正确的,所以我认为问题在于最后的计算。
任何帮助都将不胜感激

对于你的
G
我得到(通过使用R对其转置进行特征值计算),你要寻找的
pi
[0.21591192 0.24269966 0.13528080 0.16206855 0.18938939 0.05464968]
。你为什么不明白我不知道。您正在进行定点计算,零向量是一个定点。不知道为什么会收敛到那个固定点。为了补充我之前的评论,
1
G
转置的特征值,您希望选择相应的特征向量,使其和为1。这可以通过高斯消去法找到,这可以用
numpy
完成。对于你的
G
,我得到(通过使用R对其转置进行特征值计算),你要寻找的
pi
[0.21591192 0.24269966 0.13528080 0.16206855 0.18938939 0.05464968]
。你为什么不明白我不知道。您正在进行定点计算,零向量是一个定点。不知道为什么会收敛到那个固定点。为了补充我之前的评论,
1
G
转置的特征值,您希望选择相应的特征向量,使其和为1。这可以通过高斯消去法找到,这可以通过
numpy
实现。