我在理解如何使用HMM包中的baumWelch
方法时遇到了问题。
根据documentation,我们首先必须初始化我们的隐马尔可夫模型
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的经典论文中的描述,向前和向后概率是在一系列观测数据上计算的,例如上面代码中的变量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方法提供这样的矩阵
发布于 2017-06-28 09:25:16
据我所知,HMM包中的baumWelch
函数只接受一个观察序列作为它的辅助参数。如果您的训练数据包含多个序列,您可以尝试使用aphid包,它支持使用多序列列表进行Baum Welch和Viterbi模型训练。免责声明:我写了这个包,部分原因是我遇到了同样的问题。
发布于 2017-06-27 04:31:33
虽然我之前问过这个问题,但当我对同样的事情感到困惑时,我发现了这个问题。
引用An Intoduction to Hidden Markov Models and Bayesian Networks第7页中的Ghahramani:
“如果观察向量包括贝叶斯网络中的所有变量,则对数似然函数中的每个项都会进一步因数为...”see equation here
本质上,根据我的理解,因为网络中的每个节点只依赖于它的父节点,所以你不需要将训练向量分离到一个矩阵中,而是可以使用一个完整的训练向量。我想唯一的问题是在一个新的训练向量的开始,但你可以通过创建一个特殊的开始状态"*“来克服这个问题,它总是新序列中的第一个状态。
https://stackoverflow.com/questions/43809239
复制相似问题