这是一个非常重要的模型,凡是学统计学、机器学习、数据挖掘的人都应该彻底搞懂。

python包:

hmmlearn 0.2.0

https://github.com/hmmlearn/hmmlearn

参考链接:

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

如何用简单易懂的例子解释隐马尔可夫模型? - 知乎

有些文章里面已经介绍得非常清楚了,只是需要在项目中进行实践,然后做一下总结。


数学之美里有一章专门讲了隐含马尔科夫模型,讲得非常的通俗易懂。

在自然语言处理方面得到了广泛的应用,此外还有语音识别,机器翻译。

通信是一个编码、传输和解码的过程。自然语言的处理应该使用通信原理解决,而不是在语言的语法和语义上。

通信六要素:信息源、信道、接受者、信息、上下文和编码。

解码就是通过接受到的信号(o)还原出发送的信号(s)。

语音识别就是听话的人去采说话人要表达的意思,机器翻译也是同理。

上式等价于:

而上面的分母可以省略,因为一旦信息产生了,它就不会变了,事件就是一个固定的事件,一个固定事件发生的概率必然是一个常数,对这个公式而言它就可以省略了。  余下的式子就可以通过隐马尔科夫模型来求解。

马尔科夫链:概率论的研究对象从静态的随机变量转移到动态的序列随机变量上,一个简化的假设:随机过程中每个状态的概率分布只与它的前一个状态有关,即:

马尔科夫链:我们已经知道一个马尔科夫链的所有的状态,让它随机运行,随机初始化,后面随机选择,运行完了会产生一个状态序列,可以因此估计转移概率。

隐马尔科夫模型:状态是不可见的,无法通过观察状态序列推算转移概率,但它会输出一个结果序列(仅与状态相关,独立输出假设),

可以计算出某个特定状态序列(s)产生输出序列(o)的概率:

等价于:

这就与前面的式子联系在了一起,可以解码问题就得到了解决。

隐马尔可夫模型有三个问题:

  1. 给定一个模型(参数),计算某个特定输出序列的概率;(forward-backward算法)
    1. 给定模型和某个特定的输出序列,找到最可能的状态序列;(维特比算法)  解码算法
  2. 给定观测数据,估计隐马尔科夫模型的参数。(鲍姆-韦尔奇算法(Baum-Welch)) 训练算法

需要知道:状态转移概率,生成概率等模型参数,估计这两个参数称为模型的训练。

有两种训练方法:一是有监督训练方法;一是无监督训练。

有监督的需要得到人工的标注训练集,成本高,而且一些情况下无法得到训练集,如语音识别。

可行的方式是仅仅通过观察信号(o)推算出模型的这两个参数,使用鲍姆-韦尔奇算法(Baum-Welch)

鲍姆-韦尔奇算法(Baum-Welch):

初始化可行的模型参数,在此模型下,计算出产生观察信号(o)的所有路径及其概率,作为标注的训练数据,计算出新的模型参数,此时迭代后的模型参数一定优于原来的模型参数。不断迭代,直至最后模型质量不再提升。

这也是个期望最大化的过程,简称EM过程,目前只能寻找出局部最优解,除非目标函数是凸函数。


待续~

HMM隐马尔科夫模型的更多相关文章

  1. 自然语言处理(1)-HMM隐马尔科夫模型基础概念(一)

    隐马尔科夫模型HMM 序言 文本序列标注是自然语言处理中非常重要的一环,我先接触到的是CRF(条件随机场模型)用于解决相关问题,因此希望能够对CRF有一个全面的理解,但是由于在学习过程中发现一个算法像 ...

  2. HMM 隐马尔科夫模型

    参考如下博客: http://www.52nlp.cn/itenyh%E7%89%88-%E7%94%A8hmm%E5%81%9A%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8 ...

  3. HMM基本原理及其实现(隐马尔科夫模型)

    HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...

  4. 基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...

  5. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

  6. HMM 自学教程(四)隐马尔科夫模型

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  7. 隐马尔科夫模型(HMM)的概念

    定义隐马尔科夫模型可以用一个三元组(π,A,B)来定义:π 表示初始状态概率的向量A =(aij)(隐藏状态的)转移矩阵 P(Xit|Xj(t-1)) t-1时刻是j而t时刻是i的概率B =(bij) ...

  8. 猪猪的机器学习笔记(十七)隐马尔科夫模型HMM

    隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来 ...

  9. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

随机推荐

  1. 解决浏览器使用<pre></pre>时不换行

    <!-- 解决火狐浏览器中pre标签不换行 --> <style type="text/css"> pre { white-space: pre-wrap; ...

  2. EasyUI扩展方法

    EasyUI扩展方法: 1.我想指定textarea的行,但editor:{type:'textarea', options: {rows:'4'}}这样写不行.请问大家怎么配置才是指定行的啊? 配置 ...

  3. 炮(cannon)

    炮(cannon)[题目描述] 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称“炮打隔子”. 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘 ...

  4. nuget使用

    我如何获得的NuGet安装/更新的packages.config所有的软件包? nuget我有一个在它的多个项目的解决方案.大多数第三方引用的缺失,但也有packages.config文件为每个项目. ...

  5. 【Thread】多线程的异常处理?

    线程中处理异常是个头疼的问题,在异步的代码中,如何将异常捕获. 捕获异常后,将异常反馈给开发者,或用户.一般来说,反馈给开发者,多数方式在是日志中打印异常日志:而反馈给用户,多数是在界面上友好提示(比 ...

  6. 第一课 android环境搭建

    android环境搭建需要的工具: 1.JDK 2.eclipse 3.SDK 4.ADT

  7. C# this.invoke()作用 多线程操作UI

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); //测试的窗体 public class ...

  8. C#语法基础用法Dictionary排序

    Dictionary排序 1.先看效果图: 2.核心逻辑如下: Dictionary<int, string> list = new Dictionary<int, string&g ...

  9. (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。

    package a; public class Jidongche { private String chepaihao; private int chesu; private double zaiz ...

  10. iOS深入学习(UITableView系列2:reloadData)

    接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...