马尔科夫链(Markov Chain, MC)算法详解及Python实现

目录

前言

一、目标案例

1.需求

2.依赖

3.计算

4.Python模拟

二、马尔科夫链

二、马尔科夫性质

1.不可约性(irreducibility)

2.常返性(recurrence)

3.周期性(periodicity)

 4.遍历性(ergodicity)

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

参阅:



前言

博主参与八次数学建模大赛,其实数学建模和大数据分析有很多相似之处,可以说差不多是共通的。经历了这么多次比赛个人总结一些建模必备的数据分析方法是必须要完全掌握。在人类发展的历史上,马尔可夫链是第一个从理论上被提出并加以研究的随机过程模型。在我以前的机器学习模型学习研究中,马尔可夫链算法可算是用途最广泛的算法之一了。现代生活可以说的上是基本都蕴含着马尔科夫链基础算法原理所在,要理解马尔科夫链算法原理并不难,但是衍生思想和优化思想却很难让人考虑到。特别是基于现在大数据时代,海量数据统计下概率匹配是相当恐怖的,使用马尔科夫衍生算法能够渗透到很多方面。本篇文章将详细讲述马尔科夫链基本算法原理和使用案例。


理论比较难以一下明白,但是通过例子就好理解了。这里我们采用倒叙方法先从一个简单的案例入手,再到解释原理:

一、目标案例

我们拿一个场景的地铁拥堵系数来进行分析:

1.需求

我周一到周五都需要坐地铁上班,但是经常会发生地铁拥堵的情况,我把地铁拥堵系数设置为三个可选参数(1,2,3)。1代表地铁很拥堵,人挤人,体验感很差都不想坐地铁了。2代表地铁还行,虽然挤但是还算的过去。3代表通畅,地铁里面都没什么人来坐,随随便便就能找到个座位。那么我前一个小时坐地铁的情况都记录了下来,如何判断我将来一个小时的地铁拥堵情况呢?

面对这种情况我们并没有像传统的机器学习算法可用的特征,能够在强关联特征时序或者前后顺序下预测出后一个标签,那么马尔科夫模型就很适用。

2.依赖

要想开展马尔科夫算法需要两个依赖条件:

第一我们要清楚前一个小时中,我们了解到站一个站台为5分钟,这里我们需要根据上一个站的情况,统计并计算后一个站拥堵系数情况的状态发生概率,由于我们这里有三种拥堵系数状态,故为一个一维矩阵:[0.3,0.4,0.3].该矩阵我们称之为(状态分布矩阵S

第二个站台之间是具有强关联性质的,也就是说路过了上一个站台那么下一个站台发生拥堵的可能性是具有一定的规律性的,有一定的概率可以统计得出。

比如我们这里设置:

当前一个站台拥堵系数为1时,后一个站台拥堵系数为1的概率为0.6,为2的概率为0.2,为3的概率为0.2.

当前一个站台拥堵系数为2时,后一个站台拥堵系数为1的概率为0.5,为2的概率为0.2,为3的概率为0.3

当前一个站台拥堵系数为3时,后一个站台拥堵系数为1的概率为0.2,为2的概率为0.4,为3的概率为0.4

这里我们可以构建一个矩阵:

前一个站台拥堵系数概率\后一个站台拥堵系数概率 1 2 3
1 0.6 0.2 0.2
2 0.5 0.2 0.3
3 0.2 0.4 0.4

而我们构建的这个矩阵就是转移概率矩阵P它是时间齐次性的,也就是说转移概率矩阵P它是保持不变的,前一站台到后一站台的转移概率矩阵跟后一站台到再后一站台的转移概率矩阵是一样的。

3.计算

有了这个转移概率矩阵P,再加上已知的第一天的状态分布矩阵,就可以计算出N天后的状态分布了。

站台状态分布矩阵 计算公式
S2 S1*P
S3 S2*P
S4 S3*P

Sn

Sn-1*P

以上来看马尔科夫链算法预测出来的过程只取决与现在。当然和历史数据存在间接关系。

4.Python模拟

import numpy as np

matrix = np.matrix([[0.6, 0.2, 0.2],
                    [0.5, 0.2, 0.3],
                    [0.2, 0.4, 0.4]])
vector1 = np.matrix([[0.3, 0.4, 0.3]])

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

 我们会发现最后几站的概率会逐渐的收敛为一个固定的概率矩阵。

第44轮
[[0.46153846 0.25641026 0.28205128]]
第45轮
[[0.46153846 0.25641026 0.28205128]]
第46轮
[[0.46153846 0.25641026 0.28205128]]
第47轮
[[0.46153846 0.25641026 0.28205128]]
第48轮
[[0.46153846 0.25641026 0.28205128]]
第49轮
[[0.46153846 0.25641026 0.28205128]]
第50轮
[[0.46153846 0.25641026 0.28205128]]

此时我们修改初始第一个站台的拥堵系数的概率:

import numpy as np

matrix = np.matrix([[0.6, 0.2, 0.2],
                    [0.5, 0.2, 0.3],
                    [0.2, 0.4, 0.4]])
vector1 = np.matrix([[0.6, 0.2, 0.2]])

for i in range(50):
    vector1 = vector1 * matrix
    print('第{}轮'.format(i+1))
    print(vector1)
第45轮
[[0.46153846 0.25641026 0.28205128]]
第46轮
[[0.46153846 0.25641026 0.28205128]]
第47轮
[[0.46153846 0.25641026 0.28205128]]
第48轮
[[0.46153846 0.25641026 0.28205128]]
第49轮
[[0.46153846 0.25641026 0.28205128]]
第50轮
[[0.46153846 0.25641026 0.28205128]]

由此我们得到一个非常重要的性质:马尔可夫链模型的状态转移矩阵收敛到的稳定概率分布与初始状态概率分布无关

马尔科夫链(Markov Chain, MC)算法详解及Python实现_第1张图片

看完上述案例后我们再由理论过一遍理解的更加透彻 

二、马尔科夫链

        马尔可夫链(Markov Chain, MC)是概率论和数理统计中具有马尔科夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)。适用于连续指数集的马尔可夫链被称为马尔科夫过程(Markov process),但有时也被视为马尔可夫链的子集,即连续时间马尔科夫链(Continuous-Time MC, CTMC),与离散时间马尔可夫链(Discrete-Time MC, DTMC)相对应,因此马尔可夫链是一个较为宽泛的概念。

        马尔可夫链可通过转移矩阵和转移图定义,除马尔可夫性外,马尔可夫链可能具有不可约性、常返性、周期性和遍历性。一个不可约和正常返的马尔可夫链是严格平稳的马尔可夫链,拥有唯一的平稳分布。遍历马尔可夫链(ergodic MC)的极限分布收敛于其平稳分布。

        马尔可夫链可被应用于蒙特卡洛方法中,形成马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC) ,也被用于动力系统、化学反应、排队论、市场行为和信息检索的数学建模。此外作为结构最简单的马尔科夫模型(Markov model),一些机器学习算法,例如隐马尔科夫模型(Hidden Markov Model, HMM)、马尔科夫随机场(Markov Random Field, MRF)和马尔科夫决策过程(Markov decision process, MDP)以马尔可夫链为理论基础。

二、马尔科夫性质

马尔可夫性质是概率论中的一个概念,因为俄国数学家安德雷·马尔可夫得名。当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。具有马尔可夫性质的过程通常称之为马尔科夫过程

马尔可夫链中随机变量的状态随时间步的变化被称为演变(evolution)或转移(transition)。这里介绍描述马尔可夫链结构的两种途径,即转移矩阵和转移图,并定义了马尔可夫链在转移过程中表现出的性质。

马尔可夫链中随机变量间的条件概率可定义为如下形式的(单步)转移概率和n-步转移概率

式中下标i_{n}表示第n 步的转移。由马尔可夫性质可知,在给定初始概率\alpha _{i_{0}}=p(X_{0})后,转移概率的连续乘法可以表示马尔科夫链的有限维分布(finite-dimensional distribution)

马尔科夫链(Markov Chain, MC)算法详解及Python实现_第2张图片

 式中的为样本轨道(sample path),即马尔可夫链每步的取值。对n-步转移概率,由Chapman–Kolmogorov等式可知,其值为所有样本轨道的总和:

 上式表明,马尔可夫链直接演变n步等价于其先演变n-k步,再演变k步(k处于该马尔可夫链的状态空间内)。n-步转移概率与初始概率的乘积被称为该状态的绝对概率。

若一个马尔可夫链的状态空间是有限的,则可在单步演变中将所有状态的转移概率按矩阵排列,得到转移矩阵

马尔科夫链(Markov Chain, MC)算法详解及Python实现_第3张图片

 马尔可夫链的转移矩阵是右随机矩阵(right stochastic matrix),矩阵的第i_{n}行表示X_{n}=s_{i_{n}}时,

 x_{n+1}取所有可能状态的概率(离散分布),因此马尔可夫链完全决定转移矩阵,转移矩阵也完全决定马尔可夫链  。由概率分布的性质可得,转移矩阵是一个正定矩阵,且每行元素之和等于1:

 按相同的方式也可定义n-步转移矩阵:,由n-步转移概率的性质(Chapman–Kolmogorov等式)可知,n-步转移矩阵是其之前所有转移矩阵的连续矩阵乘法:

这里对马尔可夫链的4个性质:不可约性、常返性、周期性和遍历性进行定义。与马尔可夫性质不同,这些性质不是马尔可夫链必然拥有的性质,而是其在转移过程中对其状态表现出的性质。上述性质都是排他的,即不具有可约性的马尔可夫链必然是不可约的,以此类推。

1.不可约性(irreducibility)

如果一个马尔可夫链的状态空间仅有一个连通类,即状态空间的全体成员,则该马尔可夫链是不可约的,否则马尔可夫链具有可约性(reducibility) 。马尔可夫链的不可约性意味着在其演变过程中,随机变量可以在任意状态间转移。

2.常返性(recurrence)

若马尔可夫链在到达一个状态后,在演变中能反复回到该状态,则该状态是常返状态,或该马尔可夫链具有(局部)常返性,反之则具有瞬变性(transience)的。正式地,对状态空间中的某个状态,马尔可夫链对一给定状态的返回时间(return time)是其所有可能返回时间的下确界(infimum):

 若,则该状态不存在瞬变性或常返性;若,则该状态的瞬变性和常返性的判断准则如下:

 在时间步趋于无穷时,常返状态的返回概率(return probability)的和,即总访问次数的期望也趋于无穷:

 此外,若状态具有常返性,则可计算其平均返回时间(mean recurrence time):

 若平均返回时间,该状态是“正常返的(positive recurrent)”,否则为“零常返的(null recurrent)”。若一个状态是零常返的,那意味着马尔可夫链两次访问该状态的时间间隔的期望是正无穷。

3.周期性(periodicity)

个正常返的马尔可夫链可能具有周期性,即在其演变中,马尔可夫链能够按大于1的周期常返其状态。正式地,给定具有正常返的状态,其返回周期按如下方式计算:

 4.遍历性(ergodicity)

若马尔可夫链的一个状态是正常返的和非周期的,则该状态具有遍历性 。若一个马尔可夫链是不可还原的,且有某个状态是遍历的,则该马尔可夫链的所有状态都是遍历的,被称为遍历链。由上述定义,遍历性有如下推论:

  1. 推论:若状态A是吸收态,且A是状态B的可达状态,则A是遍历的,B不是遍历的。

  2. 推论:若多个状态的马尔可夫链包含吸收态,则该马尔可夫链不是遍历链。

  3. 推论:若多个状态的马尔可夫链形成有向无环图,或单个闭环,则该马尔可夫链不是遍历链。

遍历链是非周期的平稳马尔可夫链,有长时间尺度下的稳态行为,因此是被广泛研究和应用的马尔可夫链。


点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

参阅:

马尔科夫链

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

你可能感兴趣的:(一文速学-数学建模常用模型,算法,机器学习,NLP,数学建模)