HMM基本原理及其實現(隱馬爾科夫模型)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM