我需要一些关于此错误的帮助。我正在尝试使用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;这是错误。
任何人都可以帮助我。我不确定这个模块有什么问题。
答案 0 :(得分:1)
试试看看你的初始化部分。概率。矩阵。如果你将前两个probs(对于状态“S”)改为零以外,baumwelch算法工作得很好。我用RStudio运行它。
答案 1 :(得分:1)
当'initHMM'中定义的一个或多个符号未出现在观察中时,会发生这种情况。
在您的情况下,您定义符号“i”和“m”,但您的观察仅包含“m”。
在调用'baumWelch'之前添加一些“i”或在调用'initHMM'时删除符号。