原创:hxj7
序列比对的系列文章第二部分主要介绍了HMM(隐马尔科夫模型),包含了八篇文章:
《序列比对(九)从掷骰子说起HMM》
《序列比对(十)viterbi算法求解最可能路径》
《序列比对(11)计算符号序列的全概率》
《序列比对(12):计算后验概率》
《序列比对(13)后验解码》
《序列比对(14)viterbi算法和后验解码的比较》
《序列比对(15)EM算法以及Baum-Welch算法的推导》
《序列比对(16)Baum-Welch算法估算HMM参数》
HMM模型最关键的一点就是在一个状态序列中,某一步状态的概率只与上一步的状态有关。也正是因为与前面一步状态有关,所以HMM模型天然地适用动态规划算法。
这几篇文章都是以掷骰子为例。
一、如何随机生成状态序列和符号序列:
假定要随机生成一个状态序列
和一个符号序列
,那么:
给出了转移概率
和发射概率
的符号定义:
若是给初始状态0和初始符号建模,则有:
若是给结束状态0建模,我们假定:
二、Viterbi算法求解最可能路径
一条路径
就是一个状态序列。在符号序列已知的情况下,如何猜出来最有可能的路径。即
这个可以用Viterbi算法
求解。Viterbi算法是一种动态规划算法。假设是以状态以及符号结束的所有序列中概率的最大值。那么
Viterbi算法的初始条件是:
迭代公式是:
终止条件是:
回溯公式是:
三、前向算法和后向算法计算符号序列的全概率
假设符号序列已知,而路径未知,那么符号序列的全概率
如何计算?就是
具体计算仍然使用动态规划迭代计算,按照序列迭代的方向可分为前向算法和后向算法。
所谓前向算法
,就是从序列头部开始迭代,直至序列尾部。其初始条件是:
迭代公式是:
终止条件是:
所谓后向算法
,就是从序列尾部开始迭代,直至序列头部。其初始条件是:
迭代公式是:
终止条件是:
在实际的计算中,为了解决多个概率相乘可能导致的下溢
问题,要对概率进行适当的缩放。我们选择了缩放因子
这一方法。我们首先定义缩放后的概率:
缩放因子的计算方法是:
并且有:
用缩放后的概率表示前向算法:
用缩放后的概率表示后向算法:
四、后验概率的计算与后验解码
当符号序列已知而路径未知时,我们除了关心最可能路径外,也对某一位置状态的概率感兴趣。很明显,这是一个后验概率
,通过推导,可以通过下面的公式计算:
如果利用缩放后的概率计算,上述公式变为:
所谓后验解码
,就是对每一个位置,计算得到该位置最有可能的状态。即
五、Baum-Welch算法估算HMM模型参数
EM算法
是一种在有缺失数据的情况下利用最大似然法
或最大对数似然法
估算概率模型参数的迭代方法。
假设缺失数据是,那么EM算法的步骤就是:
E步骤(Expectation)要计算函数:
M步骤(Maximization)根据步骤的结果计算得到步骤的参数:
终止条件就是当(对数)似然值变化小于一个阈值或者迭代次数超过最大迭代次数,即:
Baum-Welch算法
是EM算法的一个特例。当符号序列已知而路径未知时,可以用Baum-Welch算法来估算HMM模型的参数。这时,缺失数据就是路径。那么,Baum-Welch算法的函数变为:
HMM模型的参数主要是转移概率以及发射概率,可以证明,当Baum-Welch算法采用如下迭代方式计算参数时,可以让对数似然取到局部最大值:
其中,表示迭代的次数,是在所有训练序列中发生的期望次数,是在所有训练序列中发生的期望次数。即
如果用前向算法和后向算法中的符号表示的话,我们可以推导得到:
伪计数之和反映了我们?认为先验知识的可靠程度。如果伪计数之和较大,则我们认为先验概率比较可靠,需要用更多的数据?取改变它。反之不太可靠。最开始的概率参数可以用随机数?。?只要保证相应的概率和为1即可。
至此,序列比对系列文章已经介绍了“第一部分:二序列比对的常见问题和相应算法”以及“第二部分:HMM模型及相关算法简介”。在学习“将HMM模型应用到序列比对(或序列发现)”之前,我们接下来准备先学习一下多序列比对的常见问题和相关算法。
(公众号:生信了)