4

我需要一些关于这个错误的帮助。我正在尝试使用 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 没有问题。

鲍姆-韦尔奇培训:

> 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

-> 这是错误。

谁可以帮我这个事。我不确定这个模块有什么问题。

4

2 回答 2

1

只需尝试查看 obs 的初始化部分。概率。矩阵。如果您将前两个概率(对于状态“S”)更改为零以外,baumwelch 算法就可以正常工作。我使用 RStudio 运行它。

于 2012-06-13T03:01:16.647 回答
1

当“initHMM”中定义的一个或多个符号没有出现在观察中时,就会发生这种情况。

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

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

于 2015-11-10T16:59:59.137 回答