天天看点

HMM的介绍及实现

HMM基本原理

HMM的定义:

HMM的介绍及实现

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

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

下图是一个典型的HMM:

HMM的介绍及实现

HMM有三个典型的问题:

HMM的实现

C语言版:

  1、 HTK(Hidden Markov Model Toolkit):

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

  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.

  3、 UMDHMM(Hidden Markov Model Toolkit):

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

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

C++版:

  以上两个是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.

Python版:

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).

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.

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.

CDHMM C++版:

    本文转自阿凡卢博客园博客,原文链接:http://www.cnblogs.com/luxiaoxun/archive/2013/05/12/3074510.html,如需转载请自行联系原作者