本文所写答案是作者自己的见解,大家酌情参考,不足之处敬请指出。
21.1 假设方阵A是随机矩阵,即其每个元素非负,每列之和为1,证明 任然是随机矩阵,其中k是自然数。
分析:我们只需要证明任意两个随机矩阵的乘积依然是随机矩阵即可。假设现在有随机矩阵A和随机矩阵B我们需要证明矩阵C=A*B也是随机矩阵即可。
证明:
假设随机矩阵A = [ , , ]
随机矩阵B = ,其中 。
所以矩阵C的第i列为:
A* = 。
显然C矩阵的每个元素都是大于0的,并且C矩阵的第i列的和就等于:
(1-1)
因为:A是随机矩阵,所以 ,因此式子(1-1)等于:
所以矩阵C的第i列的和等于1.同理可得C的其他列的和为1.所以C是一个随机矩阵。
21.2 例21.1中,以不同的初始分布向量R0进行迭代,认得到同样的极限向量R,即PageRank。请验证。
import numpy as np
def pageRank(R0,max_step=100):
M = np.array([[0,1/2,1,0],[1/3,0,0,1/2],[1/3,0,0,1/2],[1/3,1/2,0,0]])
Rt = R0
for i in range(max_step):
Rt = np.dot(M,Rt)
return Rt
if __name__=="__main__":
result = []
test = [[1/4,1/4,1/4,1/4],[1/2,0,1/2,0],[1/3,1/3,1/3,0],[1/3,1/2,0,1/6],[1/3,1/4,1/6,1/4]]
for t in test:
result.append(pageRank(t))
print(np.array(result))
结果:
附带赠送例21.4的不同R0的验证结果:
import numpy as np
def pageRank(R0,max_step=100,d = 0.85):
M = np.array([[0,0,1],[1/2,0,0],[1/2,1,0]])
A = d*M+(1-d)/len(M)
Rt = np.array(R0)/max(R0)
for i in range(max_step):
temp = np.dot(A,Rt)
Rt = temp/max(temp)
return Rt/sum(Rt)
if __name__=="__main__":
result = []
test = [[1,1,1],[1/2,0,0],[1/3,1/3,0],[1,2,3],[1/6,1/2,1/3]]
for t in test:
result.append(pageRank(t))
print(np.array(result))
结果:
21.3证明pagerank一般定义中的马尔可夫链具有平稳分布。
首先,根据马尔可夫链的相关知识,我们知道不可约非周期的有限状态马尔可夫链有唯一的平稳分布(原书P419)
证明:因为一般定义中转移矩阵 ,其中M表示原本的状态转移矩阵,1表示一个所有元素都是1的方阵。
1.显然这个时候的转移矩阵T的每个元素都是大于0的,因此所有的状态都是相互连通的,也就是说所有的状态都同属于一类,因此这个马尔可夫链是不可约的。
2.这个时候由于所有状态相互连通,因此所有点的周期都是1,也就是说马尔可夫链是非周期的。
3.显然矩阵的大小是有限的,因此马尔可夫链也是有限的。
所以,一般定义中的马尔可夫链具有平稳分布
21.4证明随机矩阵的最大特征值为1。
这个我也暂时没搞懂,下面那句话摘抄于维基百科。
Perron–Frobenius 定理保证了每个随机矩阵都具有最大绝对值始终为1的特征值。