简介
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)displaystyleprod_{i=2}^n P(y_i|y_{i-1})P(x_i|y_i)
]
除了结构信息外, 要确定一个 HMM 还需要以下三个参数:
- 状态转移概率: 模型在各个状态间转换的概率, 常记作矩阵 (A=[a_{ij}]_{N imes N}), 其中 (a_{ij} = P(y_{t+1}=s_j|y_t=s_i), ext{ };;1 leq i,j leq N)
- 输出观测概率: 模型根据当前状态获得各个观测值的概率, 常常记作矩阵 (B = [b_{ij}]_{N imes M},) 其中 (b_{ij} = P(x_t=o_j|y_t=s_i), ext{ };;1leq 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), ext{ };;1leq i leq N), 表示模型的初始状态为 (s_i) 的概率.
通过指定状态空间 (mathcal{Y}), 观测空间 (mathcal{X}) 和上述三组参数, 就能确定一个 HMM, 通常用其参数 (lambda = [A,B,pi ]) 来指代. 给定 (lambda), 它按照如下过程产生观测序列 ({x_1,x_2,cdots, x_n})
- 设置 (t=1), 并根据初始化状态概率 (pi) 选择初始状态 (y_i);
- 根据状态 (y_t) 和输出观测概率 (B) 选择观测变量取值 (x_t);
- 根据状态 (y_t) 和状态转移矩阵 (A) 转移模型状态, 即确定 (y_{t+1});
- 若 (t<n), 设置 (t=t+1), 并转到第 2 步, 否则停止.
其中 (y_tin {s_1,s_2,cdots,s_N}) 和 (x_t in {o_1,o_2,cdots,o_M}), 分别为第 (t) 时刻的状态和观测值.
python 库: hmmlearn