关于隐马尔可夫模型在模式识别中应用的探讨

来源:互联网 发布:c cgi编程 编辑:程序博客网 时间:2024/06/05 02:42

 

隐马儿可夫模型的要点如下:­

1、存在2种类型的状态,内部状态和外部状态:内部状态是一种外部不可见的、但决定外部状态的一群状态;外部状态是直接被人们认识和利用的一群状态,或者说是一种最终的结果。­

2、内部状态可以相互转移;而外部状态不会相互转移,只和其内部状态有关。因此只要涉及到状态转移,都是指内部状态。­

3、内部状态的转移存在时间型、阶段性、步骤性:该模型的状态转移是一步一步、一个时间点一个时间点、一个阶段一个阶段进行的,并非连续。很重要的一点就是:每一个时刻只会处于一种内部状态,并且该内部状态只会表现出一种外部状态。­

4、内部状态的转移有一定的概率,比如T1时刻,状态W1,可能会在T2时刻转换为状态W2,其概率为80%。­

5、每个内部状态必定会在某个时刻显现出一种外部状态,且存在一定概率。 ­

 

200910011644

­­上面这个图,说明了一些问题:­

1、W1、W2、W3代表该模型有3个内部状态,V1、V2、V3代表该模型有3个外部状态。­

2、a12表示W1转换为W2的概率,并且a11+a12+a13=100%­

3、b12代表状态W1发出V2状态的概率,用条件概率表达,即:P(V2|W1) ­

­

假设,起始状态为W2,那么我们想要在2个时间点,观察到V3、V12个外部状态(注意:是有顺序的)的概率为:(1*b23)+(a22*b21+a21*b11+a23*b31)。第一个括号里面的概率是指第一个时间点,也即初始状态,W2发出V3的概率;第二个括号由3项组成,分别代表W2转移到下一个状态的概率乘上在其基础上发出V3的概率。­

­

对于模式V3V2V2V1V3V2,要想知道其出现的概率,那么我们需要知道初始状态是谁,转移状态概率矩阵,以及,每个状态产生外部形态的概率。通过这些信息我们可以轻易得到该模式出现的几率,但是有一个问题值得关注的是算法复杂度,如果按照我们刚才的思路,那么这个模式的概率将由36项相加所得,如果内部状态为50个,模式的长度(时间段)为60个呢?那么项的个数估计是天文数字了。对于这个问题,感兴趣的可以参考HMM向前算法。­

­

刚才我们讨论的其实就是隐马尔可夫模型中的估值问题,现在我们来探讨和模式匹配密切相关的解码问题。解码问题的描述为:已知模式V3V2V2V1V3V2,已知状态转移概率矩阵(aij),以及,每个内部状态产生外部状态的概率(bjk),求产生这个外部状态序列的内部状态的序列,比如:W1W3W1W3W3W1。要产生这个外部状态序列的内部序列肯定会有很多,因此问题的答案也会有很多,但是每个答案都有自己的概率,并且所有答案相加为1。最大概率的那个答案,可以被认为是最接近事实的答案。­

­

求解这个解码问题的思路其实很简单,也就是遍历所有的可能序列而已,然后找出概率最大的那条路径。为了清楚表达思路,我们将上面的有限状态机图转换为网络图,将每个状态和时间对应起来:­

­2009100511501

­­上图的黄色圈圈就是初始状态,那么要产生V2的概率就是b22­

­200910051207

­­现在要产生V2V1的内部状态序列可能有3种:W2W1其概率为b22*a21*b11 、W2W2其概率为b22*a22*b21、W2W3其概率为b22*a23*b31,挑选一个概率最大的,那么其内部状态路径就是所谓的最佳答案了。 ­

­现在要产生V2V1V3呢?路径就有9种了;外部序列越长,内部状态数越多,那么路径数就会成指数上升。幸运的是,在大部分的问题上,总有那么一个外部状态只有一个内部状态能显现它,这就意味着其他内部状态显现它的概率为0,这在很大程度上可以进行算法改进,也即:当遇到这样的外部状态时,我们可以开始清算之前的最优路径了,清算完毕后将这个对应的内部状态设为起始状态,继续开始寻找这样的外部状态。这种算法就在很大程度上阻止了算法复杂度的指数上升­

原创粉丝点击