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

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

前言


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


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


一、目标案例


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


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]]

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


bf9c5a02a40c4a8f3b0ab84eeef67aed.jpg



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


二、马尔科夫链


  马尔可夫链(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-步转移概率


c95ebc3aa74a448698de2c28a3aed8df.png


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


4d876fc9263d48c59d650a01cd305b53.png


式中的c89257ce860844d9bbd11411216df44f.png

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


60d7b964833746539f58f3cd38093e6e.png


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

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


c14716b1a8314bdfa17210919b57ee79.png



马尔可夫链的转移矩阵是右随机矩阵(right stochastic matrix),矩阵的第gif.gif行表示时,gif.gif


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

466ba6de9cd04c10aa4362704a28a65e.png

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

b941f19286194d57a4338a848bce9b32.png

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


1.不可约性(irreducibility)


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


2.常返性(recurrence)


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


b9400fc8daf843d2a32c4784acd27254.png

17769a9b30024f6793477fc2effefd06.png则该状态不存在瞬变性或常返性;493aca8ac547491f850fa3c7434b2ac4.png则该状态的瞬变性和常返性的判断准则如下:

9fa14d79381d4171baa0c2e5e9e41143.png


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


e16211b62897460e973674ad58f7fa01.png


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

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


3.周期性(periodicity)

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


80ebee7c018d437a931ffd6896cf44d1.png

4.遍历性(ergodicity)


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


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


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


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


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

目录
相关文章
|
1天前
|
算法 数据可视化 Python
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
12 6
|
2天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
29 12
|
7天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
12 0
|
7天前
|
数据可视化 算法 数据挖掘
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
|
8天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
13 0
|
8天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
18 0
|
9天前
|
缓存 算法 Python
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
|
12天前
|
算法 数据可视化 数据挖掘
使用Python实现DBSCAN聚类算法
使用Python实现DBSCAN聚类算法
151 2
|
13天前
|
存储 算法 安全
Python加密算法有哪些?有什么作用?
这些加密算法的作用在于保护敏感数据的隐私和完整性。它们可以用于数据传输、存储、身份验证和数字签名等领域。通过加密,可以确保数据在传输和存储过程中不被未经授权的人访问或篡改。同时,数字签名可以用于验证数据的来源和完整性,防止数据被篡改或冒充。不同的加密算法在不同的应用场景中起到不同的作用,选择合适的算法取决于安全需求和性能要求。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
8 0
|
14天前
|
算法 数据可视化 数据挖掘
使用Python实现K均值聚类算法
使用Python实现K均值聚类算法
18 1