目录
声明:本文参考自https://zhuanlan.zhihu.com/p/111899116
仅用于学习
隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。
什么样的问题需要HMM模型?
首先我们来看看什么样的问题解决可以用HMM模型。
使用HMM模型时我们的问题一般有这两个特征:
1)我们的问题是基于序列的,比如时间序列,或者状态序列。
2)我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。
一、预备知识
1.马尔科夫性
在某个时刻 的随机变量 与前一个时刻的随机变量 之间有条件分布 , 如果 只依赖于 ,而不是依赖于过去的随机变量 ,这一性质称为马尔可夫性,即:
马尔可夫性,可以通俗的理解为:现在决定未来。
2.马尔科夫链
具有马尔可夫性的随机序列
称为马尔可夫过程 (Markov process ),或称马尔可夫链 (Markov process ).
3.计算马尔可夫链在时刻t的状态分布
马尔可夫链 在时刻 的状态分市,可以由在时刻 的状态分布以及转移概率分布 决定
则:
即:
以游戏“三仙归洞”魔术举例:
二、隐马尔可夫模型
1.两个假设
1)观测独立性假设:当前时刻观测值只与当前时刻状态值有关
2)齐马尔科夫性:当前时刻状态只与前一时刻状态有关
(有向图模型)
2.三个要素
1)状态转移矩阵
2)观测概率矩阵(发射矩阵)
3)初始状态矩阵
3.隐马尔可夫的联合概率分布
4.隐马尔可夫定义
5.隐马尔可夫的应用
1.概率计算问题(识别问题):
举一个例子:
此处请学习EM算法,博主不多讨论。
3.预测算法
1)维特比算法寻找最优路径:
维特比算法原理:
维特比算法就是求所有观测序列中的最优,如下图所示,我们要求从S到E的最优序列,中间有3个时刻,每个时刻都有对应的不同观察的概率,下图中每个时刻不同的观测标签有3个。
求所有路径中最优路径,最容易想到的就是暴力解法,直接把所有路径全部计算出来,然后找出最优的。这方法理论上是可行,但当序列很长时,时间复杂夫很高。而且进行了大量的重复计算,viterbi算法就是用动态规划的方法就减少这些重复计算。
每次只需要保存到当前位置最优路径,之后循环向后走。到结束时,从最后一个时刻的最优值回溯到开始位置,回溯完成后,这个从开始到结束的路径就是最优的。
viterbi算法是每次记录到当前时刻,每个观察标签的最优序列,如下图,假设在t时刻已经保存了从0到t时刻的最优路径,那么t+1时刻只需要计算从t到t+1的最优就可以了,图中红箭头表示从t时刻到t+1时刻,观测标签为1,2,3的最优。
求例1的最优状态序列。
先求t=1,t=2时。
接着求 t=3 时,
例1的状态路径栅栏图。
穷举例1的状态路径
我们看一下维特比算法的性能,从时间复杂度来看:
(1)穷举法:n个状态m次观测共有n的m次方条路径
例子:3个状态5次观测,即3*3*3*3*3
(2)维特比算法的路径次数m*n*n
例子:维特比算法的路径次数5*3*3。
即数据量大时,维特比算法效果明显,可以降到线性计算量。