您的当前位置:首页正文

HMM资料

来源:华佗小知识
http://wenwen.soso.com/z/q124434838.htm?pid=wenwen.autologin

隐马尔柯夫模型 Hidden Markov Model 隐马尔可夫模型(Hidden Markov Model,HMM)作为一种统计分析模型,创立于20世纪70年代。80年代得到了传播和发展,成为信号处理的一个重要方向,现已成功地用于语音识别,行为识别,文字识别以及故障诊断等领域。 基本理论

隐马尔可夫模型是马尔可夫链的一种,它的状态不能直接观察到,但能通过观测向量序列观察倒每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量是由一个具有响应概率密度分布的状态序列产生。所以,隐马尔可夫模型是一个双重随机过程----具有一定状态数的隐马尔可夫链和显示随机函数集。自20世纪80年代以来,HMM被应用于语音识别,取得重大成功。到了90年代,HMM还被引入计算机文字识别和移动通信核心技术“多用户的检测”。近年来,HMM在生物信息科学、故障诊断等领域也开始得到应用。 模型的表达

隐马尔可夫模型可以用五个元素来描述:

1.N,模型的隐状态数目。虽然这些状态是隐含的,但在许多实际应用中,模型的状态通常有具体的物理意义

2.M,每个状态的不同观测值的数目。

3,A , 状态转移概率矩阵。描述了HMM模型中各个状态之间的转移概率。其中

Aij = P(at+1 =Sj | qt=Si),1≤i,j≤N. (1)

式(1)表示在t时刻、状态为Si的条件下,在t+1时刻状态是Sj的概率。 4 B ,观测概率矩阵。其中

Bj(k) = P[Vk(t) | qt = Sj]; 1≤j≤N,1≤k≤M.

表示在t时刻、状态是Sj条件下,观察符号为Vk(t)的概率。 5,π 初始状态概率矩阵 π={πj} πj= P[q1 = Sj];1≤j≤N. 表示在出示t=1时刻状态为Sj的概率。

一般的,可以用λ=(A,B,π)来简洁的表示一个隐马尔可夫模型。给定了N,M,A,B,π后,隐马尔可夫模型可以产生一个观测序列 O=O1O2O3…Ot HMM需要解决三个基本问题: *1 评估问题:

给定观测序列 O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样有效计算某一观测序列的概率. *2 解码问题

给定观测序列 O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样寻找某种意义上最优的观测序列. *3 学习问题

怎样调整模型参数λ=(A,B,π),使其最大? 基本算法

针对以上三个问题,人们提出了相应的算法 *1 评估问题: 向前向后算法 *2 解码问题: Viterbi算法 *3 学习问题: Baum-Welch算法

http://www.aiseminar.cn/html/96/t-596.html?action-uchimage

此文讲述的内容在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)。因此,在前r步,状态序列(i1, i2, i3, ..., ir)和发布序列(Sk1, Sk2, ..., Skr)的可能的观测结果是 T(1, i1)E(i, k1), T(i1, i2)E(i2, k2), ..., T(ir-1, ir)E(ir, k)

隐马尔可夫模型

简介:隐马尔可夫模型相对马尔可夫模型的不同之处在于,你观测到一组发布序列,但是却不知道模型通过什么样的状态序列得到这样的发布。隐马尔可夫模型分析就是要从观测数据恢复出这一状态序列。

一个例子:考虑一个拥有2个状态和6个位置发布的马尔可夫模型。模型描述如下:

1. 一个红色骰子,有5个面,标记为1到6。

2. 一个绿色骰子,有12个面,有5个标记为2到6,余下的全标记为1。 3. 一个加权的红硬币,正面的概率是0.9,背面的概率是0.1。 4. 一个加权的绿硬币,正面的概率为0.95,背面的概率为0.05。

这个模型按照下面的规则从集合{1, 2, 3, 4, 5, 6}产生一个数字序列:

1. 从滚动红骰子开始,记下出现的数字,作为发布结果。 2. 投红硬币:

如果结果是正面,滚动红骰子,记下结果; 如果结果是背面,滚动绿骰子,记下结果。

3. 在下面的每一步,你都抛和前一步所投骰子相同颜色的硬币。如果硬币出现正面,滚和硬币相同颜色的骰子。如果硬币出现反面,改为投另种颜色的骰子。

这个模型的状态图如下,有两个状态,红和绿:

HiddenMarkovModels.jpg

通过投掷和状态一样颜色的骰子来解决输出(发布),通过抛同样颜色的硬币来决定状态的转移。

状态转移概率矩阵为: >> T = [0.9 0.1; 0.05 0.95] T =

0.9000 0.1000 0.0500 0.9500

输出或发布概率矩阵为:

>> E = [1/6 1/6 1/6 1/6 1/6 1/6; 7/12 1/12 1/12 1/12 1/12 1/12] E =

0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.5833 0.0833 0.0833 0.0833 0.0833 0.0833

这个模型并不是隐藏的,因为我们从硬币和骰子的颜色已经知道状态序列。假设,有其他人产生了一个发布结果,而没有向你展示硬币和骰子,你能看到的只有结果。当你看到1比其他数字多时,你也许猜测这个模型是在绿色状态,但是因为你不能看到被投骰子的颜色,所以你并不能确定。

隐马尔可夫模型提出了如下问题:

1. 给定一个输出序列,最有可能的状态过程是什么? 2. 给定一个输出序列,如何估计模型的转移和发布概率? 3. 如何求这个模型产生一个给定序列的先验概率? 4. 如何求这个模型产生一个给定序列的后验概率?

隐马尔可夫模型分析

统计工具箱包含5个与隐马尔可夫模型相关的函数:

hmmgenerate 从一个马尔可夫模型产生一个状态序列和输出序列; hmmestimate 计算转移和输出的极大似然估计;

hmmtrain 从一个输出序列计算转移和输出概率的极大似然估计; hmmviterbi 计算一个隐马尔可夫模型最可能的状态变化过程; hmmdecode 计算一个给定输出序列的后验状态概率。

下面部分介绍如何使用这些函数来分析隐马尔可夫模型。

1. 产生一个测试序列

下面代码产生上面简介中模型的转移和输出矩阵: TRANS = [.9 .1; .05 .95;];

EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;... 7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

要从模型产生一个随机的状态序列和输出序列,使用hmmgenerate: [seq,states] = hmmgenerate(1000,TRANS,EMIS);

输出中,seq是输出序列,states是状态序列。hmmgenerate在第0步从状态1开始,在第一步转移到状态i1 ,并返回i1作为状态的第一个入口。

2. 估计状态序列

给定了转移和输出矩阵TRANS和EMIS,函数hmmviterbi使用Viterbi算法计算模型给定输出序列seq最有可能 通过的状态序列:

likelystates = hmmviterbi(seq, TRANS, EMIS);

likelystates是和seq一样长的序列。计算hmmvertibi的精度如下: sum(states == likelystates) / length(states) ans = 0.8680

3. 估计转移和输出矩阵

函数hmmestimate和hmmtrain用于估计给定输出序列seq的转移和输出矩阵TRANS和EMIS。

使用hmmestimate

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states) TRANS_EST = 0.9065 0.0935 0.0406 0.9594 EMIS_EST =

0.1452 0.1516 0.1581 0.1968 0.1581 0.1903

0.5841 0.0754 0.0986 0.0812 0.0841 0.0768

由上面使用方式可知,hmmestimate函数需要事先知道了得到输出序列seq,以及得到此结果的状态变化序 列。

使用hmmtrain

如果不知道状态序列,但是知道TRANS和EMIS的初始猜测,那就可以使用hmmtrain来估计TRANS和EMIS。

假设已知如下初始猜测:

TRANS_GUESS = [.85 .15; .1 .9];

EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];

TRANS和EMIS的估计如下:

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS) TRANS_EST2 = 0.9207 0.0793 0.0370 0.9630 EMIS_EST2 =

0.1792 0.1437 0.1436 0.1855 0.1509 0.1971 0.5774 0.0775 0.1042 0.0840 0.0859 0.0710

hmmtrain使用迭代算法来不断修改TRANS_GUESS和EMIS_GUESS,使得每一步修改得到的矩阵都更加可能产生观测序列seq。当前后两个两次迭代矩阵的变化在一个小的容错范围内时,迭代停止。如果算法无法达到容错的范围,则迭代到达一定次数时就会停止,并返回一个警告提示。默认的最大迭代次数为100。

如果算法达不到目标误差范围,则可以通过增加迭代次数和/或加大容错误差值来使其获得较合适结果: 改变迭代次数maxiter:hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,'maxiterations',maxiter) 改变容错误差tol:hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, 'tolerance', tol)

影响hmmtrain输出的矩阵可靠性的两点因素:

(1)算法收敛于局部极值,这点可以使用不同的初始猜测矩阵来尝试解决; (2)序列seq太短而无法很好的训练矩阵,可以尝试使用较长的序列。

4. 估计后验状态概率(不太理解)

一个输出序列seq的后验状态概率是在特定状态下的模型产生在seq中一个输出的条件概率。假定seq已经给出,你可以使用hmmdecode得到后验状态概率。

PSTATES = hmmdecode(seq,TRANS,EMIS)

输出为一个M * N的矩阵。M是状态的个数,L是seq的长度。PSTATES(i, j)是模型在状态i时,产生seq第j个输出的条件概率。

http://www.cnblogs.com/qqparadise/archive/2008/10/21/1316265.html

隐马尔可夫模型HMM[转载牛人,看了半天没看懂]

前言:隐含马尔可夫模型是一个数学模型,到目前为之,它一直被认为是实现快速精确的语音识别系统的最成功的方法。复杂的语音识别问题通过隐含马尔可夫模型能非常简单地被表述、解决,让我不由由衷地感叹数学模型之妙。

自然语言是人类交流信息的工具。很多自然语言处理问题都可以等同于通信系统中的解码问题 -- 一个人根据接收到的信息,去猜测发话人要表达的意思。这其实就象通信中,我们根据接收端收到的信号去分析、理解、还原发送端传送过来的信息。以下该图就表示了一个典型的通信系统:

其中 s1,s2,s3...表示信息源发出的信号。o1, o2, o3 ... 是接受器接收到的信号。通信中的解码就是根据接收到的信号 o1, o2, o3 ...还原出发送的信号 s1,s2,s3...。

其实我们平时在说话时,脑子就是一个信息源。我们的喉咙(声带),空气,就是如电线和光缆般的信道。听众耳朵的就是接收端,而听到的声音就是传送过来的信号。根据声学信号来推测说话者的意思,就是语音识别。这样说来,如果接收端是一台计算机而不是人的话,那么计算机要做的就是语音的自动识别。同样,在计算机中,如果我们要根据接收到的英语信息,推测说话者的汉语意思,就是机器翻译; 如果我们要根据带有拼写错误的语句推测说话者想表达的正确意思,那就是自动纠错。

那么怎么根据接收到的信息来推测说话者想表达的意思呢?我们可以利用叫做“隐含马尔可夫模型”(Hidden Markov Model)来解决这些问题。以语音识别为例,当我们观测到语音信号 o1,o2,o3 时,我们要根据这组信号推测出发送的句子 s1,s2,s3。显然,我们应该在所有可能的句子中找最有可能性的一个。用数学语言来描述,就是在已知 o1,o2,o3,...的情况下,求使得条件概率 P (s1,s2,s3,...|o1,o2,o3....) 达到最大值的那个句子 s1,s2,s3,...

当然,上面的概率不容易直接求出,于是我们可以间接地计算它。利用贝叶斯公式并且省掉一个常数项,可以把上述公式等价变换成

P(o1,o2,o3,...|s1,s2,s3....) * P(s1,s2,s3,...)

其中

P(o1,o2,o3,...|s1,s2,s3....) 表示某句话 s1,s2,s3...被读成 o1,o2,o3,...的可能性, 而

P(s1,s2,s3,...) 表示字串 s1,s2,s3,...本身能够成为一个合乎情理的句子的可能性,所以这个公式的意义是用发送信号为 s1,s2,s3...这个数列的可能性乘以 s1,s2,s3...本身可以一个句子的可能性,得出概率。

(读者读到这里也许会问,你现在是不是把问题变得更复杂了,因为公式越写越长了。别着急,我们现在就来简化这个问题。)我们在这里做两个假设:

第一,s1,s2,s3,... 是一个马尔可夫链,也就是说,si 只由 si-1 决定 (详见系列一);

第二, 第 i 时刻的接收信号 oi 只由发送信号 si 决定(又称为独立输出假设, 即 P(o1,o2,o3,...|s1,s2,s3....) = P(o1|s1) * P(o2|s2)*P(o3|s3)...。

那么我们就可以很容易利用算法 Viterbi 找出上面式子的最大值,进而找出要识别的句子 s1,s2,s3,...。

满足上述两个假设的模型就叫隐含马尔可夫模型。我们之所以用“隐含”这个词,是因为状态 s1,s2,s3,...是无法直接观测到的。

隐含马尔可夫模型的应用远不只在语音识别中。在上面的公式中,如果我们把 s1,s2,s3,...当成中文,把 o1,o2,o3,...当成对应的英文,那么我们就能利用这个模型解决机器翻译问题; 如果我们把 o1,o2,o3,...当成扫描文字得到的图像特征,就能利用这个模型解决印刷体和手写体的识别。

P (o1,o2,o3,...|s1,s2,s3....) 根据应用的不同而又不同的名称,在语音识别中它被称为“声学模型” (Acoustic Model), 在机器翻译中是“翻译模型” (Translation Model) 而在拼写校正中是“纠错模型” (Correction Model)。 而P (s1,s2,s3,...) 就是我们在系列一中提到的语言模型。

在利用隐含马尔可夫模型解决语言处理问题前,先要进行模型的训练。 常用的训练方法由伯姆(Baum)在60年代提出的,并以他的名字命名。隐含马尔可夫模型在处理语言问题早期的成功应用是语音识别。七十年代,当时 IBM 的 Fred Jelinek (贾里尼克) 和卡内基·梅隆大学的 Jim and Janet Baker (贝克夫妇,李开复的师兄师姐) 分别独立地提出用隐含马尔可夫模型来识别语音,语音识别的错误率相比人工智能和模式匹配等方法降低了三倍 (从 30% 到 10%)。 八十年代李开复博士坚持采用隐含马尔可夫模型的框架, 成功地开发了世界上第一个大词汇量连续语音识别系统 Sphinx。

我最早接触到隐含马尔可夫模型是几乎二十年前的事。那时在《随机过程》(清华“著名”的一门课)里学到这个模型,但当时实在想不出它有什么实际用途。几年后,我在清华跟随王作英教授学习、研究语音识别时,他给了我几十篇文献。 我印象最深的就是贾里尼克和李开复的文章,它们的核心思想就是隐含马尔可夫模型。复杂的语音识别问题居然能如此简单地被表述、解决,我由衷地感叹数学模型之妙。

http://qkzz.net/magazine/1002-8331/2003/24/179860_0.PDF http://qkzz.net/magazine/1002-8331/2003/24/179860_1.PDF http://qkzz.net/magazine/1002-8331/2003/24/179860_2.PDF

http://extjs2.javaeye.com/blog/268096

一、 马尔科夫转移矩阵法的涵义

单个生产厂家的产品在同类商品总额中所占的比率,称为该厂产品的市场占有率。在激烈的竞争中,市场占有率随产品的质量、消费者的偏好以及企业的促销作用等因素而发生变化。企业在对产品种类与经营方向做出决策时,需要预测各种商品之间不断转移的市场占有率。

市场占有率的预测可采用马尔科夫转移矩阵法,也就是运用转移概率矩阵对市场占有率进行市场趋势分析的方法。马尔科夫是俄国数学家,他在20世纪初发现:一个系统的某些因素在转移中,第n次结果只受第n-1的结果影响,只与当前所处状态有关,与其他无关。比如:研究一个商店的累计销售额,如果现在时刻的累计销售额已知,则未来某一时刻的累计销售额与现在时刻以前的任一时刻的累计:销售额都无关。在马尔科夫分析中,引入状态转移这个概念。所谓状态是指客观事物可能出现或存在的状态;状态转移是指客观事物由一种状态转穆到另一种状态的概率。

马尔科夫分析法的一般步骤为: ①调查目前的市场占有率情况;

②调查消费者购买产品时的变动情况; ③建立数学模型;

④预测未来市场的占有率。

二、马尔科夫分析模型

实际分析中,往往需要知道经过一段时间后,市场趋势分析对象可能处于的状态,这就要求建立一个能反映变化规律的数学模型。马尔科夫市场趋势分析模型是利用概率建立一种随机型的时序模型,并用于进行市场趋势分析的方法。 马尔科夫分析法的基本模型为: X(k+1)=X(k)×P

公式中:X(k)表示趋势分析与预测对象在t=k时刻的状态向量,P表示一步转移概率矩阵,

X(k+1)表示趋势分析与预测对象在t=k+1时刻的状态向量。

必须指出的是,上述模型只适用于具有马尔科夫性的时间序列,并且各时刻的状态转移概率保持稳定。若时间序列的状态转移概率随不同的时刻在变化,不宜用此方法。由于实际的客观事物很难长期保持同一状态的转移概率,故此法一般适用于短期的趋势分析与预测。

三、马尔科夫过程的稳定状态

在较长时间后,马尔科夫过程逐渐处于稳定状态,且与初始状态无关。马尔科夫链达到稳定状态的概率就是稳定状态概率,也称稳定概率。市场趋势分析中,要设法求解得到市场趋势分析对象的稳态概率,并以此做市场趋势分析。

在马尔科夫分析法的基本模型中,当X:XP时,称X是P的稳定概率,即系统达到

稳定状态时的概率向量,也称X是P的固有向量或特征向量,而且它具有唯一性。

四,马尔科夫转移矩阵法的应用

马尔科夫分析法,是研究随机事件变化趋势的一种方法。市场商品供应的变化也经常受到各种不确定因素的影响而带有随机性,若其具有\"无后效性\",则用马尔科夫分析法对其未来发展趋势进行市场趋势分析五,提高市场占有率的策略预测市场占有率是供决策参考的,企业要根据预测结果采取各种措施争取顾客。提高市场占有率一般可采取三种策略:

(1)设法保持原有顾客; (2)尽量争取其他顾客;

(3)既要保持原有顾客又要争取新的顾客。

第三种策略是前两种策略的综合运用,其效果比单独使用一种策略要好,但其所需费用较高。如果接近于平稳状态时,一般不必花费竞争费用。所以既要注意市场平稳状态的分析,又要注意市场占有率的长期趋势的分析。 争取顾客、提高市场占有率的策略和措施一般有:

①扩大宣传。主要采取广告方式,通过大众媒体向公众宣传商品特征和顾客所能得到的利益,激起消费者的注意和兴趣。

②扩大销售。除联系现有顾客外,积极地寻找潜在顾客,开拓市场。如向顾客提供必要的服务等。

③改进包装。便于顾客携带,增加商品种类、规格、花色,便于顾客挑选,激发顾客购买兴趣。

④开展促销活动。如展销、分期付款等。

⑤调整经营策略。根据市场变化,针对现有情况调整销售策略,如批量优待、调整价格、市场渗透、提高产品性能、扩大产品用途、降低产品成本等,以保持市场占有率和扩大市场占有率。

因篇幅问题不能全部显示,请点此查看更多更全内容