马尔科夫链模型状态转移矩阵

关于马尔可夫链模型,详细请参考马尔可夫链模型
这里我使用的马尔科夫链模型的状态转移矩阵是:
马尔科夫链模型状态转移矩阵_第1张图片
股市的概率分布为[0.4, 0.3, 0.3], 即40%概率的牛市,30%概率的熊盘与30%的横盘。
代码实现

import numpy as np

P = np.matrix([[0.7, 0.2, 0.1], [0.25, 0.35, 0.4], [0.45, 0.05, 0.5]])
p = np.matrix([[0.4, 0.3, 0.3]])
for i in range(1, 101):
    p = p * P
    print(f"输出第{i}次结果:")
    print(p)

运行结果
输出第1次结果:
[[0.49 0.2 0.31]]
输出第2次结果:
[[0.5325 0.1835 0.284 ]]
输出第3次结果:
[[0.546425 0.184925 0.26865 ]]
输出第4次结果:
[[0.54962125 0.18744125 0.2629375 ]]
输出第5次结果:
[[0.54991706 0.18867556 0.26140737]]
输出第6次结果:
[[0.54974415 0.18909023 0.26116562]]
输出第7次结果:
[[0.54961799 0.18918869 0.26119332]]
输出第8次结果:
[[0.54956676 0.18919931 0.26123393]]
输出第9次结果:
[[0.54955183 0.18919481 0.26125337]]
输出第10次结果:
[[0.549549 0.18919122 0.26125979]]
输出第11次结果:
[[0.54954901 0.18918971 0.26126128]]
输出第12次结果:
[[0.54954931 0.18918927 0.26126143]]
输出第13次结果:
[[0.54954947 0.18918918 0.26126135]]
输出第14次结果:
[[0.54954953 0.18918917 0.26126129]]
输出第15次结果:
[[0.54954955 0.18918918 0.26126127]]
输出第16次结果: ****
[[0.54954955 0.18918919 0.26126126]]
输出第17次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第18次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第19次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第20次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第21次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第22次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第23次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第24次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第25次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第26次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第27次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第28次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第29次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第30次结果:
[[0.54954955 0.18918919 0.26126126]]
。。。
输出第87次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第88次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第89次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第90次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第91次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第92次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第93次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第94次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第95次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第96次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第97次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第98次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第99次结果:
[[0.54954955 0.18918919 0.26126126]]
输出第100次结果:
[[0.54954955 0.18918919 0.26126126]]

从运行结果我们可以看出,1-16次运行结果各不相同,但第16次之后,结果都是[0.54954955 0.18918919 0.26126126],即54.954955%的牛市,18.918919%的熊市与26.126126%的横盘。这是巧合吗?其实并不是,换一个股市的概率分布,最终的结果还是54.954955%的牛市,18.918919%的熊市与26.126126%的横盘。无论还多少次还是相同的结果。那么,将股市的概率分布换成马尔科夫链模型状态转移矩阵,结果又会如何呢?

import numpy as np

P = np.matrix([[0.7, 0.2, 0.1], [0.25, 0.35, 0.4], [0.45, 0.05, 0.5]])
for i in range(1, 31):
    P = P * P
    print(f"输出第{i}次结果:")
    print(P)

运行结果
输出第1次结果:
[[0.585 0.215 0.2 ]
[0.4425 0.1925 0.365 ]
[0.5525 0.1325 0.315 ]]
输出第2次结果:
[[0.5478625 0.1936625 0.258475 ]
[0.54570625 0.18055625 0.2737375 ]
[0.55588125 0.18603125 0.2580875 ]]
输出第3次结果:
[[0.54951756 0.18915182 0.26133061]
[0.54966821 0.18920713 0.26112467]
[0.54953091 0.1892548 0.26121429]]
输出第4次结果: **********
[[0.54954954 0.18918919 0.26126126]
[0.54954955 0.18918918 0.26126127]
[0.54954956 0.18918919 0.26126125]]
输出第5次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第6次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第7次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
。。。。。。
输出第25次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第26次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第27次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第28次结果:
[[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]
[0.54954955 0.18918919 0.26126126]]
输出第29次结果:
[[0.54954954 0.18918919 0.26126126]
[0.54954954 0.18918919 0.26126126]
[0.54954954 0.18918919 0.26126126]]
输出第30次结果:
[[0.54954954 0.18918919 0.26126126]
[0.54954954 0.18918919 0.26126126]
[0.54954954 0.18918919 0.26126126]]

从运行结果我们可以看出,第四次是一个分水岭,而且最后的结果和之前的是一致的。(注意:代码中的循环次数少了许多,因为循环次数过多,最后的结果会越来越小,直至变成全为0的矩阵。)

你可能感兴趣的:(#,统计学习,矩阵,numpy,python)