在R中使用HMM包

在R中使用HMM包,r,hidden-markov-models,R,Hidden Markov Models,我很难理解如何在包中使用baumWelch方法 根据这个模型,我们首先要初始化我们的隐马尔可夫模型 hmm = initHMM(c("A","B"), c("L","R"), transProbs=matrix(c(.8,.2,.2,.8),2), emissionProbs=matrix(c(.6,.4,.4,.6),2) 这意味着状态被命名为A,B,发射被命名为L和R,我们也有发射概

我很难理解如何在包中使用baumWelch方法

根据这个模型,我们首先要初始化我们的隐马尔可夫模型

hmm = initHMM(c("A","B"), c("L","R"), transProbs=matrix(c(.8,.2,.2,.8),2),
              emissionProbs=matrix(c(.6,.4,.4,.6),2)
这意味着状态被命名为A,B,发射被命名为L和R,我们也有发射概率和发射概率

到目前为止还不错,但本教程现在创建了观察列表:

observations = sample(c("L","R"),prob=c(.8,.2),size=100,replace=TRUE)
这是一个一维向量,作为观察值列表。根据Rabiner的经典论文中的描述,前向概率和后向概率是根据一系列观测值计算的,如上述代码中的变量观测值。i、 我们需要一个这样的观察矩阵,以便甚至远程训练任何东西。我在这里怎么做

编辑:

在上述示例中,排放物为L和R。应使用这些排放物创建观察序列O。e、 g.O=lrrlllrr等。假设长度为t

在正向算法中使用这种类型的观测,该算法给出一个完整的马尔可夫模型,观测序列O将生成一个维数为nx t的矩阵,其中n是HMM中的状态数。这种矩阵的第i j _元素被解释为在时间j,生成观测序列的前j个元素并处于状态i

现在,在Baum-Welch训练算法中使用了向前、向后和其他几种算法

我认为鲍姆·韦尔奇的输入应该是一个观测序列列表,而不是一个排放列表。在我的版本中,矩阵输入的维数应该是t乘以m,其中t是观测序列的长度,m是此类序列的数量


我如何理解这里的输入?是不是我们有100个长度为1的观测序列?如何为HMM中的baumWelch方法提供这样一个矩阵

虽然我刚才被问到了,但当我被同样的事情弄糊涂时,我发现了这个问题

引用第7页的Ghahramani:

如果观测向量包含贝叶斯网络中的所有变量,则对数似然函数中的每一项都会包含更多的因子,如


基本上根据我的理解,因为网络中的每个节点只依赖于它的父节点,所以不需要将训练向量分离成矩阵,而是可以使用一个完整的训练向量。我想唯一的问题是在一个新的训练向量的开始,但是你可以通过创建一个特殊的开始状态*来克服这个问题,它总是一个新序列中的第一个状态。

据我所知,HMM包中的baumWelch函数只接受一个观察序列作为它的第二个参数。如果您的训练数据包含多个序列,您可以尝试aphid软件包,该软件包支持Baum-Welch和Viterbi模型训练以及多个序列列表。免责声明:我编写了这个软件包,部分原因是我遇到了同样的问题。

如果你不了解统计方法的原理,你可能应该询问或。这确实不是一个适用于堆栈溢出的特定编程问题。我理解这些原则,事实上我应该更好地重新表述它。我不认为观察值应该是一个矩阵,它应该是一个不变的事实。我在这里要问的是,是否有人使用过这个包,并且可以澄清如何理解这个特定的示例以及如何编写正确的代码。我仍然不清楚您的问题到底是什么。你不明白他们为什么创建观察向量而不是矩阵?你期望矩阵的维度是什么?它的内容是什么?你到底指的是文件的哪一部分?是的,我不明白为什么有一个排放矢量而不是一个矢量,每个矢量都是一个观测矢量。