隐马尔可夫模型的非参数贝叶斯方法

bayesian-hmm的Python项目详细描述


贝叶斯隐马尔可夫模型

Build Status

该代码实现了一个非参数贝叶斯隐马尔可夫模型, 有时称为层次dirichlet过程隐马尔可夫 模型(HDP-HMM),或无限隐马尔可夫模型(IHMM)。这个包有能力 对于标准的非参数贝叶斯hmm,以及粘性hdphmm (见参考文献)。通过马尔可夫链蒙特卡罗估计进行推断, 包括对潜在序列重采样步骤的有效波束采样, 以及在参数重采样时尽可能多线程。

安装

当前版本仅用于开发,建议仅用于 意识到风险的人。它可以通过pypi安装:

pip install bayesian-hmm

隐马尔可夫模型

Hidden Markov Models 是强大的时间序列模型,它使用潜在变量来解释观测到的发射序列。 其结果是一个时间序列数据的生成模型,该模型通常易于处理和理解。 假定隐级数是一个马尔可夫链,它需要一个起始分布和过渡分布。 以及将排放与潜在状态联系起来的排放分布。 传统的参数隐马尔可夫模型对隐序列马尔可夫链的状态数是固定的。 层次dirichlet过程隐马尔可夫模型(包括由bayesian_hmm包实现的模型)允许 作为拟合过程的一部分,潜在状态的数量会发生变化。 这是通过在潜在状态开始和转移分布上使用层次dirichlet先验来实现的, 并对模型的潜在状态进行mcmc采样以估计模型参数。

用法

基本用法允许我们提供发射序列列表,初始化hdphmm,并执行mcmc估计。 下面的例子构造了一些人工观测序列,并使用一个简单的mcmc估计步骤来估计 模型参数。 我们使用中等大小的数据来展示包的速度:50个长度为200的序列,500个mcmc步进。

importbayesian_hmm# create emission sequencesbase_sequence=list(range(5))+list(range(5,0,-1))sequences=[base_sequence*20for_inrange(50)]# initialise object with overestimate of true number of latent stateshmm=bayesian_hmm.HDPHMM(sequences,sticky=False)hmm.initialise(k=20)# estimate parameters, making use of multithreading functionalityresults=hmm.mcmc(n=500,burn_in=100)# print final probability estimates (expect 10 latent states)hmm.print_probabilities()

bayesian_hmm包可以处理更高级的用法,包括:

  • 多个发射序列,
  • 变长排放系列,
  • 任何分类排放分布,
  • 多线程mcmc估计,和
  • 初始概率估计,它与转移概率共享一个dirichlet先验。

推断

该代码使用mcmc方法进行参数估计。 我们对潜在序列使用有效的波束采样,以及 Metropolis Hastings对每个超参数进行采样。 我们利用概率估计近似真实重采样步骤。 根据所有感兴趣的状态计算,而不是 不调整概率 对于当前变量重采样步骤(而不是移除当前) 抽样估计的变量。

悬而未决的问题和今后的工作

我们有以下几项需要优先改进:

  • 扩展包以包含标准的非贝叶斯hmm函数,如baum-welch和viterbi算法
  • 考虑不影响模型概率的缺失或NULL排放
  • 包括使用超参数的极大似然估计的功能 (目前只有Metropolis Hastings可以对超参数重新采样)

参考文献

Van Gael,J.,Saatci,Y.,Teh,Y.W.,&Ghahramani,Z.(2008年7月)。无限隐马尔可夫模型的波束抽样。第25届机器学习国际会议记录(第1088-1095页)。ACM公司。

Beal,M.J.,Ghahramani,Z.,和Rasmussen,C.E.(2002年)。无限隐马尔可夫模型。神经信息处理系统进展(第577-584页)。

Fox,E.B.,Sudderth,E.B.,Jordan,M.I.,和Willsky,A.S.(2007年)。粘性hdp-hmm:bayesian nonp具有持续状态的参数隐马尔可夫模型。ARXIV预印本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用servlet的正确方法是什么?   java Android ListView选中所有复选框(自定义ResourceCursorAdapter)   java如何在一个活动中正确处理多个片段交互侦听器?   java jUnit和忽略继承的测试   具有多个权限的java ActivityResultLauncher   Java:我可以通过应用程序将客户端重定向到loadbalancer后面的同一个会话/节点吗?   java如何使用Hibernate保存具有一对一关系的两个类?   java JEditorPane字体大小设置不准确   java为什么JUnit4导入不被识别,即使JUnit4在我的有效pom中。xml?   多次使用流后的java空映射   JavaSwing中AccessibleContext的用途是什么?   java指定使用T的类   java查找twitter4j转发速率限制   枚举的Java数组(类)   java通过Maven build排除了一些类