天天看點

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,如需轉載請自行聯系原作者