学习 HMM

简介

HMM 中的变量可以分为两组.

  • 第一组是状态变量 \(\{y_i,y_2,\cdots, y_n\}\), 其中 \(y_i \in \mathcal{Y}\) 表示第 \(i\) 时刻的系统状态. 通常假定状态变量是隐藏的、不可观测的, 因此状态变量亦被称为隐变量 (hidden variable).
  • 第二组是观测变量 \(\{x_1,x_2,\cdots, x_n\}\), 其中 \(x_i \in \mathcal{X}\) 表示第 \(i\) 时刻的观测值. 在 HMM 中, 系统通常在多个状态 \(\{s_1,s_2,\cdots,s_N\}\) 之间转换, 因此状态变量 \(y_i\) 的取值范围 \(\mathcal{Y}\) 通常有 \(N\) 个可能的离散空间.

下图更加直观:

graph LR; subgraph 状态变量或隐变量 y1 --now--> y2 y2 --now--> y3 y3 --now--> y4 ago --> now end subgraph 观测变量 y1 --> x1 y2 --> x2 y3 --> x3 y4 --> x4 end

上图的箭头表示了变量之间的依赖关系. 在任一时刻, 观测变量的取值仅仅依赖于状态变量, 即 \(x_t\)\(y_t\) 确定, 与其他的状态变量及其观测变量的取值无关. 同时, \(t\) 时刻的状态 \(y_t\) 仅依赖于 \(t-1\) 时刻的状态, 与其余 \(n-2\) 个状态无关. 这就是所谓的『马尔可夫链』(Markov chain), 系统下一时刻的状态仅由当前状态决定, 不依赖于以往的任何状态. 这样, 便有

\[P(x_1,y_1,\cdots,x_n,y_n) = P(y_1)P(x_1|y_1)\displaystyle\prod_{i=2}^n P(y_i|y_{i-1})P(x_i|y_i) \]

除了结构信息外, 要确定一个 HMM 还需要以下三个参数:

  • 状态转移概率: 模型在各个状态间转换的概率, 常记作矩阵 \(A=[a_{ij}]_{N\times N}\), 其中 \(a_{ij} = P(y_{t+1}=s_j|y_t=s_i), \text{ }\;\;1 \leq i,j \leq N\)
  • 输出观测概率: 模型根据当前状态获得各个观测值的概率, 常常记作矩阵 \(B = [b_{ij}]_{N\times M},\) 其中 \(b_{ij} = P(x_t=o_j|y_t=s_i), \text{ }\;\;1\leq i \leq N, 1 \leq j \leq M\) 表示在任意时刻 \(t\), 若状态为 \(s_i\), 则观测值 \(o_j\) 被获取的概率.
  • 初始状态概率: 模型在初始时刻各个状态出现的概率, 常常记作 \(\pi = (\pi_1, \pi_2, \cdots, \pi_N)\), 其中 \(\pi_i = P(y_1=s_i), \text{ }\;\;1\leq i \leq N\), 表示模型的初始状态为 \(s_i\) 的概率.

通过指定状态空间 \(\mathcal{Y}\), 观测空间 \(\mathcal{X}\) 和上述三组参数, 就能确定一个 HMM, 通常用其参数 \(\lambda = [A,B,\pi ]\) 来指代. 给定 \(\lambda\), 它按照如下过程产生观测序列 \(\{x_1,x_2,\cdots, x_n\}\)

  1. 设置 \(t=1\), 并根据初始化状态概率 \(\pi\) 选择初始状态 \(y_i\);
  2. 根据状态 \(y_t\) 和输出观测概率 \(B\) 选择观测变量取值 \(x_t\);
  3. 根据状态 \(y_t\) 和状态转移矩阵 \(A\) 转移模型状态, 即确定 \(y_{t+1}\);
  4. \(t<n\), 设置 \(t=t+1\), 并转到第 2 步, 否则停止.

其中 \(y_t\in \{s_1,s_2,\cdots,s_N\}\)\(x_t \in \{o_1,o_2,\cdots,o_M\}\), 分别为第 \(t\) 时刻的状态和观测值.

python 库: hmmlearn

posted @ 2018-08-10 23:22  xinet  阅读(280)  评论(0编辑  收藏  举报