从矩阵生成马尔可夫模型

时间:2012-04-16 18:23:01

标签: python matrix markov-chains hidden-markov-models

定义可能有误,所以如果是这样,请纠正我。我需要从以下类型的矩阵中生成Markov模型:

four    two "e"         
four    two "e"         
three   three   "e"         
one three   "e"         
zero    six one zero    "e" 
two two "e"         
two two "e"         
two two "e"         
two two "e"         
two two "e"         
four    zero    "e"         
two two "e"         
three   one three   "e"     
three   "e"             
four    one "e"         
three   one "e"         
two one one zero    two "e"
two five    "e"         
three   four    two "e"     
zero    five    "e"         
three   "e"             
three   three   "e"         
three   "e"             
one one "e"         
three   two "e"         
one one "e"         
three   two zero    zero    zero    "e"
three   three   "e"         
three   one "e"         
three   two "e"         

我需要输出类似于:{“four”:[{2:“two”,3:“one”,2:“exit”},{...}],“three”:[ {...}]}

以上数字基本上是向特定国家过渡的次数..

我正在使用python。

回答通常的问题“你有什么尝试?”:“我尝试了一些方法,但他们没有完全实现,所以我希望其中一个答案有助于澄清一些事情。”

非常感谢。

编辑,更新以显示完整的矩阵。

2 个答案:

答案 0 :(得分:1)

你没有给出一个过渡矩阵(这些是概率),而是一个由基础马尔可夫模型产生的观察到的过渡序列。

除非您拥有无限数量的这些观察结果,否则您无法准确地重建基础转换参数。但是,您可以选择转换,以便您的可观察序列是最可能的。如果我理解您的问题,您应该查看Hidden Markov Models的解决方案。可以找到一个免费的python模块GHMM here

答案 1 :(得分:0)

这是一个想法: 尝试创建{"four":[{2:"two", 3:"one",2:"exit"},{...}],"three":[{...}]}(注意内部字典中顺序的更改),而不是尝试创建{"four":[{"two":2, "one":3, "exit":2},{...}],"three":[{...}]}(在python中不太合法)。

Iterate over the matrix, for each line:
  if the first word isn't in the big dictionary, add it.
  if the second word isn't in its sub-dictionary, add it, otherwise add 1 to its value.