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

 

作者:阿凡卢

出处:http://www.cnblogs.com/luxiaoxun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2025-01-21 08:08:32

HMM的介绍及实现的相关文章

人机交互新进展:LFR-DFSMN语音识别声学模型介绍

语音识别技术是人机交互技术的重要组成部分,而语音识别中的声学模型是语音识别技术中的核心所在,堪称重中之重.阿里巴巴iDST智能语音交互团队最新的LFR-DFSMN模型相对于之前的LFR-LCBLSTM模型可以达到训练加速3倍.识别加速2倍.识别错误率降低20%和最终模型大小压缩50%的效果,实现了语音识别的迭代速度.识别成本.服务质量的全面提升. 一.语音识别背景介绍   语音识别技术一直都是人机交互技术的重要组成部分.有了语音识别技术,机器就可以像人类一样听懂说话,进而能够思考.理解和反馈.近

一文搞懂HMM(隐马尔可夫模型)

什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有规则的运动状态.熵的中文意思是热量被温度除的商.负熵是物质系统有序化,组织化,复杂化状态的一种度量. 熵最早来原于物理学. 德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越大. 一滴墨水滴在清水中,部成了一杯淡蓝色溶液 热水晾在空气中

中文分词之HMM模型详解

文章转载自: http://yanyiwu.com/work/2014/04/07/hmm-segment-xiangjie.html HMM(Hidden Markov Model): 隐式马尔科夫模型. HMM模型可以应用在很多领域,所以它的模型参数描述一般都比较抽象,以下篇幅针对HMM的模型参数介绍直接使用它在中文分词中的实际含义来讲: HMM的典型介绍就是这个模型是一个五元组: StatusSet: 状态值集合 ObservedSet: 观察值集合 TransProbMatrix: 转移

学点算法搞安全之HMM(下篇)

                             学点算法搞安全之HMM(下篇)     前言 上篇我们介绍了HMM的基本原理以及常见的基于参数的异常检测实现,这次我们换个思路,把机器当一个刚入行的白帽子,我们训练他学会XSS的攻击语法,然后再让机器从访问日志中寻找符合攻击语法的疑似攻击日志. 通过词法分割,可以把攻击载荷序列化成观察序列,举例如下: 词集/词袋模型 词集和词袋模型是机器学习中非常常用的一个数据处理模型,它们用于特征化字符串型数据.一般思路是将样本分词后,统计每个词的频率

学点算法搞安全之HMM(上篇)

学点算法搞安全之HMM(上篇)         前言 隐式马尔可夫(HMM),也称韩梅梅,广泛应用于语音识别.文本处理以及网络安全等领域,2009年I Corona ,D Ariu ,G Giacinto三位大神关于HMM应用于web安全领域的研究论文,让HMM逐渐被各大安全厂商重视. 本篇重点介绍HMM最常见同时也比较基础的基于url参数异常检测的应用,后继文章将介绍HMM结合NLP技术在XSS.SQL.RCE方面的应用."多一个公式少一半读者",所以霍金的<时间简史>和

PhotoShop中正片负片叠底的原理介绍

关于正片叠底,正片,负片,通道,色相,色相环等等的相关理论一堆,大家可以从网上查到,原理就不讲了. 感觉单通道正片叠底效果应该属于填充色一类,但却与填充色又有很大的差异,与照片滤镜功能也有所差异,运用得当,最大的优点是在叠底后仍能保持比较好的照片通透度,而且简单易用,特别适合不太熟悉PS操作的朋友,此类方法运用广泛,配合起来使用比较方便,慢慢介绍吧. photoshop教程注:以下介绍的为RGB模式下的叠底,与CMYK模式下有所区别 方法一,单通道正片叠底 例一,叠出阳光色.提示:图片应尽量少漏

PS蒙版详细介绍

教程像飞特的朋友们介绍PS的蒙版原理和实例的运用,蒙版,通道,历史记录,图层样式,混合模式(已经开篇讲解了),智能对象,智能滤镜,嵌入图层,动作,其它,后期我针对这些,讲讲应用,希望大家有更深的感受.享受学习理论的乐趣. 先从蒙版说起吧. 讲到蒙版,要先了解下蒙版的由来.相信你一定能深刻领悟蒙版的使用技巧,看下提纲: 1,蒙版的由来 2,快速蒙版与选区 3,图层蒙版 4,PS CS5的蒙版新用法 一,蒙版的由来 犹记当年计划生育推行的时候,墙上,电线杆上,到处都是大红标语,如"计划生育好&quo

andriod平台"点九" .9.png设计介绍

"点九"是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形. 我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真. OK,在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示

Python中字典的基本知识初步介绍

  这篇文章主要介绍了Python中字典的基本知识初步介绍,是Python入门中的基础知识,需要的朋友可以参考下 字典是可变的,并且可以存储任意数量的Python对象,包括其他容器类型另一个容器类型.字典包括键对(称为项目)及其相应的值. Python字典也被称为关联数组或哈希表.字典的一般语法如下: ? 1 dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 可以用下面的方式创建字典: ? 1 2 dict1 = { 'abc':