首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python算法

Python算法
EN

Stack Overflow用户
提问于 2015-08-19 18:54:28
回答 1查看 7.7K关注 0票数 1

下面的代码是我在HMM模型中使用的Viterbi算法的这里实现。该链接还提供了一个测试用例。

__init__中,我了解到:

  • initialProb是在给定状态下开始的概率,
  • transProb是在任何给定的时间内从一种状态转移到另一种状态的概率,但是

我不明白的参数是obsProb.谁能解释一下吗?

代码语言:javascript
复制
import numpy as np

'''
N: number of hidden states
'''
class Decoder(object):
def __init__(self, initialProb, transProb, obsProb):
    self.N = initialProb.shape[0]
    self.initialProb = initialProb
    self.transProb = transProb
    self.obsProb = obsProb
    assert self.initialProb.shape == (self.N, 1)
    assert self.transProb.shape == (self.N, self.N)
    assert self.obsProb.shape[0] == self.N

def Obs(self, obs):
    return self.obsProb[:, obs, None]

def Decode(self, obs):
    trellis = np.zeros((self.N, len(obs)))
    backpt = np.ones((self.N, len(obs)), 'int32') * -1

    # initialization
    trellis[:, 0] = np.squeeze(self.initialProb * self.Obs(obs[0]))

    for t in xrange(1, len(obs)):
        trellis[:, t] = (trellis[:, t-1, None].dot(self.Obs(obs[t]).T) * self.transProb).max(0)
        backpt[:, t] = (np.tile(trellis[:, t-1, None], [1, self.N]) * self.transProb).argmax(0)
    # termination
    tokens = [trellis[:, -1].argmax()]
    for i in xrange(len(obs)-1, 0, -1):
        tokens.append(backpt[tokens[-1], i])
    return tokens[::-1]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 22:49:28

具有隐藏状态和M可能的离散观测值的M由以下参数定义:

  • 大小矢量( initialProbN):初始状态分布。条目initialProb[i]是最初(在时间0)处于状态i的概率P(x_0 = i)
  • transProb ( size of size NxN):转移概率矩阵。条目transProb[i][j]是从状态i过渡到j的概率P(x_{t+1} = j | x_t = i)
  • obsProb ( NxM):发射概率矩阵。入口obsProb[i][j]是从状态i发射符号j的概率P(y_t = j | x_t = i)

通常,这些参数分别命名为\piTE,或者\piAB

顺便说一下,HMM的标准引用是拉伯纳教程

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32103458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档