HMM的前提假设
+------+ +------+ +------+ +------+
Start-> | S₁ | --> | S₂ | --> | S₃ | --> | Sₙ |
+------+ +------+ +------+ +------+
| | | |
v v v v
+------+ +------+ +------+ +------+
| O₁ | | O₂ | | O₃ | | Oₙ |
+------+ +------+ +------+ +------+
HMM中拿到数据集之后,我们建模他们的联合概率函数:
P(O1,O2,...,On,X1,X2,...,Xn)=P(X1,O1,X2,O2,...,Xn,On)=P(X1)∗P(O1∣X1)∗P(X2∣X1O1)∗P(O2∣X2X1O1)∗...=P(X1)∗P(O1∣X1)∗P(X2∣X1)∗P(O2∣X2)∗....P(Xn∣Xn−1)∗P(On∣Xn)=P(X1)P(O1∣X1)t=2∏nP(Xt∣Xt−1)P(Ot∣Xt)
因此,联合概率只依赖:
-
P(X1): 初始状态概率分布,不妨记作π
-
P(Xt∣Xt−1):状态转移概率矩阵,不妨记作A
-
P(Ot∣Xt) :给定状态时候,观测值的概率分布,也叫做发射概率,不妨记作B
HMM的所有计算和预测,都围绕如何从数据集中计算得到λ=(π,A,B)
-
评估问题:已知λ=(π,A,B) 和观测序列O1,O2,...,On, 需要计算这个观测序列的出现概率, 一般解法为前向算法或者后向算法
-
预测问题:已知λ=(π,A,B) 和观测序列O1,O2,...,On, 预测最有可能的状态序列,一般用贪心算法或者维特比算法
-
学习问题:模型参数λ=(π,A,B) 未知,需要学习推断,分为两种场景:
关于评估问题:
P(O1,O2,...,On)=所有可能的状态序列X∑P(O,X)=x1,x2,...,xn∑P(o1,o2,...,on,x1,x2,...,xn)
由于状态序列的可能性是指数级增长的, 如果状态有T种可能,那么状态序列有TN种可能,不可能穷尽, 于是改成采用动态规划的前向算法,具体算法过程没看。
关于预测问题
MAXx1,x2,...,xnP(x1,x2,...,xn)=MAX(P(x1))∗MAX(P(x2))∗...∗MAX(P(xn))(贪心解法)
希望找到一个状态序列x1,x2,...,xn, 使得概率最大,那么贪心的解法就是令每个状态的出现概率最大,即每次选择概率最大的状态。
维特比算法没看。
关于学习问题
有监督场景
既然已经知道每个观测背后的状态是什么,那状态转移矩阵和发射矩阵很好直接统计出来:
无监督场景
只能看到观测序列,不知道背后的状态是什么,反正就是学习出模型参数λ=(π,A,B) , 使得P(O∣λ)最大 。
那就采用EM算法,但是这个HMM中用的的EM算法的E步骤有点奇怪,暂时解决不了