(补) HMM 求解参数-状态转移矩阵 A

Posted chenjieyouge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(补) HMM 求解参数-状态转移矩阵 A相关的知识,希望对你有一定的参考价值。

昨天在看的时候, 才发现, HMM参数求解给忘了 状态转移矩阵A的求解, 我以为我做了...好气哦, 不多比比, 直接来.

A 是状态转移矩阵, 表示在 已知前一个状态下, 求解后一个概率(写出来就是一个条件概率)

(p(z_{k+1} =j | z_k = i) = frac {p(z_{k+1}=j, z_k = i)}{p(z_k = i)})

最基础的条件概率公式哈

分母 (p(z_k = 1)) 可以通过前面的 F/B 算法计算出来, 所以问题在于如何计算 (p(z_{k+1}, z_k=i)) 这个联合概率

估计 A-理论

由上, 我们的目标是如何计算 (p(z_{k+1}, z_k = i | x)) , 在观测值已知的情况下.

(z_k 与 x_k) 是一 一对应的关系, 通过贝叶斯公式可以得到:

(p(z_k=i , z_{k+1}=j| x) 与 p( z_k =i, z_{k_1}=j, x) 是正比关系)

跟之前同样的套路, 对 x 进行区间拆分, 即:

(=p(z_k, z_{k+1}, x_{1:k}, x_{k+1}, x_{k+2:n})) 换个变量顺序哈, 为了把 (z_k, x_{1:k}) 看为一个整体, 求解技巧是为了最终形式简洁

(=p(z_k, x_{1:k}, z_{k+1}, x_{k+1}, x_{k+2:n})) 展开写:

(=p(z_k, x_{1:k}) p(z_{k+1}|z_k, x_{1:k}) p(x_{k+1}|z_k, x_{1:k}, z_{k+1}) p(x_{k+2:n}|z_k, x_{1:k},z_{k+1}, x_{k+1} ))

同样根据 D-separation性质 可将与条件概率无关的独立变量进行省略, 化简得到:

(p(z_k, x_{1:k}) p(z_{k+1}|z_k) p(x_{k+1}|z_{k+1}) p(x_{k+2:n}|z_{k+1}))

这几个项, 不就刚好对应: Forward, 状态转移矩阵, 发射概率矩阵, Backwark 呀.

也就是可以算出所有的:

(p(z_k=i , z_{k+1}=1| x) 正比于 p( z_k =i, z_{k_1}=1, x))

(p(z_k=i , z_{k+1}=2| x) 正比于 p( z_k =i, z_{k_1}=2, x))

(p(z_k=i , z_{k+1}=3| x) 正比于 p( z_k =i, z_{k_1}=3, x))

....

再进行一个归一化的操作, 则就算出了 (p(z_k=i, z_{k+1}=j|x)) 的概率了, (用来估计A要用到的)

估计A-栗子

考虑 Z, 假设有3个样本, 通过之前的 F/B 算法, 可以得到每个z_i 的概率分布.

样本1

z1 z2 z3 z4 z5 z6
0.6 0.5 0.6 0.7 0.6 0.2
0.3 0.3 0.2 0.2 0.1 0.3
0.1 0.2 0.2 0.1 0.3 0.5

样本2

z1 z2 z3 z4 z5
0.5 0.4 0.3 0.6 0.3
0.3 0.4 0.5 0.3 0.1
0.2 0.2 0.2 0.1 0.6

样本3

z1 z2 z3 z4
0.5 0.1 0.3 0.5
0.3 0.2 0.3 0.1
0.2 0.7 0.3 0.4

我们要计算的是 (p(z_k=i, z_{k+1}=j | x)) 这个概率. 根据上面的数据, 方法就是前面的理论推导的式子, 过程跟 HMM的第2篇, 已知Z 来计算是差不多的过程. 这里就不展开了.

最后呢就计算出来状态转移矩阵 A.

用到的EM算法

随机初始化 参数 ( heta=(pi, A, B))

while not 收敛:

? E-step: (核心是为了计算 p(z|x)

? 根据已知的 ( heta=(pi, A, B)) 计算

? (p(z_k^{i} | x^i), i = 1, 2, ...n) // 用 F/B 算法求解

? (p(z_{k}^i, z_{k+1}^i | x^i), i = 1, 2...n)

? M-step:

? 参数更新

? (pi, A, B)

不搞了 HMM 就先搞到这, 我感觉之前我还挺清晰的, 写着写着, 这些概率公式, 总感觉留有bug, 真心觉得, 概率模型贼不好理解, 一不小心就自己个就弄混了, 什么条件概率, 全概率, 贝叶斯, 条件独立 , 序列, 值概率....自己都写崩溃了, 赶紧撤退, 战略性放弃一波, 再恶补一波概率论先.

以上是关于(补) HMM 求解参数-状态转移矩阵 A的主要内容,如果未能解决你的问题,请参考以下文章

HMM模型原理及其实战

利用隐马尔科夫链(HMM)模型实现中文分词

机器学习——HMM & CRF

05 隐马尔可夫模型 - 案例一 - hmmlearn框架说明

python 日常笔记 hmmlearn 隐性马尔科夫模型案例分析

HMM-前向后向算法