隐式马尔科夫模型
隐马尔可夫模型(Hidden Markov Model;缩写:HMM)或称作隐性马尔可夫模型,是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析,例如模式识别。
在正常的马尔可夫模型中,状态对于观察者来说是直接可见的,这样状态的转换概率便是全部的参数。而在隐马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的,每一个状态在可能输出的符号上都有一概率分布,因此输出符号的序列能够透露出状态序列的一些信息。
隐式马尔科夫模型的定义
我们考虑这样一个例子:
假设你有一个住得很远的朋友,他每天跟你打电话告诉你他那天做了什么。你的朋友仅仅对三种活动感兴趣:公园散步,购物以及清理房间。他选择做什么事情只凭天气。你对于他所住的地方的天气情况并不了解,但是你知道总的趋势。在他告诉你每天所做的事情基础上,你想要猜测他所在地的天气情况。
你认为天气的运行就像一个马尔可夫链。其有两个状态“雨”和“晴”,但是你无法直接观察它们,也就是说,它们对于你是隐藏的。每天,你的朋友有一定的概率进行下列活动:“散步”、“购物”、“清理”。因为你朋友告诉你他的活动,所以这些活动就是你的观察数据。这整个系统就是一个隐马尔可夫模型。
你知道这个地区的总的天气趋势,并且平时知道你朋友会做的事情。也就是说这个隐马尔可夫模型的参数是已知的。1

初始概率分布为:
\[\pi=\left({0.6},{0.4}\right)'\]
状态转移概率分布为:
\[A=\left(\begin{array}{cc}{0.7}&{0.3}\\{0.4}&{0.6}\end{array}\right)\]
观察概率分布为:
\[B=\left(\begin{array}{ccc}{0.1}&{0.4}&{0.5}\\{0.6}&{0.3}&{0.1}\end{array}\right)\]
观察序列的生成过程
输入: 隐式马尔可夫模型 \(\lambda=\left(A,B,\pi\right)\),观察序列长度 \(T\); 输出: 观察序列 \(O=\left(o_1,o_2,\dots,o_T\right)\);
过程:
- 按照初始状态分布 \(\pi\) 生成状态 \(i_1\)
- 令 \(t=1\)
- 按照状态 \(i_t\) 的观测概率分布 \(b_{i_t}(k)\) 生成 \(o_t\)
- 按照状态 \(i_t\) 的状态转移概率分布 \(\left\{a_{i_ti_{t+1}}\right\}\) 生成状态 \(i_{t+1}\)
- 令 \(t=t+1\); 如果 \(t<T\),转步(3);否则,终止
所以,其生成程序如下:
1 | def sample(self, l, trans, emis, statenames=None, symbols=None): |
https://en.wikipedia.org/wiki/Hidden_Markov_model↩︎