Skip to content
/ HMM Public

隐马尔可夫:前向后向概率计算、模型参数学习、模型预测

Notifications You must be signed in to change notification settings

firstelfin/HMM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

隐马尔可夫


作者:elfin   参考资料来源:《统计学习方法》第二版

---

目录

隐马尔可夫:前向后向概率计算、模型参数学习、模型预测


Top --- Bottom

一、前向概率计算

以下A是状态概率转移矩阵,B是观测概率矩阵,hmm是一个模型的实例化。

A = np.array([
    [0.5, 0.2, 0.3],
    [0.3, 0.5, 0.2],
    [0.2, 0.3, 0.5]
])
B = np.array([
    [0.5, 0.5],
    [0.4, 0.6],
    [0.7, 0.3]
])
result = hmm.get_forward_prob([6, 3, 1, 2, 4, 2])
hmm = HMM(A, B, [0.2, 0.4, 0.4])
result = hmm.get_forward_prob([1, 2, 1])

Top --- Bottom

二、后向概率计算

A = np.array([
    [0.5, 0.2, 0.3],
    [0.3, 0.5, 0.2],
    [0.2, 0.3, 0.5]
])
B = np.array([
    [0.5, 0.5],
    [0.4, 0.6],
    [0.7, 0.3]
])
result = hmm.get_forward_prob([6, 3, 1, 2, 4, 2])
hmm = HMM(A, B, [0.2, 0.4, 0.4])
result = hmm.get_backward_prob([1, 2, 1])

这里前向、后向概率是一致的!


Top --- Bottom

三、给定模型与观测,在时刻t处于状态qi的概率

A = np.array([
    [0, 1, 0],
    [0.2, 0.35, 0.45],
    [0.4, 0.14, 0.46]
])
B = np.array([
    [1 / 6, 1 / 6, 1 / 6, 1 / 6, 1 / 6, 1 / 6],
    [0.23, 0.2, 0.175, 0.14, 0.135, 0.12],
    [0.24, 0.2, 0.175, 0.13, 0.135, 0.12]
])
hmm = HMM(A, B, [1 / 3, 1 / 3, 1 / 3])
result = hmm.get_qi2t_prob([6, 3, 1, 2, 4, 2], 3, 2)

Top --- Bottom

四、给定模型与观测,t时刻处于qi,下一时刻处于qj的概率

$$ \xi {t}\left ( i,j \right )=P\left ( i{t}=q_{i},i_{t+1}=q_{j}|O,\lambda \right )=\frac{P\left ( i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda \right )}{P\left ( O|\lambda \right )}\ P\left ( i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda \right )=\alpha_{t}(i)a_{ij}b_{j}\left( o_{t+1} \right)\beta_{t+1}(j)\ \alpha_{t}(i)\beta_{t}(i)=P\left ( i_{t}=q_{i},O|\lambda \right ) $$

A = np.array([
    [0, 1, 0],
    [0.2, 0.35, 0.45],
    [0.4, 0.14, 0.46]
])
B = np.array([
    [1 / 6, 1 / 6, 1 / 6, 1 / 6, 1 / 6, 1 / 6],
    [0.23, 0.2, 0.175, 0.14, 0.135, 0.12],
    [0.24, 0.2, 0.175, 0.13, 0.135, 0.12]
])
hmm = HMM(A, B, [1 / 3, 1 / 3, 1 / 3])
result = hmm.get_qi2t_qj2next_prob([6, 3, 1, 2, 4, 2], 3, 1, 2)

Top --- Bottom

五、一些重点期望值

5.1 在观测O下,状态i出现的期望值

$$ 1 - \prod_{t=1}^{T} \left( 1 - \gamma_{t}\left ( i \right ) \right ) $$


Top --- Bottom

5.2 在观测O下,由状态i转移的期望

$$ 1 - \prod_{t=1}^{T-1} \left( 1 - \gamma_{t}\left ( i \right ) \right ) $$


Top --- Bottom

5.3 在观测O下,由状态i转移到j的期望

$$ 1 - \prod_{t=1}^{T-1} \left( 1 - \xi _{t}\left ( i,j \right ) \right ) $$


Top --- Bottom

六、模型学习

关于模型的学习的理论知识见《HMM隐马尔可夫.md》

关于EM算法,我们将E步M步整合到update_param方法中,你只需要控制迭代停止的条件。


Top --- Bottom

Top --- Bottom

完!

About

隐马尔可夫:前向后向概率计算、模型参数学习、模型预测

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages