没有合适的资源?快使用搜索试试~ 我知道了~
首页python实现隐马尔科夫模型HMM
一份完全按照李航<<统计学习方法>>介绍的HMM代码,供大家参考,具体内容如下 #coding=utf8 ''''' Created on 2017-8-5 里面的代码许多地方可以精简,但为了百分百还原公式,就没有精简了。 @author: adzhua ''' import numpy as np class HMM(object): def __init__(self, A, B, pi): ''''' A: 状态转移概率矩阵 B: 输出观察概率矩阵 pi: 初始化状态向量 ''' self.A = np.array(A)
资源详情
资源评论
资源推荐

python实现隐马尔科夫模型实现隐马尔科夫模型HMM
一份完全按照李航<<统计学习方法>>介绍的HMM代码,供大家参考,具体内容如下
#coding=utf8
'''''
Created on 2017-8-5
里面的代码许多地方可以精简,但为了百分百还原公式,就没有精简了。
@author: adzhua
'''
import numpy as np
class HMM(object):
def __init__(self, A, B, pi):
'''''
A: 状态转移概率矩阵
B: 输出观察概率矩阵
pi: 初始化状态向量
'''
self.A = np.array(A)
self.B = np.array(B)
self.pi = np.array(pi)
self.N = self.A.shape[0] # 总共状态个数
self.M = self.B.shape[1] # 总共观察值个数
# 输出HMM的参数信息
def printHMM(self):
print ("==================================================")
print ("HMM content: N =",self.N,",M =",self.M)
for i in range(self.N):
if i==0:
print ("hmm.A ",self.A[i,:]," hmm.B ",self.B[i,:])
else:
print (" ",self.A[i,:]," ",self.B[i,:])
print ("hmm.pi",self.pi)
print ("==================================================")
# 前向算法
def forwar(self, T, O, alpha, prob):
'''''
T: 观察序列的长度
O: 观察序列
alpha: 运算中用到的临时数组
prob: 返回值所要求的概率
'''
# 初始化
for i in range(self.N):
alpha[0, i] = self.pi[i] * self.B[i, O[0]]
# 递归
for t in range(T-1):
for j in range(self.N):
sum = 0.0
for i in range(self.N):
sum += alpha[t, i] * self.A[i, j] alpha[t+1, j] = sum * self.B[j, O[t+1]]
# 终止
sum = 0.0
for i in range(self.N):
sum += alpha[T-1, i]
prob[0] *= sum
# 带修正的前向算法
def forwardWithScale(self, T, O, alpha, scale, prob):
scale[0] = 0.0














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0