R中的隐马尔可夫模型(前向算法)

机器算法验证 r 隐马尔可夫模型
2022-04-05 12:56:41

我研究了其中一些资源,并且知道有一个名为HMM的 R 包。有人可以用 R 中的一个简单示例来解释“前向算法”的有用性吗?

终于找到一本好书

时间序列的隐马尔可夫模型:使用 R 的介绍(Chapman & Hall CRC Monographs on Statistics & Applied Probability) Walter Zucchini, Iain L. MacDonald

1个回答

X是一个观察序列和λ是一个隐马尔可夫模型(HMM)。然后前向算法确定Pr(X|λ), 实现序列的可能性X来自 HMMλ.

用更简单的英语术语......假设你训练了你的 HMMλ你想看看它的可能性有多大λ产生了一些序列X. 前向算法将为您执行此操作。如果您获得相对较高的可能性,则很有可能λ生产X. 如果你有两个 HMMλ1λ2,您可能会得出结论,可能性较高的模型是解释您的最佳模型X.

让我们看一些 R 代码...首先我们将初始化一个 HMM。(我从 CRAN http://cran.r-project.org/web/packages/HMM/HMM.pdf上的 HMM 手册中得到这个)....

require('HMM')
# Initialise HMM
hmm = initHMM(c("A","B"), c("L","R"), transProbs=matrix(c(.8,.2,.2,.8),2), emissionProbs=matrix(c(.6,.4,.4,.6),2))    
print(hmm)
# Sequence of observations
observations = c("L","L","R","R")

这是一个 HMM,其中有 80% 的机会停留在它当时处于的任何隐藏状态t当它过渡到时间t+1. 它有两个隐藏状态 A 和 B。它发出两个观测值 L 和 R。发射概率包含在 中emissionProbs我们存储观察序列Xobservations.

logForwardProbabilities = forward(hmm,observations)
forwardProbabilities = exp(logForwardProbabilities)

forwardProbabilities现在是一个矩阵,包含实现观察序列的概率t并最终进入状态i. 隐藏状态i在行和时间t在列中。如果我们想要整个序列的概率,我们使用第 4 列,因为它是最后一个时间步长。得到的 2 元素行向量包含以 A 结尾和以 B 结尾的概率。它们的总和是实现的总概率X.

finalAnswer = sum(forwardProbabilities[,4])