隐马尔可夫模型学习笔记

马尔科链模型

  • 一个系统有(N)个状态,随着时间的推移,系统从某一状态转移到另一个状态,设为时间t的状态,系统在时间t处于状态的概率取决于其在时间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 ]

其中(a_{ij})为转移概率,必须满足(a_{ij}>=0),且(a_{ij})的和为1。

例子

  • 假设一段时间的气象可以用三种状态的马尔科夫模型(M)描述,S1:雨,S2:多云,S3:晴,状态转移矩阵为:

[A = [a_{ij}] = [0.4, 0.4, 0.3; 0.2, 0.6, 0.2;0.1, 0.1, 0.8] ]

  • 如果第一天为晴天,根据这一模型,在今后七天中天气O=“晴晴雨雨晴云晴”的概率为:

egin{equation}
egin{aligned}
&P(O|M)
&= P(S_3,S_3,S_3,S_1,S_1,S_3,S_2,S_3|M)
&=P(S_3)cdot P(S_3|S_3)cdot P(S_3|S_3)cdot P(S_1|S_3)cdot P(S_1|S_1)cdot P(S_3|S_1)cdot P(S_2|S_3)cdot P(S_3|S_2)
&=1 cdot a_{33}cdot a_{33}cdot a_{31}cdot a_{11}cdot a_{13}cdot a_{32} cdot a_{23}
&=1.536 imes10^{-4}
end{aligned}
end{equation}

隐马尔科夫模型(HMM)

  • 在马尔科夫模型中,每一个状态表示一个可以观察的事件
  • 在HMM中观察到的事件是状态的随机函数,因此该模型十一双重随机过程,其中状态转移过程是不可观察的(隐蔽)的(马尔科夫链),而可观察的时间的随机过程是隐蔽的状态转换过程的随机函数(一般随机过程)。

HMM的三个假设

对于一个随机事件,有一观察值序列:(O=O_1,O_2,...,O_TQ=q_1,q_2,...,q_T)

  • 假设1:马尔科夫性假设(状态构成一阶马尔科夫链)
  • 假设2:不动性假设(状态与具体时间无关)
  • 假设3:输出独立性假设(输出仅与当前的状态有关)$$ P(O_1,...,O_T|q_1,...,q_T)= prod P(O_t|q_t)$$

HMM定义

  • 一个因马尔科夫模型(HMM)是有一个五元组描述的:$$ lambda =(N,M,A,B,pi )$$

其中

  • (N):状态的有限集合
  • (M):观察值的有限集合
  • (A):状态转移概率矩阵
  • (B):观察值概率分布
  • (pi={pi_i},pi _i=P(q_1=s_i)):初始状态分布

观察序列产生步骤

  • 1.根据初始状态概率分布(pi=pi_i),选择一初始状态
  • 2.设(t=1)
  • 3.根据状态Si的输出概率分布b_{jk},输出(O_t=v_k)
  • 4.根据状态转移概率分布,转移到新状态(q_{t+1}=S_j)
  • 5.设(t=t+1),如果(t<T),重复步骤3、4,否则结束

HMM的三个基本问题

令为给定HMM的参数

  • (O=O_1,...,O_T)为观察序列,则HMM的三个基本问题为:评估问题、解码问题、学习问题
  • 评估问题:
    对于给定模型,求某个观察值序列的概率(P(O|lambda));
  • 解码问题:
    对于给定模型和观察值序列,求可能性最大的状态序列(max_Q {P(Q|O,lambda)});
  • 学习问题:
    对于给定一个观察值序列(O),调整参数(lambda),使得观察值出现的概率(P(O|lambda))

三个基本问题的求解算法

  • 评估问题:前向算法
    定义前向变量,采用动态规划算法,复杂度(O(N^2T))
  • 解码问题:韦特比算法
    采用动态规划算法,复杂度(O(N^2T))
  • 学习问题:向前向后算法
    EM算法是一个特例,带隐变量的最大似然估计

举个例子——天气与作习

举个常见的例子来引出下文,同时方便大家理解!比如我在不同天气状态下去做一些事情的概率不同,天气状态集合为{下雨,阴天,晴天},事情集合为{宅着,自习,游玩}。假如我们已经有了转移概率和输出概率,即P(天气A|天气B)和P(事情a|天气A)的概率都已知道,那么则有几个问题要问(注意,假设一天我那几件事情中的一件)。

  • 1.假如一周内的天气变化是 下雨->晴天->阴天->下雨->阴天->晴天->阴天,那么我这一周 自习->宅着->游玩->自习->游玩->宅着->自习的概率是多大?
  • 2.假如我这一周做事序列是 自习->宅着->游玩->自习->游玩->宅着->自习,不知道天气状态的情况下这个做事序列的概率是多大?
  • 3.假如一周内的天气变化是 下雨->晴天->阴天->下雨->阴天->晴天->阴天,那我们这一周最有可能的做事序列是什么?
  • 4.假如我这一周做事序列是 自习->宅着->游玩->自习->游玩->宅着->自习,那么这一周的天气变化序列最有可能是什么?

参考网址:
http://blog.csdn.net/stdcoutzyx/article/details/8522078
http://wenku.baidu.com/link?url=mgefnHLJRHgX6zghIcnZPIU0KCW5A-R9BsSnwvvbTXwMuKrn5caBCOv860O1ICAUpdGtgElY5d6BcybY1mBfRCks2rKEz9dr9eIiP-s7HMm

原文地址:https://www.cnblogs.com/milkcoffeesugar/p/5741819.html