首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中使用HMM包

在R中使用HMM包
EN

Stack Overflow用户
提问于 2017-05-05 23:57:49
回答 2查看 2.6K关注 0票数 0

我在理解如何使用HMM包中的baumWelch方法时遇到了问题。

根据documentation,我们首先必须初始化我们的隐马尔可夫模型

代码语言:javascript
运行
复制
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”,我们也有传输和发射概率。

到目前为止一切都很好,但是现在教程创建了观察值列表:

代码语言:javascript
运行
复制
observations = sample(c("L","R"),prob=c(.8,.2),size=100,replace=TRUE)

这是作为观察值列表的一维向量。根据Rabiner的经典论文中的描述,向前和向后概率是在一系列观测数据上计算的,例如上面代码中的变量observations。也就是说,我们需要一个这样的observations矩阵,以便甚至远程训练任何东西。在这里我该怎么做呢?

编辑:

在上面的例子中,排放是"L“和"R”。应该用这些排放创建一个观察序列O。例如O= LRRRLLLRR等假设长度为t

在前向算法中使用这种类型的观测,给定一个完整的马尔可夫模型,并且观测序列O将产生一个维数为n×t的矩阵,其中n是我们的HMM中的状态数。这种矩阵的i_j个_th元素被解释为“在时间j,已经产生了观测序列的前j个元素并且处于状态i”。

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

我认为,Baum-Welch的输入应该是观测序列的列表,而不是排放的列表。在我的版本中,矩阵输入的维数应该是t乘以m,其中t是观测序列的长度,m是这样的序列的数量。

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

EN

回答 2

Stack Overflow用户

发布于 2017-06-28 09:25:16

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

票数 1
EN

Stack Overflow用户

发布于 2017-06-27 04:31:33

虽然我之前问过这个问题,但当我对同样的事情感到困惑时,我发现了这个问题。

引用An Intoduction to Hidden Markov Models and Bayesian Networks第7页中的Ghahramani:

“如果观察向量包括贝叶斯网络中的所有变量,则对数似然函数中的每个项都会进一步因数为...”see equation here

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43809239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档