隐马尔科夫模型 介绍 HMM python代码

 

 

#HMM Forward algorithm  
  
#input  Matrix A,B vector pi  
  
import  numpy as np  
  
  
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]])  
O=np.array([0 ,1, 0])#T=3  
#O=np.array([1 ,0, 1])#T=3  
pi=np.array([0.2,0.4,0.4])  
  
N=3#N kind state  
M=2#M kind of observation  
T=3  
  
#initialize:  
  
Aerfa=np.zeros((3,3),np.float)  
for i in range(N):  
    Aerfa[0,i]=pi[i]*B[i,O[0]]  
  
      
#Recursion:  
for t in range(T-1):  
    for i in range(N):    
        for j in range(N):  
            Aerfa[t+1,i]+=Aerfa[t,j]*A[j,i]  
        Aerfa[t+1,i]*=B[i,O[t+1]]  
      
#compute P(O|lamda) and termination  
P=0  
for i in range(N):  
    P+=Aerfa[T-1,i]#begin with 0 so T-1  
  
          
print P  
  
  
  
  
#backward  
  
#initialize:  
Beta=np.zeros((T,N),np.float)  
print Beta  
for i in range(N):  
    Beta[T-1,i]=1  
  
#recursion:  
for t in range(T-2,-1,-1):  
    for i in range(N):  
        for j in range(N):  
            Beta[t,i]+=A[i,j]*B[j,O[t+1]]*Beta[t+1,j]  
  
              
#termination:  
P_back=0  
for i in range(N):  
    P_back+=pi[i]*B[i,O[0]]*Beta[0,i]  
      
print P_back  

 

 参考文献:统计学习方法,李航。

下一篇将介绍:问题3的具体解决方法为维比特算法(biterbi) algorithm

 

本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流。感谢您的阅读。
欢迎转载本文,转载时请附上本文地址:http://www.cnblogs.com/Dzhouqi/p/3203788.html
另外:欢迎访问我的博客 http://www.cnblogs.com/Dzhouqi/

 

posted @ 2013-07-21 15:26  joey周琦  阅读(5988)  评论(1编辑  收藏  举报