Zhu*_*arb 17 machine-learning time-series hidden-markov-models
我试图使用隐马尔可夫模型(HMM)来解决一个问题,即我在每个时间点都有不同的观察变量(Yti)和一个隐藏变量(Xt).为清楚起见,让我们假设所有观察到的变量(Yti)都是分类的,其中每个Yti传达不同的信息,因此可能具有不同的基数.下图给出了一个说明性的例子,其中M = 3.
我的目标是使用Baum-Welch算法从我观察到的变量序列(Yti)中训练HMM的过渡,发射和先验概率.比方说,Xt最初会有2个隐藏状态.
我已经阅读了一些教程(包括着名的Rabiner论文),并阅读了一些HMM软件包的代码,即" MatLab中的HMM工具箱 "和" Python中的hmmpytk包 ".总的来说,我进行了广泛的网络搜索,我所能找到的所有资源 - 仅涵盖了每个时间点只有一个观察变量(M = 1)的情况.这越来越让我觉得HMM不适合具有多个观察变量的情况.
谢谢.
编辑: 在本文中,图中描述的情况被描述为动态朴素贝叶斯,其中 - 在训练和估计算法方面 - 需要对单变量HMM略微扩展Baum-Welch和Viterbi算法.
最简单的方法是让y_is有条件地独立给定,并使模型保持生成x_is
.这导致了平凡的估计量和相对较少的参数,但在某些情况下是一个相当严格的假设(它基本上是朴素贝叶斯分类器的HMM形式).
编辑:这意味着什么.对于每个时间步,我有一个多变量观察y_i = {y_i1...y_in}
.在y_ij
给定x_i的情况下,您视为条件独立,因此:
p(y_i|x_i) = \prod_j p(y_ij | x_i)
Run Code Online (Sandbox Code Playgroud)
然后,您将有效地为隐藏变量x的每个可能值学习一个朴素的贝叶斯分类器.(条件独立在这里很重要:在ys 的无条件分布中存在依赖性).这可以通过HMM的标准EM来学习.
正如一位评论者所说,你也可以把它y_ijs
作为单一观察的连接处理,但如果任何j变量的维数超出微不足道,这将导致很多参数,你需要更多的训练数据.
你特别需要模型生成吗?如果您只是在寻找推理x_is
,那么您可能会更好地使用条件随机字段,通过其特征函数可以具有更复杂的观察,而没有相同的限制性独立假设.