HMM理解以及相关算法
来源:互联网 发布:虚拟仿真软件 编辑:程序博客网 时间:2024/06/14 00:39
1、MM
先有马尔可夫模型,再有隐马尔可夫模型,什么叫马尔可夫模型呢,也就是具有马尔可夫性质的模型,而马尔可夫性质用概念来讲,就是:一个过程的“将来”只取决于“现在”,而不取决于“过去”。这就叫马尔可夫性,具有马尔可夫性的过程叫做马尔可夫过程。
(下面来一段数学定义:
设在时刻t的随机变量用St 表示,其观察值用st表示,则如果当S1=s1,S2=s2,……St=st的前提下 ,S(t+1)=s(t+1)的概率为:
当n=1时就是一阶马尔可夫模型了,这个式子就是表明:系统在任一时刻所处的状态只与此时刻的前一时刻所处的状态有关 (注意,跟上面的“过去”、“现在”、“将来”要理解开来),后面还有一些时间无关性、转移概率相关的数学函数,在此先不列出,重在理解马尔可夫模型的思想先。
)
2、HMM
HMM与一阶MM形式差不多,而H则体现在HMM是由两个随机过程组成,一个是状态转移序列,它对应着一个单纯Markov过程;另一个是每次转移时输出的符号组成的符号序列。这两个随机过程,其中状态转移随机过程是不可观测的,只能通过另一个随机过程的输出观察序列观测。
例如,容器与彩球的模型:有若干个容器,每个容器中按已知比例放入各色的彩球(这样,选择了容器后,我们可以用概率来预测取出各种彩球的可能性);我们做这样的实验,实验者从容器中取彩球——先选择一个容器,再从中抓出某一个球,只给观察者看球的颜色;这样,每次取取出的球的颜色是可以观测到的,即o1, o2,…,但是每次选择哪个容器是不暴露给观察者的,容器的序列就组成了隐藏状态序列S1, S2,…Sn。这是一个典型的可以用HMM描述的实验。
以语音识别为例讲讲HMM模型,HMM一般可用六个参数来定义,M={S,O,A,B,PI,F};
S:模型中状态的有限集合,记t时刻模型所处状态为St
O:输出的观察值符号集合,t时刻模型观察到的观察值为Ot
A:状态转移概率的集合
B:输出观测值概率的集合,根据B将HMM分为离散型和连续型
PI:系统初始状态概率的集合
F:系统终了状态的集合
为了便于表示,常用下面的形式表示一个HMM,即简写为M={A,B,pi }。HMM可以分为两部分,一个是Markov链,由pi ,A描述,产生的输出为
状态序列。另一个随机过程,由B描述,产生的输出为观察符号序列。
3、HMM的三个基本问题
a.已知观测序列O={ o1 , o2 …… oT }和模型 U{A,B,pi },如何有效计算在给定模型的条件下产生观测序列O的条件概率P(O/U)最大。
b.已知观测序列O=O={ o1 , o2 …… oT }和模型U {A,B,pi },如何选择相应的在某种意义上最佳的(能最好解释观测序列的)状态序列S。
c.如何调整模型参数U {A,B,pi }以使条件概率P(O|U)最大。
4、3中abc问题的解决方案
a问题由上一篇文章中的前向算法解决
b问题由viterbi算法解决
c问题后续继续说明,其使用的算法是Baum-Welch算法
5、viterbi算法的例子
假设你有一个朋友在外地,每天你可以通过电话来了解他每天的活动。他每天只会做三种活动之一——Walk, Shop, Clean。你的朋友从事哪一种活动的概率与当地的气候有关,这里,我们只考虑两种天气——Rainy, Sunny。我们知道,天气与运动的关系如下:
P(o|state)Rainy
Sunny
Walk
0.1
0.6
Shop
0.4
0.3
Clean
0.5
0.1
例如,在下雨天出去散步的可能性是0.1。
而天气之前互相转换的关系如下,(从行到列)
p(state—>next_state)Rainy
Sunny
Rainy
0.7
0.3
Sunny
0.4
0.6
例如,从今天是晴天而明天就开始下雨的可能性是0.4 。
同时为了求解问题我们假设初始情况:通话开始的第一天的天气有0.6的概率是Rainy,有0.4概率是Sunny。OK,现在的问题是,如果连续三天,你发现你的朋友的活动是:Walk->Shop->Clean(观测序列);那么,如何判断你朋友那里这几天的天气(隐藏状态序列)是怎样的?
解决这个问题的python伪代码如下:
def forward_viterbi(y, X, sp, tp, ep):
T = {}
for state in X:
## prob. V. path V. prob.
T[state] = (sp[state], [state], sp[state])
for output in y:
U = {}
for next_state in X:
total = 0
argmax = None
valmax = 0
for source_state in X:
(prob, v_path, v_prob) = T[source_state]
p = ep[source_state][output] * tp[source_state][next_state]
prob *= p
v_prob *= p
total += prob
if v_prob > valmax:
argmax = v_path + [next_state]
valmax = v_prob
U[next_state] = (total, argmax, valmax)
T = U
## apply sum/max to the final states:
total = 0
argmax = None
valmax = 0
for state in X:
(prob, v_path, v_prob) = T[state]
total += prob
if v_prob > valmax:
argmax = v_path
valmax = v_prob
return (total, argmax, valmax)几点说明:
算法对于每一个状态要记录一个三元组:(prob, v_path, v_prob),其中,prob是从开始状态到当前状态所有路径(不仅仅
是最有可能的viterbi路径)的概率加在一起的结果(作为算法附产品,它可以输出一个观察序列在给定HMM下总的出现概率,即forward算法的输出),v_path是从开始状态一直到当前状态的viterbi路径,v_prob则是该路径的概率。
算法开始,初始化T (T是一个Map,将每一种可能状态映射到上面所说的三元组上) 三重循环,对每个一活动y,考虑下一步每一个可能的状态next_state,并重新计算若从T中的当前状态state跃迁到next_state概率会有怎样的变化。跃迁主要考虑天气转移(tp[source_state][next_state])与该天气下从事某种活动(ep[source_state][output])的联合概率。所有下一步状态考虑完后,要从T中找出最优的选择viterbi路径——即概率最大的viterbi路径,即上面更新Map U的代码U[next_state] = (total, argmax, valmax)。
算法最后还要对T中的各种情况总结,对total求和,选择其中一条作为最优的viterbi路径。
算法输出四个天气状态,这是因为,计算第三天的概率时,要考虑天气转变到下一天的情况。
通过程序的输出可以帮助理解这一过程:{p=p(observation|state)*p(state—>next_state)}
observation=Walk
next_state=Sunny
state=Sunny
p=0.36
triple=(0.144,Sunny->,0.144)
state=Rainy
p=0.03
triple=(0.018,Rainy->,0.018)
Update U[Sunny]=(0.162,Sunny->Sunny->,0.144)
next_state=Rainy
state=Sunny
p=0.24
triple=(0.096,Sunny->,0.096)
state=Rainy
p=0.07
triple=(0.042,Rainy->,0.042)
Update U[Rainy]=(0.138,Sunny->Rainy->,0.096)
observation=Shop
next_state=Sunny
state=Sunny
p=0.18
triple=(0.02916,Sunny->Sunny->,0.02592)
state=Rainy
p=0.12
triple=(0.01656,Sunny->Rainy->,0.01152)
Update U[Sunny]=(0.04572,Sunny->Sunny->Sunny->,0.02592)
next_state=Rainy
state=Sunny
p=0.12
triple=(0.01944,Sunny->Sunny->,0.01728)
state=Rainy
p=0.28
triple=(0.03864,Sunny->Rainy->,0.02688)
Update U[Rainy]=(0.05808,Sunny->Rainy->Rainy->,0.02688)
observation=Clean
next_state=Sunny
state=Sunny
p=0.06
triple=(0.0027432,Sunny->Sunny->Sunny->,0.0015552)
state=Rainy
p=0.15
triple=(0.008712,Sunny->Rainy->Rainy->,0.004032)
Update U[Sunny]=(0.0114552,Sunny->Rainy->Rainy->Sunny->,0.004032)
next_state=Rainy
state=Sunny
p=0.04
triple=(0.0018288,Sunny->Sunny->Sunny->,0.0010368)
state=Rainy
p=0.35
triple=(0.020328,Sunny->Rainy->Rainy->,0.009408)
Update U[Rainy]=(0.0221568,Sunny->Rainy->Rainy->Rainy->,0.009408)
final triple=(0.033612,Sunny->Rainy->Rainy->Rainy->,0.009408)所以,最终的结果是,朋友那边这几天最可能的天气情况是Sunny->Rainy->Rainy->Rainy,它有0.009408的概率出现。而我们算法的另一个附带的结论是,我们所观察到的朋友这几天的活动序列:Walk->Shop->Clean在我们的隐马可夫模型之下出现的总概率是0.033612。
- HMM理解以及相关算法
- HMM算法
- 通过HMM backforward 与viterbi 理解DP算法
- 决策树相关算法理解
- HMM 语音识别 理解
- HMM简单理解
- HMM参数理解
- HMM模型的理解
- GMM-HMM理解
- HMM的个人理解
- HMM之前向算法
- HMM算法学习
- HMM之前向算法
- Baumwelch 算法训练HMM
- 【机器学习】HMM算法
- 机器学习算法-HMM
- HMM的viterbi算法
- HMM-鲍姆-韦尔奇算法
- HDU 1228 A+B
- android vnc server使用
- Ubuntu 下Chromium安装Flash插件
- 6.5 Device Interface
- SIFT解析(二)特征点位置确定
- HMM理解以及相关算法
- Android的CursorAdapter与CursorFilter机制
- 环境搭建
- HDU 1722 Cake
- 归并排序 MergeSort
- sql操作字段
- Use External Storage Process Big Data(1)
- SIFT解析(三)生成特征描述子
- 二分查找 初篇