zoukankan      html  css  js  c++  java
  • HMM的介绍及实现

    HMM基本原理

    Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。马尔可夫链是时间和状态参数都离散的马尔可夫过程。HMM是在Markov链的基础上发展起来的,由于实际问题比Markov链模型所描述的更为复杂,观察到的时间并不是与状态一一对应的,而是通过一组概率分布相联系,这样的模型称为HMM。HMM是双重随机过程:其中之一是Markov链,这是基本随机过程,它描述状态的转移,是隐含的。另一个随机过程描述状态和观察值之间的统计对应关系,是可被观测的。

    HMM的定义:

    HMM实际上是分为两个部分的,一是马尔可夫链,由参数,A描述,它利用一组与概率分布相联系的状态转移的统计对应关系,来描述每个短时平稳段是如何转变到下一个短时平稳段的,这个过程产生的输出为状态序列;二是一个随机过程,描述状态与观察值之间的统计关系,用观察到的序列来描述隐含的状态,由B描述,其产生的输出为观察值序列。

    HMM根据其结构的不同可以分为多种类型。根据状态转移概率矩阵的不同,HMM可分为各态遍历模型、从左到右模型、并行路径从左到右模型和无跳转从左到右模型等。根据观察值概率不同,HMM可分为离散HMM、半连续HMM、连续HMM等。

    下图是一个典型的HMM:

    HMM有三个典型的问题:

    • 已知模型参数,计算某一特定输出序列的概率,通常使用forward算法解决。
    • 已知模型参数,寻找最可能的能产生某一特定输出序列的隐含状态的序列,通常使用Viterbi算法解决。
    • 已知输出序列,寻找最可能的状态转移以及输出概率,通常使用Baum-Welch算法以及Reversed Viterbi算法解决。

    HMM的实现

    C语言版:

      1、 HTK(Hidden Markov Model Toolkit):

      HTK是英国剑桥大学开发的一套基于C语言的隐马尔科夫模型工具箱,主要应用于语音识别、语音合成的研究,也被用在其他领域,如字符识别和DNA排序等。HTK是重量级的HMM版本。

      HTK主页:http://htk.eng.cam.ac.uk/

      2、 GHMM Library:

      The General Hidden Markov Model library (GHMM) is a freely available LGPL-ed C library implementing efficient data structures and algorithms for basic and extended HMMs.

      GHMM主页:http://www.ghmm.org/

      3、 UMDHMM(Hidden Markov Model Toolkit):

      Hidden Markov Model (HMM) Software: Implementation of Forward-Backward, Viterbi, and Baum-Welch algorithms.

      这款属于轻量级的C语言HMM版本。

      UMDHMM主页:http://www.kanungo.com/software/software.html

    C++版:

      1、http://www.cs.ualberta.ca/~lindek/hmm.htm

      2、http://www.shokhirev.com/nikolai/abc/alg/hmm/hmm.html

      以上两个是C++版本的,但是实现的是离散型的HMM。

    Java版:

      Jahmm Java Library (general-purpose Java library):

      Jahmm (pronounced “jam”), is a Java implementation of Hidden Markov Model (HMM) related algorithms. It’s been designed to be easy to use (e.g. simple things are simple to program) and general purpose.

      Jahmm主页:http://code.google.com/p/jahmm/

    Python版:

      http://www.biocomp.unibo.it/piero/PHMM/

    Malab版:

      Hidden Markov Model (HMM) Toolbox for Matlab:This toolbox supports inference and learning for HMMs with discrete outputs (dhmm’s), 

    Gaussian outputs (ghmm’s), or mixtures of Gaussians output (mhmm’s).

      Matlab-HMM主页:http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html

    Common Lisp版:

      CL-HMM Library (HMM Library for Common Lisp):

      Simple Hidden Markov Model library for ANSI Common Lisp. Main structures and basic algorithms implemented. Performance speed comparable to C code. It’s licensed under LGPL.

      CL-HMM主页:http://www.ashrentum.net/jmcejuela/programs/cl-hmm/

    Haskell版:

      The hmm package (A Haskell library for working with Hidden Markov Models):A simple library for working with Hidden Markov Models. Should be usable even by people who are not familiar with HMMs. Includes implementations of Viterbi’s algorithm and the forward algorithm.

      Haskell-HMM主页:http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmm

    CDHMM C++版:

      连续HMM的C++实现:CHMM.rar

    GitHub代码:https://github.com/luxiaoxun/KMeans-GMM-HMM

    作者:阿凡卢
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    MapXtreme中鹰眼图与本地地图联动
    MapXtreme删除图层中某个对象
    winform textbox屏蔽中文输入法
    爬虫日记之美味汤的各种属性值的运用
    爬虫日记之robots协议
    爬虫日记之图片爬取和ip查询
    爬虫日记之关键字搜索引擎爬取
    爬虫之修改请求头
    爬虫第一步,re模块来铺路
    三个数据分析的模块
  • 原文地址:https://www.cnblogs.com/luxiaoxun/p/3074510.html
Copyright © 2011-2022 走看看