马尔可夫链
形象透彻理解马尔可夫链让我们再次强调马尔可夫链在处理随机动力学时对问题建模的强大作用,被用于各种领域,例如排队理论,优化电信网络的性能;统计信息,众所周知的"马尔可夫链蒙特卡罗";生物学,生物种群进化的建模;计算机科学,隐马尔可夫模型是信息论和语音识别等领域的重要工具。从理论的角度来看,值得注意的是,对该算法的一种常见解释是依赖于马尔可夫链的简单且基本的数学概念。我们将在本文中看到马尔可夫链是用于
形象透彻理解马尔可夫链
让我们再次强调马尔可夫链在处理随机动力学时对问题建模的强大作用,被用于各种领域,例如排队理论,优化电信网络的性能;统计信息,众所周知的"马尔可夫链蒙特卡罗";生物学,生物种群进化的建模;计算机科学,隐马尔可夫模型是信息论和语音识别等领域的重要工具。
从理论的角度来看,值得注意的是,对该算法的一种常见解释是依赖于马尔可夫链的简单且基本的数学概念。我们将在本文中看到马尔可夫链是用于随机建模的强大工具,它对任何数据科学家都是有用的。
马尔可夫链因俄国数学家Andrey Andreyevich Markov得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。马尔可夫链作为实际过程的统计模型具有许多应用。
看过大佬的一些通俗解释的例子: 假如每天的天气是一个状态: 比如昨天是阴天, 今天是晴天,则明天的天气是什么只和今天的天气(晴天)有关,和今天之前的任何天气都没有关系.(就是当前的状态只和前一个状态有关系,和别的任何状态都无关)
所以根据定义可以知道数学定义的公式如下:

2.举个例子解释马尔可夫链
这个例子是用来描述股市如下图:
总共是三个状态: Bull market: 表示牛市 Bear market 表示熊市 Stagnant表示横盘
接下来根据图我们可以定义状态转移矩阵
从一个状态转移为另一个状态的表示为P(i,j) 表示从状态 i 转变为状态 j 的概率 其中Bull market 表示为状态 0 Bear market 表示为状态1 Stagnant表示为状态2
接下来是一个有意思的事情:
我们假设现在的市场是牛市: 状态矩阵为[1,0,0]
import numpy as np
def markov():
init_array = np.array([1,0,0])
transfer_matrix = np.array([[0.9, 0.075, 0.025],
[0.15, 0.8, 0.05],
[0.25, 0.25, 0.5]])
restmp = init_array
for i in range(25):
res = np.dot(restmp, transfer_matrix)
print(res)
restmp = res
markov()
则输出的结果为:
[0.9 0.075 0.025]
[0.8275 0.13375 0.03875]
[0.7745 0.17875 0.04675]
[0.73555 0.212775 0.051675]
[0.70683 0.238305 0.054865]
[0.685609 0.2573725 0.0570185]
[0.6699086 0.2715733 0.0585181]
[0.65828326 0.28213131 0.05958543]
[0.64967099 0.28997265 0.06035636]
[0.64328888 0.29579253 0.06091859]
[0.63855852 0.30011034 0.06133114]
[0.635052 0.30331295 0.06163505]
[0.63245251 0.30568802 0.06185947]
[0.63052533 0.30744922 0.06202545]
[0.62909654 0.30875514 0.06214832]
[0.62803724 0.30972343 0.06223933]
[0.62725186 0.31044137 0.06230677]
[0.62666957 0.31097368 0.06235675]
[0.62623785 0.31136835 0.0623938 ]
[0.62591777 0.31166097 0.06242126]
[0.62568045 0.31187792 0.06244162]
[0.6255045 0.31203878 0.06245672]
[0.62537405 0.31215804 0.06246791]
[0.62527733 0.31224646 0.06247621]
[0.62520562 0.31231202 0.06248236]
在第20次之后值就趋于一个固定的值 [0.62421263 0.31321968 0.0625677 ]
然后假设现在是熊市: 即状态为[0,1,0]
import numpy as np
def markov():
init_array = np.array([0,1,0])
transfer_matrix = np.array([[0.9, 0.075, 0.025],
[0.15, 0.8, 0.05],
[0.25, 0.25, 0.5]])
restmp = init_array
for i in range(25):
res = np.dot(restmp, transfer_matrix)
print(res)
restmp = res
markov()
[0.15 0.8 0.05]
[0.2675 0.66375 0.06875]
[0.3575 0.56825 0.07425]
[0.42555 0.499975 0.074475]
[0.47661 0.450515 0.072875]
[0.514745 0.4143765 0.0708785]
[0.5431466 0.3878267 0.0690267]
[0.56426262 0.36825403 0.06748335]
[0.5799453 0.35379376 0.06626094]
[0.59158507 0.34309614 0.06531879]
[0.60022068 0.33517549 0.06460383]
[0.60662589 0.3293079 0.06406621]
[0.61137604 0.32495981 0.06366415]
[0.61489845 0.32173709 0.06336446]
[0.61751028 0.31934817 0.06314155]
[0.61944687 0.3175772 0.06297594]
[0.62088274 0.31626426 0.062853 ]
[0.62194736 0.31529086 0.06276178]
[0.6227367 0.31456919 0.06269412]
[0.62332193 0.31403413 0.06264394]
[0.62375584 0.31363743 0.06260672]
[0.62407756 0.31334332 0.06257913]
[0.62431608 0.31312525 0.06255867]
[0.62449293 0.31296357 0.0625435 ]
[0.62462404 0.3128437 0.06253225]
在20次之后结果也会趋近一个值 [0.62407756 0.31334332 0.06257913]
通过使用转换矩阵,可以计算市场从持平到牛市所需的平均周数等。使用转换概率,稳态概率表明,在给定的周数中,62.5%的周将处于牛市中,31.25%的周将处于熊市中,6.25%的周将停滞,因为:
由此可知马尔科夫链又 细致平稳的性质(就是能收敛)
一个小例子
假设我们有一个小网站,其中有7个页面标记为1到7,并且页面之间有链接,如下图所示。
为清楚起见,在先前的表示中没有显示每个转换的概率。但是,由于"导航"应该是纯随机的,可以使用以下简单规则很容易地恢复值:对于一个具有K的节点(一个具有K链接到其他页面的页面),每个节点的概率等于1/K。 性质转移矩阵:
其中0.0值已被’.'取代 为了便于阅读。在进一步计算之前,我们可以注意到这个马尔可夫链是不可约的以及非周期性的,因此,在长期运行之后,系统收敛到静止分布。正如我们已经看到的,我们可以通过求解下面的左特征向量问题来计算这个静态分布
这样做我们获得了每页的PageRank值(静态分布的值)
在我们的玩具示例中计算的PageRank值包含7页。
这个小网站的PageRank排名是1> 7> 4> 2> 5 = 6> 3。
import numpy as np
def markov():
init_array = np.array([1,0,0,0,0,0,0])
transfer_matrix = np.array([[0,0.25,0,0,0.25,0.25,0.25],
[0, 0, 0.5,0.5,0,0,0],
[0,0.5,0,0.5,0,0,0],
[0.5,0,0,0,0,0,0.5],
[1.0,0,0,0,0,0,0],
[0,0,0,0,0,0,1.0],
[0.5,0,0,0.5,0,0,0]])
restmp = init_array
for i in range(40):
res = np.dot(restmp, transfer_matrix)
print(res)
restmp = res
markov()
结果为
[0. 0.25 0. 0. 0.25 0.25 0.25]
[0.375 0. 0.125 0.25 0. 0. 0.25 ]
[0.25 0.15625 0. 0.1875 0.09375 0.09375 0.21875]
[0.296875 0.0625 0.078125 0.1875 0.0625 0.0625 0.25 ]
[0.28125 0.11328125 0.03125 0.1953125 0.07421875 0.07421875
0.23046875]
[0.28710938 0.0859375 0.05664062 0.1875 0.0703125 0.0703125
0.2421875 ]
[0.28515625 0.10009766 0.04296875 0.19238281 0.07177734 0.07177734
0.23583984]
[0.28588867 0.09277344 0.05004883 0.18945312 0.07128906 0.07128906
0.23925781]
[0.28564453 0.09649658 0.04638672 0.19104004 0.07147217 0.07147217
0.23748779]
[0.28573608 0.09460449 0.04824829 0.19018555 0.07141113 0.07141113
0.23840332]
[0.28570557 0.09555817 0.04730225 0.19062805 0.07143402 0.07143402
0.23793793]
[0.28571701 0.09507751 0.04777908 0.19039917 0.07142639 0.07142639
0.23817444]
[0.2857132 0.09531879 0.04753876 0.19051552 0.07142925 0.07142925
0.23805523]
[0.28571463 0.09519768 0.0476594 0.19045639 0.0714283 0.0714283
0.23811531]
[0.28571415 0.09525836 0.04759884 0.19048619 0.07142866 0.07142866
0.23808515]
[0.28571433 0.09522796 0.04762918 0.19047117 0.07142854 0.07142854
0.23810029]
[0.28571427 0.09524317 0.04761398 0.19047871 0.07142858 0.07142858
0.23809271]
[0.28571429 0.09523556 0.04762159 0.19047493 0.07142857 0.07142857
0.23809651]
[0.28571428 0.09523937 0.04761778 0.19047682 0.07142857 0.07142857
0.2380946 ]
[0.28571429 0.09523746 0.04761968 0.19047587 0.07142857 0.07142857
0.23809556]
[0.28571429 0.09523841 0.04761873 0.19047635 0.07142857 0.07142857
0.23809508]
[0.28571429 0.09523794 0.04761921 0.19047611 0.07142857 0.07142857
0.23809532]
[0.28571429 0.09523817 0.04761897 0.19047623 0.07142857 0.07142857
0.2380952 ]
[0.28571429 0.09523806 0.04761909 0.19047617 0.07142857 0.07142857
0.23809526]
[0.28571429 0.09523812 0.04761903 0.1904762 0.07142857 0.07142857
0.23809523]
[0.28571429 0.09523809 0.04761906 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761904 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.09523809 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.09523809 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
[0.28571429 0.0952381 0.04761905 0.19047619 0.07142857 0.07142857
0.23809524]
总结
最后,让我们再次强调马尔可夫链在处理随机动力学时对问题建模的强大作用。由于它们的良好特性,它们被用于各种领域,例如排队理论,优化电信网络的性能,其中消息必须经常竞争有限的资源并且在所有资源已经被分配时排队);统计信息,众所周知的"马尔可夫链蒙特卡罗"随机变量生成技术基于马尔可夫链;生物学,生物种群进化的建模;计算机科学,隐马尔可夫模型是信息论和语音识别等领域的重要工具。
更多推荐



所有评论(0)