HMM原理介绍 示例 python代码实现
2016-05-27 18:51
1091 查看
下面使用李航博士书上的例子说明:
对步骤(3)进行推导
下面给出简单的例子和前向算法的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
相关文章推荐
- Python 学习之路——1
- Python之self
- Python之self
- python_爬取博客内容
- python目录
- python多进程编程
- python_爬取博客文章下载到本地
- Python变量
- Python中的with…as…语法
- Python中的with…as…语法
- Python中的Numpy入门教程
- win7 python2.7.10安装chardet
- selenium + python自动化测试环境搭建
- Python学习笔记之抽象
- Python字符串学习4
- Python2与Python3的区别(二):raw_input与input
- python 爬虫笔记--简单静态
- python中改变list中list值的问题
- Python 基础学习7 - print line
- python glob模块扫描文件目录