作者:elfin 参考资料来源:《统计学习方法》第二版
---目录:
- 一、前向概率计算
- 二、后向概率计算
- 三、给定模型与观测,在时刻t处于状态qi的概率
- 四、给定模型与观测,t时刻处于qi,下一时刻处于qj的概率
- 五、一些重点期望值
- [5.1 在观测O下,状态i出现的期望值](#5.1 在观测O下,状态i出现的期望值)
- [5.2 在观测O下,由状态i转移的期望](#5.2 在观测O下,由状态i转移的期望)
- [5.3 在观测O下,由状态i转移到j的期望](#5.3 在观测O下,由状态i转移到j的期望)
- 六、模型学习
隐马尔可夫:前向后向概率计算、模型参数学习、模型预测
以下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])
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])
这里前向、后向概率是一致的!
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)
$$ \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)
关于模型的学习的理论知识见《HMM隐马尔可夫.md》 。
关于EM算法,我们将E步M步整合到update_param
方法中,你只需要控制迭代停止的条件。
完!