R中的HMM包用法

时间:2018-07-19 04:17:21

标签: r hidden-markov-models

我正在尝试使用HMM包在R中实现以下隐马尔可夫模型的示例:

https://github.com/luisguiserrano/hmm/blob/master/Simple%20HMM.ipynb

这是我的R代码:

states = c("S", "R")
symbols = c("H", "G")
startProbs = c(2/3, 1/3)
transProbs = matrix(c(0.8, 0.4, 0.2, 0.6), 2)
emissionProbs = matrix(c(0.8, 0.4, 0.2, 0.6), 2)
# Initialise HMM
hmm = initHMM(States = states, Symbols = symbols, startProbs = startProbs, transProbs = transProbs, emissionProbs = emissionProbs)

observations = c("H", "H", "G", "G", "G", "H")

print(exp(forward(hmm,observations)))

viterbi = viterbi(hmm,observations)
print(viterbi)

但是,我得到了不同的结果:

> print(exp(forward(hmm,observations)))
states         1          2          3          4           5           6
     S 0.5333333 0.38400000 0.06741333 0.01662293 0.005408085 0.008057214
     R 0.1333333 0.07466667 0.07296000 0.03435520 0.014362624 0.003879677

> print(viterbi)
"S" "S" "R" "R" "R" "S"

结果应为:

"S" "S" "S" "R" "R" "S"

出什么问题了?

1 个答案:

答案 0 :(得分:2)

HMM软件包使用略有不同的算法来计算最可能的状态路径。您可以阅读有关实现here的信息。

例如,在给定的示例中,周二Sunny的前进概率= max(0.533 * 0.8 * 0.8,0.133 * 0.4 * 0.8)= 0.341

但是,使用forward()包中的函数HMM,我们可以获得: 0.533 * 0.8 * 0.8 + 0.133 * 0.4 * 0.8 = 0.384。

因此,状态顺序是不同的。