背景:
马尔可夫过程(Markov process)是一类随机过程。它的原始模型马尔科夫链,由俄国数学家A.A. Markov于1907年提出。马尔可夫过程是研究离散时间动态系统状态空间的重要方法,它的数学基础是随机过程理论。
目录
2、隐马尔科夫模型(Hidden Markov Model,HMM)
1、马尔科夫链(Markov Chain)
马尔可夫过程指一种状态变化(转移)的过程,在这种状态变化过程中,下一状态出现的概率只与当前所处的状态有关,与过去的状态无关。
马尔可夫过程可以分为三类:
- 马尔可夫链:时间、状态都是离散的
- 连续时间马尔可夫链:时间连续、状态离散的马尔可夫链
- 马尔可夫过程:时间、状态都是离散的
这里主要解释下最常遇到的下马尔可夫链。
假设状态集
为随机过程
所有可能取值组成的状态空间,
是离散时间序列,若
在时刻
时所处状态的条件概率满足:
此时称
为马尔可夫链。
此处的“下一时刻的状态只与当前时刻的状态有关”成为无后效性或马尔可夫性。
马尔可夫链具有三个要素:状态空间、无记忆性(无后效性)、转移矩阵。
举个例子来理解马尔可夫链:
假设小明家门口的河边有A、B、C三个地方可以钓鱼,则小明选择其中某个位置钓鱼的概率由如下规则得出:
- 若上一次选择在A位置钓鱼,则本次选择在A的概率是0.4、选择在B的概率是0.3、选择在C的概率是0.3;
- 若上一次选择在B位置钓鱼,则本次选择在A的概率是0.2、选择在B的概率是0.3、选择在C的概率是0.5;
- 若上一次选择在C位置钓鱼,则本次选择在A的概率是0.3、选择在B的概率是0.6、选择在C的概率是0.1;
将以上关系做成表格的形式如下:
上次钓鱼的位置 | 本次选择钓鱼位置的概率 | ||
A | B | C | |
A | 0.4 | 0.3 | 0.3 |
B | 0.2 | 0.3 | 0.5 |
C | 0.3 | 0.6 | 0.1 |
各状态之间的转移关系及转移概率如下图:
在这个例子中,状态空间就是这三个钓鱼位置 ,状态转移矩阵P就是表1中的数据排列形式:
状态转移矩阵每行元素的和一定是1,参考表1,这点就很容易理解了。如果转移概率 P 不随时刻 n 而改变时称此时的马尔可夫链是齐次的。
按照上述状态转移规则:如果小明第一次选择位置A钓鱼,第二次选择 C 钓鱼、第三次选择 C 钓鱼…每次选择不同的位置(状态)组成了一条形如 的状态链,这就是马尔可夫链的直观表现。
假设初始状态概率分布为 ,即小明前一次选择位置B钓鱼,将其与转移矩阵相乘,得到下次选择钓鱼位置的状态概率分布为:
第三次选择钓鱼位置的概率分布
以此类推,初始选择的钓鱼位置概率为 ,第 n 次钓鱼位置的概率为
,这里的
称作n步转移概率矩阵。
使用 python 编程计算 的结果如下:
import numpy as np
state_transition_matrix = np.array([[0.4, 0.3, 0.3],[0.2, 0.3, 0.5], [0.3, 0.6, 0.1]])
def dot_n(n): # 计算P^(n+1)
if n < 0: return 1
result = state_transition_matrix
for i in range(n):
temp = np.dot(result, state_transition_matrix)
result = temp
return result
mul_n1 = dot_n(1) # 计算P^2
mul_n2 = dot_n(20) # 计算P^21
print(mul_n1)
print(mul_n2)
#============结果===========#
[[0.31 0.39 0.3 ]
[0.29 0.45 0.26]
[0.27 0.33 0.4 ]]
[[0.28947368 0.39473684 0.31578947]
[0.28947368 0.39473684 0.31578947]
[0.28947368 0.39473684 0.31578947]]
可以发现,当 n 到一定值时, 开始稳定,即每列的元素值都保持一样且恒定状态,这时,无论初始概率分布
如何变化,最终所处的状态分布概率
始终恒定,这时称该马尔可夫链具有稳态分布
,上述的稳态分布结果表明了小明整体的钓鱼位置偏好。有限马尔可夫链一定存在稳态分布,但不是所有马尔可夫链都具有唯一的稳态分布,比如下面这个马尔可夫链,位置 A 与位置 C 都是其稳态分布。
使用数学的方法来求解稳态分布
更为方便,设第n次达到稳态分布,则有
,且第 n+1 步的稳态分布满足以下条件:
因此只需要求出
的非负解即可得出稳态分布,进一步地
,因此矩阵
特征值为 1 的特征向量就是马尔可夫链的稳态分布。
如果马尔科夫链满足常反性、非周期性、两两联通,则拥有唯一的稳态分布(不再详细阐述)。
如果稳态分布是唯一的话,那么针对该稳态分布所展示的性质,比如人们对不同产品的选择偏好、金融产品的违约比例等,决策者可以根据这些数据调整策略调整最终的稳态分布使得结果往更有利于自身利益的方向移动。
应用:在自然语言处理中,可以利用字符间的转移矩阵做中文分词,也可以利用字符、词语间的转移矩阵来联想用户接下来想搜什么或者说什么。在金融行业可以使用马尔可夫链来分析牛市、熊市、平盘的状态转换,股票价格预测等。
2、隐马尔科夫模型(Hidden Markov Model,HMM)
隐马尔科夫模型(Hidden Markov Model,HMM)是结构最简单的动态贝叶斯网络(dynamic bayesian network),也是一种有向图模型。主要用于时许数据建模,在语音识别、自然语言处理等领域有广泛应用。
什么样的问题解决可以用HMM模型呢?使用HMM模型时我们的问题一般有这两个特征:
1)我们的问题是基于序列的,比如时间序列,或者状态序列。
2)我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。
例如:中文分词任务中可观测的序列是一串文字,隐藏的状态序列是将这串文字分词后的一串字或词语;输入法打字联想任务中,可观测状态是当前输入的字,隐藏的状态序列是下一刻要输入的字。
隐马尔科夫模型相比马尔科夫链多了一个观测链 O,即马尔科夫链中每到一个状态,都会有一个观测输出。隐马尔科夫模型里面的“隐”字就是说有一种数据 I,我们不能直接观测得到,而是根据另一种与之有关的可以直接观测到的数据 O 去推算数据 I 最有可能的结果。
HMM 中有如下概念:
- 所有可能的隐藏状态的集合 Q 以及所有可能的观测状态的集合 V
其中,N 是可能的隐藏状态数,M 是所有的可能的观察状态数。
- 状态序列 I 以及观测序列 O
其中,任意一个隐藏状态 ,任意一个观察状态
- 状态转移概率矩阵
满足齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。
- 观测概率矩阵
满足观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。
- 时刻 t=0 时的初始状态概率向量:
一个HMM模型,可以由隐藏状态 初始概率分布 Π, 状态转移概率矩阵 A 和 观测状态概率矩阵 B 决定。Π、A 决定状态序列 I,B 决定观测序列 O。因此,HMM 模型可以由一个三元组 λ 表示如下:
隐马尔科夫模型可以由图3表示。图中上方方格代表状态链,下方表示观测链,每到一个状态会得到一个观测输出。有时是状态序列I为“隐”(待求数据),其他数据已知;有时是观测序列O为“隐”,其他数据已知;有时是模型参数 为“隐”,其他已知。以上为三种HMM的形式
举一个状态序列I为“隐”(待求数据),其他数据已知的HMM例子:
接着上述小明钓鱼的例子(为了避免产生字母表示的冲突,我们用E、F、G三个字母分别代替上述A、B、C三个位置),设小明每次一定且只能钓出一条鱼,且在E、F、G三个位置钓出青鱼、草鱼、鲫鱼的概率如下表
青鱼(1) | 草鱼(2) | 鲫鱼(3) | |
E | 0.5 | 0.5 | 0 |
F | 0.3 | 0.6 | 0.1 |
G | 0.7 | 0.1 | 0.2 |
钓鱼的位置为状态,钓出的鱼的类型为观测数据。设小明第一次(初始)选择钓鱼位置的状态分布概率为:[0.3,0.3,0.4],小明共去钓了四次鱼,钓出的鱼分别为:1、1、2。但不知道这种条件下最有可能出现的钓鱼位置组合,即状态序列 I 。
可以写出该 HMM 的一些元素如下:
- 状态集合:
- 观测集合:
- 观测序列:
- 状态序列 I:待求(Viterbi 算法求解)
- 初始状态概率分布:
- 状态转移概率矩阵A:
- 观测概率矩阵B(参照表2):
马尔可夫模型最核心的三类问题:
- 解码问题:已知模型
和观测序列O,求对给定观测序列条件概率
最大的状态序列,即给定观测序列,求最有可能的对应状态序列。(Viterbi,维特比算法求解)小明钓鱼问题就是这类问题。
- 概率计算问题:给定模型
和状态序列I的情况下,求在模型
下观测序列 O 出现的概率
。(forward-backward算法求解);
- 学习问题:观测序列 O 已知的情况下,求解模型
的三个参数参数,使得在该模型下观测序列概率最大。(极大似然估计算法求解)
参考:
【数之道 20】5分钟理解<马尔可夫链>的遍历性与唯一稳态_哔哩哔哩_bilibili