Python 马尔科夫链

一,概述

Python 马尔科夫链_第1张图片

二,马尔科夫链模型状态转移矩阵的性质

        以上面的这个状态转移矩阵为例。假设我们当前股市的概率分布为:[0.3,0.4,0.3],即30%概率的牛市,40%概率的熊盘与30%的横盘。然后这个状态作为序列概率分布的初始状态t0t0,将其带入这个状态转移矩阵计算t1,t2,t3...t1,t2,t3...的状态。

代码:

import numpy as np
matrix = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
vector1 = np.matrix([[0.3,0.4,0.3]], dtype=float)

for i in range(100):
    vector1 = vector1*matrix
    print("Current round:" , i+1)
    print(vector1)

 运行结果

Python 马尔科夫链_第2张图片

 

Python 马尔科夫链_第3张图片

 可以发现,从第60轮开始,我们的状态概率分布就不变了,一直保持在[0.625   0.3125  0.0625],即62.5%的牛市,31.25%的熊市与6.25%的横盘。

然后我们换一个初始概率分布进行检验,用[0.7,0.1,0.2]作为初始概率分布

代码如下:

import numpy as np
matrix =  np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
vector1 = np.matrix([[0.7,0.1,0.2]], dtype = float)
 
for i in range(100):
    vector1 = vector1*matrix
    print ("Current round:", i+1)
    print (vector1)

运行结果:

Python 马尔科夫链_第4张图片

可以看到在第57轮开始,我们的状态概率分布又不变了。可以看出,尽管这次我们采用了不同初始概率分布,最终状态的概率分布趋于同一个稳定的概率分布[0.625   0.3125  0.0625], 也就是说我们的马尔科夫链模型的状态转移矩阵收敛到的稳定概率分布与我们的初始状态概率分布无关。 

三,总结

        这是一个非常好的性质,也就是说,如果我们得到了这个稳定概率分布对应的马尔科夫链模型的状态转移矩阵,则我们可以用任意的概率分布样本开始,带入马尔科夫链模型的状态转移矩阵,这样经过一些序列的转换,最终就可以得到符合对应稳定概率分布的样本。这个性质不光对我们上面的状态转移矩阵有效,对于绝大多数的其他的马尔科夫链模型的状态转移矩阵也有效。同时不光是离散状态,连续状态时也成立。

        同时,对于一个确定的状态转移矩阵P,它的n次幂P^n在当n大于一定的值的时候也可以发现是确定的。

代码:

import numpy as np

matrix = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
for i in range(10):
    matrix = matrix*matrix
    print("Current round:" , i+1)
    print(matrix)

运行结果:

Python 马尔科夫链_第5张图片

 同样在第六次后,P^n的值稳定不再变化

你可能感兴趣的:(python,开发语言)