首页 > 其他分享 >写给小白看的马尔科夫链(Markov Chain)最佳入门教程

写给小白看的马尔科夫链(Markov Chain)最佳入门教程

时间:2022-11-29 18:33:10浏览次数:40  
标签:状态 概率 Chain 0.41341654 入门教程 矩阵 0.39781591 Markov 0.18876755


1 什么叫马尔科夫链?

讲马尔可夫链不得不提到随机过程,它本身就是随机过程课本中的重要内容,犹如牛顿定律在力学中的地位。那何为随机过程呢?

我们知道,人类认知世界是从运动开始的,从宏观的天体运动到微观的分子运动,它都是一个“东西”随时间变化的过程,牛顿的出现,很好地体系化地解释了我们所熟悉的大部分运动,并赋能人类能够对一些运动进行准确计算并预测运动。但是世界上仍存在大量的非确定因素的“运动”过程,之所以给给运动加引号是因为这是个概性描述,比如经典掷色子,每一次掷色子都视为一次事物的变化,归为“运动”,即随时间事物产生的变化。我们都知道无穷大样本下1-6每个数字出现的概率都是1/6,但想知道每一次掷色子的结果,我们永远无法准确计算预知,我们能想到的最好办法,就是用:概率(论),来描述这个结果。犹如牛顿定律在力学中所扮演的进行力学分析的角色,随机过程就是在概率论中,对事物变化研究运动的方法,对不确定性下的运动进行准确的数学描述。如同力学中对速度,加速度等概念的数学定义,随机过程中也定义了两个最重要的概念:概率空间、随机变量,在此不深入聊。

牛顿力学中,是确定性过程研究一个量随时间确定的变化,而随机过程描述的是一个量随时间可能的变化。在这个过程里,每一个时刻变化的方向都是不确定的,随机过程就是由这一系列不确定的随机变量组成的。每一个时刻系统的状态都由一个随机变量表述,整个过程则构成一个随机过程的实现。

知道了什么是随机过程后,我们可以试想一个最简单的随机过程,这个过程由N步组成,每一步都有两个选择(0,1),那么可能的路径就有2的N次方个,这个随机过程就要由2^N这个指数级别个数的概率来描述,我们一看指数级别!?维度这么大岂不直接爆炸???此刻,马尔科夫过程(Markov Processes)被推了出来:随机过程的每一步的结果与且仅与上一步有关,与其它无关。

makov过程用数学语言表述就是马尔可夫链(Markov chain)。马尔科夫链条中,随机过程的变化只取决于当下的变化而非历史,这种性质使得巨大的计算瞬时简化。

2 马尔可夫链 (Markov Chain)的具体例子

我们用一个具体现实中的例子来描述Markov Chain这样一个过程。假设进进他每天有三个状态:玩耍,学习,睡觉(这就是状态分布)。已知他今天在玩儿,那他明天学习、玩耍、睡觉的概率是多少?后天乃至N天后学习、玩耍、睡觉的概率是多少?

写给小白看的马尔科夫链(Markov Chain)最佳入门教程_马尔科夫链

当然,想要知道N天后学习、玩耍、睡觉的概率是多少,我们需要有两个条件:

一个预知条件:知道进进第一天的状态(状态分布矩阵S),

一个假设:即我状态的转移都是有规律的,也就是今天学习,明天就玩儿或者睡觉或者还是继续学习的概率是确定的,简而言之,我们有预知确定的状态转移概率矩阵P

写给小白看的马尔科夫链(Markov Chain)最佳入门教程_马尔科夫链_02


上面这个矩阵就是确定的转移概率矩阵P,它是时间齐次性的,换句话说,也就是转移概率矩阵P它是保持不变的,第一天到第二天的转移概率矩阵跟第二天到第三天的转移概率矩阵是一样的。

有了这个转移概率矩阵P,再加上已知的第一天的状态分布矩阵(进进第一天在 玩 or 学 or 睡的概率),就可以计算出进进第N天的状态分布了(进进第N天在 玩 or 学 or 睡的概率)。

ok,我们现在已经拥有了测算进进n天后,是在玩还是在学,还是在睡的所有条件了,也就是初始状态分布矩阵S转移概率矩阵P。假设进进第一天的状态分布矩阵 S1 = [0.3, 0.4, 0.3],里面的数字分别代表第一天这天进进在玩的概率,学的概率,和睡的概率。

那么

第二天进进玩学睡的状态分布矩阵 S2 = S1 * P (俩矩阵相乘)。

第三天进进玩学睡的状态分布矩阵 S3 = S2 * P (只和S2有关)。

第四天进进玩学睡的状态分布矩阵 S4 = S3 * P (只和S3有关)。

第n天进进玩学睡的状态分布矩阵 Sn = Sn-1 * P (只和Sn-1有关)。

可以看到:马尔可夫链就是这样一个任性的过程,它将来的状态分布只取决于现在,跟过去无关!这就是马尔科夫过程(Markov Processes)的体现,每天的进进可能的状态集合就构成了马尔可夫链(Markov chain)。

写给小白看的马尔科夫链(Markov Chain)最佳入门教程_自然语言处理_03

3 马尔可夫链的性质

以上面的例子继续深入,上面的例子中,初始状态分布矩阵S1 = [0.3, 0.4, 0.3],即第一天进进在玩的概率是30%,在学的概率是40%,在睡觉的概率是30%,我们以此来计算100天后,也就是第一百天进进在玩or学or睡觉的概率分布。

代码如下:

import numpy as np

matrix = np.matrix([[0.05, 0.75, 0.2],
[0.8, 0.05, 0.15],
[0.25, 0.5, 0.25]])
vector1 = np.matrix([[0.3, 0.4, 0.3]])

for i in range(100):
vector1 = vector1 * matrix
print('第{}轮'.format(i+1))
print(vector1)

运行结果如下:

...
第96轮
[[0.39781591 0.41341654 0.18876755]]
第97轮
[[0.39781591 0.41341654 0.18876755]]
第98轮
[[0.39781591 0.41341654 0.18876755]]
第99轮
[[0.39781591 0.41341654 0.18876755]]
第100轮
[[0.39781591 0.41341654 0.18876755]]

从结果可以发现,已知一天初始状态和转移矩阵往后测算,当测算到某一天开始,往后的状态概率分布就不变了,一直保持[0.39781591, 0.41341654, 0.18876755]。这会不会是巧合?假如初始状态分布矩阵S1 不是 [0.3, 0.4, 0.3],结果还会是[0.39781591, 0.41341654, 0.18876755]吗?我们进行第二次试验,这次试验中,我们将始状态分布矩阵S1 = [0.2, 0.6, 0.2]。

代码如下:

import numpy as np

matrix = np.matrix([[0.05, 0.75, 0.2],
[0.8, 0.05, 0.15],
[0.25, 0.5, 0.25]])
vector1 = np.matrix([[0.2, 0.6, 0.2]])

for i in range(100):
vector1 = vector1 * matrix
print('第{}轮'.format(i+1))
print(vector1)

运行结果:

...
第96轮
[[0.39781591 0.41341654 0.18876755]]
第97轮
[[0.39781591 0.41341654 0.18876755]]
第98轮
[[0.39781591 0.41341654 0.18876755]]
第99轮
[[0.39781591 0.41341654 0.18876755]]
第100轮
[[0.39781591 0.41341654 0.18876755]]

奇妙的事情发生了!在不同的初始概率分布下,最终状态的概率分布趋于同一个稳定的概率分布 [0.39781591, 0.41341654, 0.18876755]。

由此我们得到一个非常重要的性质:马尔可夫链模型的状态转移矩阵收敛到的稳定概率分布与初始状态概率分布无关。也就是说,在上面的那个例子中的初试状态矩阵,可以用任意的概率分布样本开始,只要马尔可夫链模型的状态转移矩阵确知,在一定规模的转换之后,我们就可以得到符合对应稳定概率分布的样本。

现在我们可以用数学语言总结下马尔科夫链的收敛性质了:

如果一个非周期的马尔科夫链有状态转移矩阵P, 并且它的任何两个状态是连通的,那么写给小白看的马尔科夫链(Markov Chain)最佳入门教程_马尔科夫链_04与i无关,我们有:

  1. 写给小白看的马尔科夫链(Markov Chain)最佳入门教程_随机过程_05
  2. 写给小白看的马尔科夫链(Markov Chain)最佳入门教程_概率分布_06
  3. 写给小白看的马尔科夫链(Markov Chain)最佳入门教程_随机过程_05
  4. π是方程πP = P的唯一非负解,其中: 写给小白看的马尔科夫链(Markov Chain)最佳入门教程_概率分布_08

上面的性质中需要解释的有:

  1. 非周期的马尔科夫链:这个主要指马尔科夫链的状态转化不是循环的,如果是循环的则永远不会收敛。幸运的是我们遇到的马尔科夫链一般都是非周期性的。用数学方式表述则是:对于任意某一状态i,d为集合写给小白看的马尔科夫链(Markov Chain)最佳入门教程_概率分布_09
  2. 任何两个状态是连通的:这个指的是从任意一个状态可以通过有限步到达其他的任意一个状态,不会出现条件概率一直为0导致不可达的情况。
  3. 马尔科夫链的状态数可以是有限的,也可以是无限的。因此可以用于连续概率分布和离散概率分布。
  4. 标签:状态,概率,Chain,0.41341654,入门教程,矩阵,0.39781591,Markov,0.18876755
    From: https://blog.51cto.com/u_12853553/5896530

相关文章

  • 3.6 Docker最新入门教程-Docker入门-使用绑定挂载
    3.6使用绑定挂载在上一章中,我们讨论并使用命名卷来持久化数据库中的数据。如果我们只想存储数据,命名卷就很棒,因为我们不必担心数据存储在哪里。使用绑定挂载,我们可以控......
  • 3.5 Docker最新入门教程-Docker入门-持久化数据库
    3.5持久化数据库您是否注意到,每次我们启动容器时,我们的待办事项列表都会被清除干净。为什么是这样?让我们深入了解容器的工作原理。容器的文件系统当容器运行时,它使用镜......
  • 正则表达式30分钟入门教程
     正则表达式30分钟入门教程版本:v2.3(2008-4-13)作者:​​deerchao​​​转载请注明来源目录​​跳过目录​​​​本文目标​​​​如何使用本教程​​​​正则表达......
  • 拓端tecdat|R语言编程指导马尔可夫区制转换模型Markov regime switching
    R语言马尔可夫体制转换模型Markovregimeswitching​ 总览本文简要介绍了一种简单的状态切换模型,该模型构成了隐马尔可夫模型(HMM)的特例。这些模型......
  • 责任链模式(chain of responsibility)
    一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。定义:为了避免请求发送者与多个请求处理者耦合在一起(使用if 选择语句处理请求),将所有请求的处理者通......
  • linear jump Markov models
    只有当雅可比矩阵存在时,才能应用线性化。但是,情况并非总是如此。一些系统包含不连续性(例如,过程模型可能是跳跃线性的[14],其中参数可以突然变化[1],或者传感器可能返回高度量......
  • 3.3 Docker最新入门教程-Docker入门-更新应用程序
    3.3更新应用程序在第2部分中,您容器化了一个待办事项应用程序。在这一部分中,您将更新应用程序和容器镜像。您还将学习如何停止和删除容器。更新源代码在下面的步骤中,......
  • kali linux 设置proxychains 代理
    因为kali自带proxychains工具直接修改/etc/proxychains.conf配置文件直接修改socks4 127.0.0.1 1080值得注意的是在ssr上开启允许局域网上连接参考连接:https://w......
  • Flink的API分层、架构与组件原理、并行度、任务执行计划、chain
    Flink的API分层注:越底层API越灵活,越上层的API越轻便StatefulStreamProcessing•位于最底层,是coreAPI的底层实现•processFunction•利用低阶,构建一些新的组......
  • ABC 214E Chain Contestant(状压计数)
    ABC214EChainContestant(状压计数)ChainContestant​ 现在有十个比赛类型,从现在开始要进行N场比赛。N场比赛的类型通过一个字符串S给出,在S串中选择一个子序列S',满足下......