首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - hmmlearn负transmat

Python - hmmlearn负transmat
EN

Stack Overflow用户
提问于 2016-02-17 17:18:47
回答 1查看 845关注 0票数 1

我试图拟合一个模型,给出一个过渡矩阵和一个先验迁移矩阵。经过拟合,给出了过渡矩阵中的一些负值。

转换矩阵由另一个模型的转移矩阵恢复。

我所指的一个例子是:

代码语言:javascript
复制
>>> model
GaussianHMM(algorithm='viterbi', covariance_type='diag',covars_prior=0.01,
  covars_weight=1, init_params='stmc', means_prior=0, means_weight=0,
  n_components=3, n_iter=100, params='stmc', random_state=123,
  startprob_prior=1.0, tol=0.5, transmat_prior=1.0, verbose=True)
>>> model.transmat_
array([[  9.95946216e-01,   2.06359396e-21,   4.05378401e-03],
   [  2.05184679e-21,   9.98355526e-01,   1.64447392e-03],
   [  3.86689326e-03,   1.96383373e-03,   9.94169273e-01]])
>>> new_model= hmm.GaussianHMM(n_components=model.n_components,
random_state=123,
... init_params="mcs", transmat_prior=model.transmat_)

>>> new_model.fit(train_features)
GaussianHMM(algorithm='viterbi', covariance_type='diag', covars_prior=0.01,
      covars_weight=1, init_params='mcs', means_prior=0, means_weight=0,
      n_components=3, n_iter=10, params='stmc', random_state=123,
      startprob_prior=1.0, tol=0.01,
      transmat_prior=array([[  9.95946e-01,   2.06359e-21,   4.05378e-03],
       [  2.05185e-21,   9.98356e-01,   1.64447e-03],
       [  3.86689e-03,   1.96383e-03,   9.94169e-01]]),
      verbose=False)
>>> new_model.transmat_
array([[  9.98145253e-01,   1.86155258e-03,  -7.08313729e-06],
       [  2.16330448e-03,   9.93941859e-01,   3.89483667e-03],
       [ -5.44842863e-06,   3.52862069e-03,   9.96478546e-01]])
>>> 

在代码中,培训数据也是相同的。如果我没有先验地使用转移矩阵,而是使用发射,例如,它正确工作。我用的是Anaconda 2.5 64位。hmmlearn版本为0.2.0

暗示?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-28 23:09:44

博士确保transmat_prior是>=1。

利用状态指示变量z,推导了隐马尔可夫模型的EM算法,该算法包含了每个时间步长t的马尔可夫链状态。在前一状态z[t - 1]的条件下,z[t]遵循由转移概率矩阵定义的参数的范畴分布

hmmlearn实现了隐马尔可夫模型的映射学习,这意味着每个模型参数都有一个先验分布。具体而言,假定转换矩阵的每一行都遵循参数为Dirichlet分布的对称transmat_prior。先验的选择不是随机的,Dirichlet分布是共轭于范畴的。这在EM算法的M步骤中产生了一个简单的更新规则

代码语言:javascript
复制
transmat[i, j] = (transmat_prior[i, j] - 1.0 + stats["trans"][i, j]) / normalizer

其中stat["trans"][i, j]ij之间的预期转换数。

从更新规则可以清楚地看出,如果a) transmat_prior对某些ij是<1时,以及b)期望stats["trans"]不足以补偿这一点,则转换概率可能为负值。

这是一个已知问题在地图估计的分类分布和一般建议是要求transmat_prior >=1的所有状态。

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

https://stackoverflow.com/questions/35463433

复制
相关文章

相似问题

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