HMM(隐马尔可夫模型入门)
2016-06-30 22:43
369 查看
一、基本概念
隐马尔可夫模型
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的状态序列叫状态序列,每一个状态生成一个观测,由此生成的观测的随机序列叫观测序列。注意:这和分类有区别,这个一个序列。即P(Y|X)中X和Y都是序列。。
一些参数
隐马尔可夫模型由初始概率分布、状态转移概率分布、观测概率分布确定。
设Q是所有可能的状态集合,V是所有可能的观测的集合。
Q=q1,q2,....,qNV=v1,v2,...,vM
I是长度为T的状态序列, O是对应的观测序列。
I=i1,i2,..,iTO=o1,o2,...,oT
A是状态转移概率矩阵
A=[aij]N×N 其中 aij=P(it+1=qj|it=qi)
B是观测概率矩阵
B=[bj(k)]N×M 其中 bj(k)=P(Ot=vk|it=qj)
π是初始状态,其中πi=P(i1=qi)
综上,马尔科夫模型的参数组成λ
λ=(A,B,π)
隐马尔可夫模型的2个假设
齐次马尔科夫假设。即当前状态只与前N的状态有关。N = 1便是一阶马尔科夫模型
观测独立性假设,即任意时刻观测的观测只依赖于该时刻的马尔科夫状态,与其它状态无关。
P(ot|iT,ot,iT−1,ot−1,...,i1,o1)=p(ot|it)
-
隐马尔可夫模型的3个问题(最重要)
概率计算问题,即求概率P(O|λ)
参数学习问题(训练过程),即求的模型参数λ使得在该模型下的观测序列(整个语料)的概率P(O|λ)最大。一般最大似然求解(最大似然就是生成序列的概率)
预测问题(解码),即已知模型参数λ和给定的观测序列O=o1,...,oT,求出条件概率P(I|O)最大的状态序列I=(i1,..,it)。即最好的状态序列。。。。
接下来就讲解怎么求概率?怎么训练参数?怎么解码?
首先是怎么求概率P(O|λ)?最直接的方法大家应该能想到,方法如下
因为之前已经定义的隐马尔科夫模型的2个假设如上。所以当给定状态序列I=(i1,..,it)时,求其发生的概率P(I|λ)=πi1ai1i2ai2i3...ait−1it
对于给定状态序列I=(i1,..,it),求观测序列O=o1,...,oT的概率P(O|I,λ),P(O|I,λ)=bi1(o1)bi2(o2)...biT(oT)。因为之前已经说过,当前观测只与当前时刻的隐状态有关,所以与其它观测两两独立,即可连乘。
最终可以求得P(O|λ)= ∑IP(O|I,λ)P(I|λ)。I是所有可能的状态序列。比如说一共有N个状态,序列长度为T,则一共有NT个序列,时间复杂度为O(TNT)
上述直接计算方法显然台low了。我们可以想到,其实有好多序列的子序列都重复计算了,比如序列L1和L2, L1 i1,i2,...,iT−1,iT,L2的前T-1个状态与L1一样,那么就不需要计算了,拿个东西保存一下即可。这便引入前向后向算法(很简单的动态规划算法)。
前向算法。
后向算法
下一讲接续介绍!!!!!!
-
隐马尔可夫模型
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的状态序列叫状态序列,每一个状态生成一个观测,由此生成的观测的随机序列叫观测序列。注意:这和分类有区别,这个一个序列。即P(Y|X)中X和Y都是序列。。
一些参数
隐马尔可夫模型由初始概率分布、状态转移概率分布、观测概率分布确定。
设Q是所有可能的状态集合,V是所有可能的观测的集合。
Q=q1,q2,....,qNV=v1,v2,...,vM
I是长度为T的状态序列, O是对应的观测序列。
I=i1,i2,..,iTO=o1,o2,...,oT
A是状态转移概率矩阵
A=[aij]N×N 其中 aij=P(it+1=qj|it=qi)
B是观测概率矩阵
B=[bj(k)]N×M 其中 bj(k)=P(Ot=vk|it=qj)
π是初始状态,其中πi=P(i1=qi)
综上,马尔科夫模型的参数组成λ
λ=(A,B,π)
隐马尔可夫模型的2个假设
齐次马尔科夫假设。即当前状态只与前N的状态有关。N = 1便是一阶马尔科夫模型
观测独立性假设,即任意时刻观测的观测只依赖于该时刻的马尔科夫状态,与其它状态无关。
P(ot|iT,ot,iT−1,ot−1,...,i1,o1)=p(ot|it)
-
隐马尔可夫模型的3个问题(最重要)
概率计算问题,即求概率P(O|λ)
参数学习问题(训练过程),即求的模型参数λ使得在该模型下的观测序列(整个语料)的概率P(O|λ)最大。一般最大似然求解(最大似然就是生成序列的概率)
预测问题(解码),即已知模型参数λ和给定的观测序列O=o1,...,oT,求出条件概率P(I|O)最大的状态序列I=(i1,..,it)。即最好的状态序列。。。。
接下来就讲解怎么求概率?怎么训练参数?怎么解码?
首先是怎么求概率P(O|λ)?最直接的方法大家应该能想到,方法如下
因为之前已经定义的隐马尔科夫模型的2个假设如上。所以当给定状态序列I=(i1,..,it)时,求其发生的概率P(I|λ)=πi1ai1i2ai2i3...ait−1it
对于给定状态序列I=(i1,..,it),求观测序列O=o1,...,oT的概率P(O|I,λ),P(O|I,λ)=bi1(o1)bi2(o2)...biT(oT)。因为之前已经说过,当前观测只与当前时刻的隐状态有关,所以与其它观测两两独立,即可连乘。
最终可以求得P(O|λ)= ∑IP(O|I,λ)P(I|λ)。I是所有可能的状态序列。比如说一共有N个状态,序列长度为T,则一共有NT个序列,时间复杂度为O(TNT)
上述直接计算方法显然台low了。我们可以想到,其实有好多序列的子序列都重复计算了,比如序列L1和L2, L1 i1,i2,...,iT−1,iT,L2的前T-1个状态与L1一样,那么就不需要计算了,拿个东西保存一下即可。这便引入前向后向算法(很简单的动态规划算法)。
前向算法。
后向算法
下一讲接续介绍!!!!!!
-
相关文章推荐
- 使用Screen后台执行任务,防止SSH中断
- 【Unity闲谈】如何把写好的插件卖到AssetStore
- 驱动程序-字符驱动
- Java中对于所有对象都通用的方法之——equals
- Handler的post(Runnable)
- tasklet
- 自己封装的一个JS分享组件
- openstack----01_安装虚拟机
- libsvm 在vs中的应用
- QT里面 出现exited with code 255
- Contiki高级程序设计(二)
- 设计模式之单例模式
- 【Database】应用
- c++ cin.getline, getline等比较
- Favicon.ico
- 树莓派2 摄像头监控配置-亲测有效
- linux磁盘限额配置:quota命令
- 常用报表工具
- JavaSE复习_10 多线程复习
- linux磁盘限额配置:quota命令