Matlab2011b的HMM(隐马尔可夫模型)相关函数介绍
隐马尔可夫模型

…
问题 1 – 评估问题
给定 一个骰子掷出的点数记录
124552646214614613613666166466163661636616361651561511514612356234
问题 会出现这个点数记录的概率有多大?
求P(O|λ)
问题 2 – 解码问题
给定 一个骰子掷出的点数记录
124552646214614613613666166466163661636616361651561511514612356234
1点 2点 3点 4点 5点 6点
一次连续掷骰子的过程模拟
时间 骰子 掷出 点数
1 A 3 2 A 3 3 A 4 4 B 5 5 A 1 6 A 6 7 A 2 明序列 隐序列
查封赌场后, 调查人员发现了一些连续掷骰子的记录, 其中有一个骰子掷出的点数记录如下:
124552646214614613613666166466163661636616361651561511514612356234
本例中三个基本问题
1.评估问题
• 给定观察序列O和HMM =(π, A, B), 判断O是由产 生出来的可能性有多大
• 计算骰子点数序列的确由“作弊”模型生成的可能性
2.解码问题
• 给定观察序列O和HMM λ =(π, A, B), 计算与序列O相 对应的状态序列是什么 • 在骰子点数序列中, 判断哪些点数是用骰子B掷出的
本例中HMM的定义
赌场的例子中:
隐状态集: S={骰子A, 骰子B} 明字符集: V={1,2,3,4,5,6} 初始状态概率: π1=1, π2=0 隐状态转移概率 :
a11=0.9, a12=0.1 a21=0.8, a22=0.2
隐马尔可夫模型的基本用法

隐马尔可夫模型的基本用法隐马尔可夫模型(HiddenMarkovModel,HMM)是一种用于描述随机过程的概率模型,它在自然语言处理、语音识别、生物信息学、金融分析等领域得到了广泛应用。
本文将介绍隐马尔可夫模型的基本概念、数学表达、参数估计、解码算法等内容,希望对读者理解和应用该模型有所帮助。
一、隐马尔可夫模型的基本概念隐马尔可夫模型是一个二元组(Q, O, A, B, π),其中:Q = {q1, q2, …, qN}是状态集合,表示模型中可能出现的所有状态;O = {o1, o2, …, oT}是观测集合,表示模型中可能出现的所有观测;A = [aij]是状态转移矩阵,其中aij表示从状态i转移到状态j的概率;B = [bj(k)]是观测概率矩阵,其中bj(k)表示在状态j下观测到k的概率;π = [πi]是初始状态概率向量,其中πi表示模型开始时处于状态i的概率。
隐马尔可夫模型的基本假设是:每个时刻系统处于某一状态,但是我们无法观测到该状态,只能观测到该状态下产生的某个观测。
因此,我们称该状态为隐状态,称观测为可观测状态。
隐马尔可夫模型的任务就是根据观测序列推断出最有可能的隐状态序列。
二、隐马尔可夫模型的数学表达隐马尔可夫模型的数学表达可以用贝叶斯公式表示:P(O|λ) = ∑Q P(O|Q, λ)P(Q|λ)其中,O表示观测序列,Q表示隐状态序列,λ表示模型参数。
P(O|Q, λ)表示在给定隐状态序列Q和模型参数λ的条件下,观测序列O出现的概率;P(Q|λ)表示在给定模型参数λ的条件下,隐状态序列Q出现的概率。
P(O|λ)表示在给定模型参数λ的条件下,观测序列O出现的概率。
根据贝叶斯公式,我们可以得到隐状态序列的后验概率:P(Q|O,λ) = P(O|Q,λ)P(Q|λ)/P(O|λ)其中,P(O|Q,λ)和P(Q|λ)可以通过模型参数计算,P(O|λ)可以通过前向算法或后向算法计算。
隐马尔可夫模型(HMM)中文分词

隐马尔可夫模型(HMM)中⽂分词1. 马尔可夫模型 如果⼀个系统有n个有限状态S={s1,s2,…s n},随着时间推移,该系统将从某⼀状态转移到另⼀状态,Q={q1,q2,…q n}位⼀个随机变量序列,该序列中的变量取值为状态集S中的某个状态,其中q t表⽰系统在时间t的状态。
那么:系统在时间t处于状态s j的概率取决于其在时间1,2, … t-1的状态,该概率为:P(q t=s j|q t−1=s i,q t−2=s k…)如果在特定条件下,系统在时间t的状态只与其在时间t-1的状态相关,即:P(q t=s j|q t−1=s i,q t−2=s k…)=P(q t=s j|q t−1=s i)则该系统构成⼀个离散的⼀阶马尔可夫链。
进⼀步,如果只考虑上述公式独⽴于时间t的随机过程:P(q t=s j|q t−1=s i)=a ij,1≤i,j≤N该随机过程为马尔可夫模型。
其中,状态转移概率aij 必须满⾜以下条件:a ij≥0,N∑j=1a ij=12.隐马尔可夫模型 相对于马尔可夫模型,在隐马尔可夫模型中,我们不知道模型经过的状态序列,只知道状态的概率函数,即,观察到的事件是状态的随机函数,因此,该模型是⼀个双重的随机过程。
其中,模型的状态转换过程是不可观察的,即隐蔽的,可观察事件的随机过程是隐蔽的观察状态转换过程的随机函数。
隐马尔可夫模型可以⽤五个元素来描述,包括2个状态集合和三个概率矩阵: (1)隐含状态 S 这些状态之间满⾜马尔可夫性质,是马尔可夫模型中实际所隐含的状态。
这些状态通常⽆法通过直接观测⽽得到。
(例如S1,S2,S3等等) (2)可观测状态 O 在模型中与隐含状态相关联,可通过直接观测⽽得到。
(例如O1,O2,O3等等,可观测状态的数⽬不⼀定要和隐含状态的数⽬⼀致。
(3)初始状态概率矩阵π 表⽰隐含状态在初始时刻t=1的概率矩阵,(例如t=1时,P(S1)=p1,P(S2)=P2,P(S3)=p3,则初始状态概率矩阵π=[ p1 p2 p3 ] (4)隐含状态转移概率矩阵A 描述了HMM模型中各个状态之间的转移概率。
一文搞懂HMM(隐马尔可夫模型)

⼀⽂搞懂HMM(隐马尔可夫模型)什么是熵(Entropy)简单来说,熵是表⽰物质系统状态的⼀种度量,⽤它⽼表征系统的⽆序程度。
熵越⼤,系统越⽆序,意味着系统结构和运动的不确定和⽆规则;反之,,熵越⼩,系统越有序,意味着具有确定和有规则的运动状态。
熵的中⽂意思是热量被温度除的商。
负熵是物质系统有序化,组织化,复杂化状态的⼀种度量。
熵最早来原于物理学. 德国物理学家鲁道夫·克劳修斯⾸次提出熵的概念,⽤来表⽰任何⼀种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越⼤。
1. ⼀滴墨⽔滴在清⽔中,部成了⼀杯淡蓝⾊溶液2. 热⽔晾在空⽓中,热量会传到空⽓中,最后使得温度⼀致更多的⼀些⽣活中的例⼦:1. 熵⼒的⼀个例⼦是⽿机线,我们将⽿机线整理好放进⼝袋,下次再拿出来已经乱了。
让⽿机线乱掉的看不见的“⼒”就是熵⼒,⽿机线喜欢变成更混乱。
2. 熵⼒另⼀个具体的例⼦是弹性⼒。
⼀根弹簧的⼒,就是熵⼒。
胡克定律其实也是⼀种熵⼒的表现。
3. 万有引⼒也是熵⼒的⼀种(热烈讨论的话题)。
4. 浑⽔澄清[1]于是从微观看,熵就表现了这个系统所处状态的不确定性程度。
⾹农,描述⼀个信息系统的时候就借⽤了熵的概念,这⾥熵表⽰的是这个信息系统的平均信息量(平均不确定程度)。
最⼤熵模型我们在投资时常常讲不要把所有的鸡蛋放在⼀个篮⼦⾥,这样可以降低风险。
在信息处理中,这个原理同样适⽤。
在数学上,这个原理称为最⼤熵原理(the maximum entropy principle)。
让我们看⼀个拼⾳转汉字的简单的例⼦。
假如输⼊的拼⾳是"wang-xiao-bo",利⽤语⾔模型,根据有限的上下⽂(⽐如前两个词),我们能给出两个最常见的名字“王⼩波”和“王晓波 ”。
⾄于要唯⼀确定是哪个名字就难了,即使利⽤较长的上下⽂也做不到。
当然,我们知道如果通篇⽂章是介绍⽂学的,作家王⼩波的可能性就较⼤;⽽在讨论两岸关系时,台湾学者王晓波的可能性会较⼤。
HMM隐马尔可夫模型解析课件

的颜色为O1,并把球放回缸中 n 根据描述缸的转移的概率分布,随机选择下一口缸,
重复以上步骤。
n 为最观后察得值到序一列个O描。述球的颜色的序列O1,O2, … ,称
HMM实例——约束
在上述实验中,有几个要点需要注意:
n (a)转移矩阵没有零值 的Markov链
n (b)转移矩阵有零值的 Markov链
n (c)和(d)是左-右形式表 示的Markov链
HMM实例
Urn 3 Urn 2 Urn 1
Veil
Observed Ball Sequence
HMM实例——描述
n 设有N个缸,每个缸中装有很多彩球,球的颜色 由一组概率分布描述。实验进行方式如下
的统计特性,即状态转移概率确定;这个 状态产生的输出亦为随机的,取决于该状 态生成语音观察量的概率。
n 无跨越模型符合人类的语音特点,广泛应 用于语音识别中。
n 有跨越用于反映音素在发音中可能被吸收 或删除的情况。
Two types of HMM
n State-emission HMM (Moore machine):
n X(t+1) = f(X(t) ) n 现实中存在很多马尔可夫过程
马尔可夫链
n 时间和状态都离散的马尔可夫过程称为马尔可夫链
n 记作{Xn = X(n), n = 0,1,2, …}
n 在时间集T1 = {0,1,2, …}上对离散状态的过程相继观察的结果
n 链的状态空间记做I = {a1, a2, …}, ai∈R.
隐马尔可夫模型 Hidden Markov model
隐马尔科夫(HMM)模型详解及代码实现

机器学习之隐马尔科夫模型(HMM)机器学习之隐马尔科夫模型(HMM)1、隐马尔科夫模型介绍2、隐马尔科夫数学原理3、Python代码实现隐马尔科夫模型4、总结隐马尔可夫模型介绍马尔科夫模型(hidden Markov model,HMM)是关于时序的概率模型,描述由一个隐藏的马尔科夫随机生成不可观测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程,属于一个生成模型。
下面我们来从概率学角度定义马尔科夫模型,从一个典型例子开始:假设有4个盒子,每个盒子里面有不同数量的红、白两种颜色的球,具体如下表:盒子编号1234红球数5368白球数5742现在从这些盒子中取出T个球,取样规则为每次选择一个盒子取出一个球,记录其颜色,放回。
在这个过程中,我们只能观测到球的颜色的序列,观测不到球是从哪个盒子中取出来的,即观测不到盒子的序列,这里有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列),前者是隐藏的,只有后者是可观测的。
这里就构成了一个马尔科夫的例子。
定义是所有的可能的状态集合,V是所有的可能的观测的集合:其中,N是可能的状态数,M是可能的观测数,例如上例中N=4,M=2。
是长度为T的状态序列,是对应的观测序列:A是状态转移概率矩阵:其中, 是指在时刻处于状态的条件下在时刻转移到状态的概率。
B是观测概率矩阵:其中, 是指在时刻处于状态的条件下生成观测的概率。
是初始状态概率向量:其中, 是指在时刻=1处于状态的概率。
由此可得到,隐马尔可夫模型的三元符号表示,即称为隐马尔可夫模型的三要素。
由定义可知隐马尔可夫模型做了两个基本假设:(1)齐次马尔科夫性假设,即假设隐藏的马尔科夫链在任意时刻的状态只和-1状态有关;(2)观测独立性假设,观测只和当前时刻状态有关;仍以上面的盒子取球为例,假设我们定义盒子和球模型:状态集合: = {盒子1,盒子2,盒子3,盒子4}, N=4观测集合: = {红球,白球} M=2初始化概率分布:状态转移矩阵:观测矩阵:(1)转移概率的估计:假设样本中时刻t处于状态i,时刻t+1转移到状态j 的频数为那么转台转移概率的估计是:(2)观测概率的估计:设样本中状态为j并观测为k的频数是那么状态j观测为k的概率, (3)初始状态概率的估计为S个样本中初始状态为的频率。
HMM(隐马尔可夫)推导(下)-参数估计(EM)

HMM(隐马尔可夫)推导(下)-参数估计(EM)HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)回顾 HMM上篇介绍了HMM这样的⼀种时序类模型, 即描述了⼀些观测现象的产⽣, 是由我们很难观测到的 "隐变量因⼦", 产⽣的, 同时这些隐变量因⼦之间的变化也有⼀个状态转移概率的过程.HMM 的推导过程, 也就两个部分, Z 过程 (推断过程) 和 Estimation(参数估计)过程.上篇对于 Z 过程, 有通过类似于枚举法和⼀种 DP (动态规划) 算法来求解最好的 Z, 其前提假设是模型的参数 (初始状态, 状态转移概率矩阵,发射概率) 已知下来求解的. 嗯. 推导思路过程有点类似之前的 XGBoost 算法, 也是先假定, 再推导, 在证明假设前提这样的套路, 过程⼜⽤到了 EM算法来求解.如果我是⾯试官, 问HMM, 这相当于将 EM 和 DP 算法同时问了, 这样的问题就很有质量哦.12⽉底恰好tableau⽼铁跟我分享动态规划,果然数学系就是不⼀样, ⽤爬n阶楼梯来说明, 斐波那契数. DP的核⼼思想就是将问题规模不断缩⼩求解, 不同于递归哈, 后⾯可以单独举个 DP 栗⼦.so, 本篇就来整⼀波, 如何进⾏参数求解.θ=(π,A,B)假设有5个状态, 同样是扔2个硬币π表⽰初始状态, 如: π=[0.8,b,c,d,e]A 表⽰两个状态的转移矩阵; 是⼀个 5x5 的⽅阵B 表⽰发射概率 (隐含规则->观测的概率值); 是⼀个 5x2 的矩阵如果是词性分析, 则矩阵就⾮常⼤了, 如果观测是连续型则需要⽤概率分布来描述了.对于, HMM, 要求解出这3个参数, 主要有两个步骤, 或者说是2个关键点:给定模型的参数, 找出最适合的 Z => Inference (推断过程)估计模型参数的θ => Parameter Estimation (估计过程)Complete VS lncomplete "Z"Z 就是隐变量, X 是对应的观测值.X 已知, Z 已知, 则通过简单的频率统计即可求解出参数X 已知, Z 未知, 则通过 EM 算法求解. (E 步更新发射概率, M 步更新参数值, 这样循环交替直到收敛, 即得参数发射概率就是隐变量 z1 -> x1 (观测值) 的概率. 可参考EM篇的扔硬币, 上帝视⾓, 事先知道试验结果是由哪个硬币产⽣的, 或知道概率. (如第1次是 "正", 我知道有 70% 概率来⾃ A 硬币, 30%概率来⾃ B硬币, 这个概率矩阵 [0.7, 0.3] 就是发射概率)转移概率描述状态之间的变化规律. 如还是扔硬币, 每次对 A, B 硬币的选择策略不同, 如 AAB, ABA ... 的场景, 可通过转移概率矩阵来描述.ps: ⽼铁昨天问我是数论强, 还是分析强...嗯, 我只想说, 作为⽂科⽣(商科), 只是熟练使⽤数学⼯具⽽已....另外想分享⼀点⼯具论, 在我眼⾥, 数学符号, 公式, 代码, 其实本质都是⼀样的, 就是⼀个靠谱的⼯具, ⽬标都是为了对现实世界的另⼀种刻画. 当然世界很⼤, 可以感性认知, 也可理性认知, 探索的过程是其乐⽆穷的. 我感觉⾃⼰内⼼还是⼀个⽂艺青年的特征, 追求内⼼的感受, 也有故作伤春悲秋....不说这些了..Complete "Z"假设有 3个观测样本, Z 是已知时:s1:z : 1, 1, 2, 2, 2, 3x : a, b, a, c, c, bs2:z : 2, 1, 3, 3, 2x : a, a, c, b, as3:z : 1, 1, 3, 2x : b, a, a, c在 z 已知道的这种上帝视⾓下, 求解参数 (初始状态, 状态转移矩阵, 发射概率) 就是词频统计, 然后归⼀化作为概率值 , ⾮常容易的.为了⽅便简单演⽰, 假设样本空间就是上⾯这3个样本, 观测值和其隐变量状态都是已知的.⾸先来估计π (初始状态) 即每⼀个样本(向量 1x3) 的第⼀状态分量的频数统计, (约定先⾏后列哦)状态1状态2状态3频次210然后再归⼀化得到初始状态 (向量) :π=[23,1 3,3]接着来估计 A (状态转移矩阵), 状态与状态间的, 即 3x3 的矩阵. 同时, 状态要横向来看, 统计是先⾏后列--->状态1状态2状态3状态1212状态2121状态3021按⾏进⾏归⼀化即可得到概率 (严格来说, "频率" 应该更适合, 但我们通常都是⽤样本估计总体, 也说得通哈)--->状态1状态2状态3状态12/51/52/5状态21/42/41/4状态30/32/31/3最后来估计 B (发射概率矩阵), 即每个状态下, 每个观测值的概率, 即可 3x3 的矩阵 (统计也是约定, 先⾏后列哈)--->a b c状态1320状态2303状态3121同样按⾏做归⼀化可得到发射概率矩阵 B:--->a b c状态13/52/50/5状态23/60/63/6状态31/42/41/4因此, 在已知 Z 的情况下, 要做的就是直接统计出了模型的参数: 初始概率状态(向量), 状态转移概率 (矩阵), 发射概率 (矩阵). 站在上帝视⾓, 果然爽歪歪. 此处突然想到了基本经济社会问题. 就是, 你所掌握资源越多, 就越有发⾔权, 做事情成功的概率必然很⼤和相对轻松.Incomplete "Z"⽽我们⾝处的现实世界, ⼏乎是没有上帝视⾓的. 它只存在于理论的乌托邦世界. 于是在现世的洪流, 我们通常只是看到观测到的现象, ⽽⽆法得知现象背后的上帝,是如何扔骰⼦的, 即便如此, 我们依旧去进⾏⼀个逼近, 利⽤智慧, 嗯, 说得有⾼⼤上, 这⾥其实就⽤到 EM 算法来进⾏⼀个参数估计即可.(x,z)−简单统计−θ⽽,(x,)−how−θF/B 算法 ( Forward And Backward)就要要计算出p(z k|x) 即在给定 x 的情况下, 可以计算任意时刻状态下的 z 的期望通过 F/B 算法, 可以计算出: p(z k=1|x),p(z k=2|x),....p(z k=m|x)也就是说, 通过观测 X, 计算出了 Z, 然后简单统计则可估计出模型的参数, 再来捋⼀波条件F / B : p(z|x)Forward : ⽤来计算p(z k|x1...k)Backward : ⽤来计算p(x k+1,...n|z k)如何将它们关联起来呢, , 涉及条件概率, 同时也会想到贝叶斯公式呀.p(z k|x)=p(z k,x) p(x)这⾥的 x 表⽰所有的 n 个样本嘛, 因此为了和 F, B 产⽣联系, 可以将 x 进⾏划分 (展开).p(z k,x)=p(z k,x1...k,x k+1...n)=p(z k,x1...k) p(x k+1...n|z k,x1..k)可以省略掉x1...k考虑条件独⽴的情况下, 其对条件概率是没有影响的.=p(z k,x1...k) p(x k+1...n|z k)为啥是条件独⽴成⽴?因为, directional separation 性质: (嗯, 就可理解为条件独⽴的⼀种更⾼级的⼀个性质), ⽤处就是帮助我们来判断多个变量中, 有哪⼀些变量之间, 是有条件独⽴的性质的, 或者是把很多的变量看作⼀个集合.我们在谈条件独⽴的时候, 通常是以单个变量来参照的. 然⽽涉及多个变量, 则需⽤的 D-separation 性质了呀. 嗯....举个栗⼦, 假设我有两波变量, 然后通过 D-separation 性质, 可以帮我们判断, 其中⼀波变量, 是否对其条件概率产⽣了影响. 算是⼀个更加泛化的⼀个条件独⽴性质.在本例中, 我们把 X, 拆分成了x1...k−1,x k,x k+1...n在 D-separation 性质中, x k这个分割点被称为 Block , 如果当存在变量 (可以多个) x - Block - y 且指向关系是 x -> Block -> y 的时候, 则可以认为, x(变量集合) 是条件独⽴于 Block 的. 因此可以省略掉. (具体D-separation 性质证明, 后⾯再补⼀波百度吧, 先⽤上再说)最终p(z k,x)=p(z k,x1...k) p(x k+1...n|z k) 即通过计算 Forward 和 Backward 完成最终求解.重要信息,再重复⼀遍: 我们为了计算p(z|k) 其实只需要计算出 Forward 和 Backward 即可, 这也就是通过 X 计算出了 Z, 从⽽依上 complete 的简单统计, 求解出模型参数然后关如何去定义 Z 的个数, 其实是⼀个超参数, 有点类似于 EM算法中, 最开始 E部的初始值, ⼈⼯可以根据经验来控制的.⼩结然后好像有点⼤篇幅的在弄 F/B 算法, ⽽开篇主要想阐明参数估计的核⼼是 EM算法, 那体现在何处呢? 我们捋⼀波求解参数的过程:⾸先, 我们是要通过在给定 X 的情况下, 求解出 Z 的期望, 这个求解过程⽤到了 F/B 算法;其次, 我们通过已知 (X, Z) 来求解出了参数θ这, 不就是 EM 算法的 E步和 M 步了呀.最后, 其实还遗留了⼀个问题, 就是如何求解 F/B 嗯, 想⼀波先. 框架是没问题了, 这就跟写代码⼀样, 逻辑结构, 模块划分已经搭起来了, 然后就是慢慢去找别⼈的代码来复制粘贴的过程, 先想⼀波哈.Processing math: 100%。
Matlab统计学工具箱之(隐)马尔可夫模型:MarkovModels-Matlab

Matlab统计学工具箱之(隐)马尔可夫模型:MarkovModels-Matlab此文讲述的内容在Matlab 7.0、7.5(R2007b)中均有——马尔可夫工具箱,主要内容如下。
简介:马尔可夫处理是随机处理的一个典型例子——此种处理根据特定的概率产生随机输出或状态序列。
马尔可夫处理的特别之处在于它的无记忆性——他的下一个状态仅依赖他的当前状态,不考虑导致他们的历史。
马尔可夫处理的模型在实际应用中使用非常广泛,从每日股票价格到染色体中的基因位置都有应用。
马尔可夫链马尔可夫模型用状态图可视化描述如下。
MarkovModel.jpg在图中,矩形代表你要描述的模型在处理中可能出现的状态,箭头描述了状态之间的转换。
每个箭头上的标签表明了该转换出现的概率。
在处理的每一步,模型都可能根据当前状态产生一种output或emission,然后做一个到另一状态的转换。
马尔可夫模型的一个重要特点是:他的下个状态仅仅依赖当前状态,而与导致其成为当前状态的历史变换无关。
马尔可夫链是马尔可夫模型的一组离散状态集合的数学描述形式。
马尔可夫链特征归纳如下:1. 一个状态的集合{1, 2, ..., M}2. 一个M * M的转移矩阵T,(i, j)位置的数据是从状态i转到状态j的概率。
T的每一行值的和必然是1,因为这是从一个给定状态转移到其他所有可能状态的概率之和。
3. 一个可能的输出(output)或发布(emissions)的集合{S1, S2, ..., SN}。
默认情况下,发布的集合是{1, 2, ..., N},这里N是可能的发布的个数,当然,你也可以选择一个不同的数字或符号的集合。
4. 一个M * N的发布矩阵E,(i, k)入口给出了从状态i得到发布的标志Sk的概率。
马尔可夫链在第0步,从一个初始状态i0开始。
接着,此链按照T(1, i1)概率转移到状态i1,且按概率E(i1, k1)概率发布一个输出S(k1)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab 2011b Statistics Toolbox HMM作者:yuheng666Email:wuyuheng666@关键字:HMM,隐马尔科夫模型,Matlab,Statistics Toolbox声明:本文主要介绍Matlab2011b中Statistics Toolbox工具箱里与隐马尔科夫模型相关的函数及其用法(请勿与其它HMM工具箱混淆)。
本文的主要内容来自Matlab 2011b的帮助文档,为作者自学笔记。
水平有限,笔记粗糙,本着“交流探讨,知识分享”的宗旨,希望对HMM感兴趣的同学有些许帮助,欢迎指教,共同进步。
有关马尔科夫模型的基本知识,请参考其他资料。
如:/~lliao/cis841s06/hmmtutorialpart1.pdf/~lliao/cis841s06/hmmtutorialpart2.pdf/section/cs229-hmm.pdfhttp://jedlik.phy.bme.hu/~gerjanos/HMM/node2.html/dugad/hmm_tut.html.......变量说明:设有M个状态,N个符号Markov模型。
TRANS:对应状态转移矩阵,大小为M*M,表示各状态相互转换的概率,TRANS(i,j)表示从状态i转换到状态j的概率。
EMIS:对应符号生成矩阵,又叫混淆矩阵,观察符号概率分布。
EMIS(i,j)代表在状态i时,产生符号j的概率。
函数介绍:hmmgenerate — Generates a sequence of states and emissions from a Markov model 从一个马尔科夫模型产生状态序列和输出序列,该序列具有模型所表达的随机性特征。
A random sequence seq of emission symbolsA random sequence states of states用法:[seq,states] = hmmgenerate(len,TRANS,EMIS)hmmgenerate(...,'Symbols',SYMBOLS)hmmgenerate(...,'Statenames',STATENAMES)示例:trans = [0.95,0.05; 0.10,0.90];emis = [1/6 1/6 1/6 1/6 1/6 1/6;1/10 1/10 1/10 1/10 1/10 1/2];[seq,states] = hmmgenerate(100,trans,emis)[seq,states] = hmmgenerate(100,trans,emis,...'Symbols',{'one','two','three','four','five','six'},...'Statenames',{'fair';'loaded'})估计状态序列:Estimating the State Sequencehmmviterbi — Calculates the most probable state path for a hidden Markov model Given the transition and emission matrices TRANS and EMIS, the function hmmviterbi uses the Viterbi algorithm to compute the most likely sequence of states the model would go through to generate a given sequence seq of emissions:给定状态转移矩阵TRANS和混淆矩阵EMIS,hmmviterbi使用Viterbi算法计算该模型最相似的状态序列。
用法:STATES = hmmviterbi(seq,TRANS,EMIS)hmmviterbi(...,'Symbols',SYMBOLS)hmmviterbi(...,'Statenames',STATENAMES)示例:likelystates = hmmviterbi(seq, TRANS, EMIS);trans = [0.95,0.05;0.10,0.90];emis = [1/6 1/6 1/6 1/6 1/6 1/6;1/10 1/10 1/10 1/10 1/10 1/2];[seq,states] = hmmgenerate(100,trans,emis);estimatedStates = hmmviterbi(seq,trans,emis);[seq,states] = hmmgenerate(100,trans,emis,...'Statenames',{'fair';'loaded'});estimatesStates = hmmviterbi(seq,trans,emis,...'Statenames',{'fair';'loaded'});hmmestimate和hmmtrain用于通过给定的输出序列估计转移矩阵TRANS和混淆矩阵EMIS。
hmmestimate — Calculates maximum likelihood estimates of transition and emission probabilities from a sequence of emissions and a known sequence of states通过一个输出序列和已知的状态序列,计算转移概率和输出概率的最大似然估计。
用法:[TRANS,EMIS] = hmmestimate(seq,states)hmmestimate(...,'Symbols',SYMBOLS)hmmestimate(...,'Statenames',STATENAMES)hmmestimate(...,'Pseudoemissions',PSEUDOE)hmmestimate(...,'Pseudotransitions',PSEUDOTR)示例:通过已知的输出序列和状态序列估计出转移状态和混淆矩阵。
[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)TRANS_EST =0.8989 0.10110.0585 0.9415EMIS_EST =0.1721 0.1721 0.1749 0.1612 0.1803 0.13930.5836 0.0741 0.0804 0.0789 0.0726 0.1104hmmtrain —Calculates maximum likelihood estimates of transition and emission probabilities from a sequence of emissions.在知道输出序列,不知道状态转移序列,但是对转移矩阵和混淆矩阵有个初始猜测的情况下,可以使用hmmtrain估计转移状态和混淆矩阵,改函数可以选择使用BaumWelch或者Viterbi算法,通过迭代的方式进行估计,可以设置迭代次数Maxiterations和精度Tolerance。
用法:[ESTTR,ESTEMIT] = hmmtrain(seq,TRGUESS,EMITGUESS)hmmtrain(...,'Algorithm',algorithm)hmmtrain(...,'Symbols',SYMBOLS)hmmtrain(...,'Tolerance',tol)hmmtrain(...,'Maxiterations',maxiter)hmmtrain(...,'Verbose',true)hmmtrain(...,'Pseudoemissions',PSEUDOE)hmmtrain(...,'Pseudotransitions',PSEUDOTR)示例:TRANS_GUESS = [.85 .15; .1 .9];EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];You estimate TRANS and EMIS as follows:[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)TRANS_EST2 =0.2286 0.77140.0032 0.9968EMIS_EST2 =0.1436 0.2348 0.1837 0.1963 0.2350 0.00660.4355 0.1089 0.1144 0.1082 0.1109 0.1220hmmdecode — Calculates the posterior state probabilities of a sequence of emissions 用于估计后验状态概率。
对于一个输出序列seq的后验状态概率,是指这个模型在确定的状态下产生seq中一个符号的条件概率。
PSTATES = hmmdecode(seq,TRANS,EMIS)The output PSTATES is an M-by-L matrix, where M is the number of states and L is the length of seq. PSTATES(i,j) is the conditional probability that the model is in state i when it generates the jth symbol of seq, given that seq is emitted.PSTATES是一个M×L的矩阵,M是状态的个数,L是输出序列seq的长度。
PSTATES(i,j)是在状态i时,产生seq的第j个符号的条件概率。
细心的读者可能会发现,上面都没有使用到Markov模型的初始状态概率矩阵。