【机器学习】隐马尔可夫模型及其三个基本问题(四)状态序列预测算法及python实现
隐马尔可夫模型状态序列预测问题是指给定模型 λ = [ A , B , ∏ ] \lambda = \left[ {A,B,\prod } \right] λ=[A,B,∏]和观测序列 X = { x 1 , x 2 , ⋯   , x n } X = \left\{ { {x_1},{x_2}, \cdots ,{x_n}} \right\} X={ x1,x2,⋯,xn},求最可能出现的对应状态序列。本篇博文介绍状态序列预测算法中的维特比算法(Viterbi algorithm)[参考资料1]。
一、维特比算法
维特比算法实际是用动态规划解隐马尔科夫模型的预测问题,首先导入两个变量 δ \delta δ和 ψ \psi ψ。
定义在时刻 t t t状态为 q i q_i qi的所有单个路径 ( y 1 , y 2 , ⋯   , y t ) ({y_1},{y_2}, \cdots ,{y_t}) (y1,y2,⋯,yt)中概率最大值为:
δ t ( q i ) = max y 1 , y 2 , ⋯   , y t − 1 P ( y t = q i , y t − 1 , ⋯   , y 1 , x t , ⋯   , x 1 ∣ λ ) , i = 1 , 2 , ⋯   , N {\delta _t}\left( {
{q_i}} \right) = \mathop {\max }\limits_{
{y_1},{y_2}, \cdots ,{y_{t - 1}}} P\left( {
{y_t} = {q_i},{y_{t - 1}}, \cdots ,{y_1},{x_t}, \cdots ,{x_1}\left| \lambda \right.} \right),i = 1,2, \cdots ,N δt(qi)=y1,y2,⋯,yt−1maxP(yt=qi,yt−1,⋯,y1,xt,⋯,x1∣λ),i=1,2,⋯,N
则变量 δ \delta