R中的HMM包出错

时间:2012-05-20 11:44:15

标签: r machine-learning hidden-markov-models

我需要一些关于此错误的帮助。我正在尝试使用R中的HMM包构建HMM模块。我无法理解我的代码有什么问题。错误在于使用Baum-Welch算法训练HMM

lathmm = initHMM(c("S","M1","M2","M3","M4","E"),c("m","i"),c(1,0,0,0,0,0),
+ matrix(c(   0,0,0,0,0,0,  
+             1,0,0,0,0,0,
+             0,1,0,0,0,0,
+             0,0,1,0,0,0,
+             0,0,0,1,0,0,
+             0,0,0,0,1,1
+             ),6,6), 
+  matrix(c(0,.5,.5,.5,.5,.5,  
+           0,.5,.5,.5,.5,.5  
+           ),6,2))
> 
> print(lathmm)
$States
[1] "S"  "M1" "M2" "M3" "M4" "E" 

$Symbols
[1] "m" "i"

$startProbs
 S M1 M2 M3 M4  E 
 1  0  0  0  0  0 

$transProbs
    to
from S M1 M2 M3 M4 E
  S  0  1  0  0  0 0
  M1 0  0  1  0  0 0
  M2 0  0  0  1  0 0
  M3 0  0  0  0  1 0
  M4 0  0  0  0  0 1
  E  0  0  0  0  0 1

$emissionProbs
      symbols
states   m   i
    S  0.0 0.0
    M1 0.5 0.5
    M2 0.5 0.5
    M3 0.5 0.5
    M4 0.5 0.5
    E  0.5 0.5

- >初始化HMM时没有问题。

Baum-Welch培训:

> prot = sample(c(rep("m",100),rep("m",300)))
>  bw = baumWelch(lathmm,prot,10)
Error in if (d < delta) { : missing value where TRUE/FALSE needed

- &GT;这是错误。

任何人都可以帮助我。我不确定这个模块有什么问题。

2 个答案:

答案 0 :(得分:1)

试试看看你的初始化部分。概率。矩阵。如果你将前两个probs(对于状态“S”)改为零以外,baumwelch算法工作得很好。我用RStudio运行它。

答案 1 :(得分:1)

当'initHMM'中定义的一个或多个符号未出现在观察中时,会发生这种情况。

在您的情况下,您定义符号“i”和“m”,但您的观察仅包含“m”。

在调用'baumWelch'之前添加一些“i”或在调用'initHMM'时删除符号。