数据挖掘——马尔科夫模型

本文介绍了马尔科夫模型的一阶概念,随后深入剖析了隐马尔可夫模型(HMM),包括其结构、评估、解码和学习方法,如前向算法、Viterbi算法和Baum-Welch算法。通过实例演示,展示了如何在实际场景中使用HMM解决概率计算和序列分析问题。
摘要由CSDN通过智能技术生成

HWW算法

1. 马尔科夫模型

一个马尔科夫过程是状态间的转移仅依赖于前 N \mathcal{N} N个状态的过程。这个过程被称之为 N \mathcal{N} N阶马尔科夫模型,其中 N \mathcal{N} N是影响下一个状态选择的状态数量。最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。
定义一个一阶马尔科夫过程如下:

  • 状态:三个状态——晴天,多云,雨天。
  • Π \varPi Π 向量:定义系统初始化时每一个状态的概率。
  • 状态转移矩阵:给定前一天天气情况下的当前天气概率。

 


2. 隐马尔科夫模型

包含了一个底层隐藏的随时间改变的马尔科夫过程,以及一个与隐藏状态某种程度相关的可观察到的状态集合。

我们使用一个隐马尔科夫模型(HMM)对这些例子建模。这个模型包含两组状态集合和三组概率集合:

  • 隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)
  • Π \varPi Π 向量:包含了(隐)模型在时间t=1时一个特殊的隐藏状态的概率(初始概率)
  • 状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率
  • 观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)
  • 混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率

公式化:
一个隐马尔科夫模型是一个三元组(pi, A, B):

  • Π = ( π i ) \varPi = ( \pi_i ) Π=(πi) :初始化概率向量
  • A = ( a i j ) A = ( a_{ij} ) A=(aij) : 状态转移矩阵 P r   ( x i t ∣ x j t − 1 ) Pr\ (x_{i_t} | x_{j_{t-1}}) Pr (xitxjt1)
  • B = ( b i j ) B = ( b_{ij} ) B=(bij) : 混淆矩阵 P r   ( y i ∣ x j ) Pr\ (y_i | x_j) Pr (yixj)
2.1. 需要解决的问题:
  • (评估): 给定HMM,求一个观察序列的概率。—— 前向算法
  • (解码): 给定HMM,搜索最有可能生成一个观察序列的隐藏状态序列。—— Viterbi 算法
  • (学习): 给定观察序列,生成一个HMM。—— Baum-Welch算法
2.2. 前向算法:

已知HMM的参数和观察到的状态序列为 O O O ,求产生该状态序列的概率:设 α t ( j ) \alpha_t(j) αt(j) 表示 t t t 时刻隐藏状态为 j j j 的概率, β t ( k ) \beta_t(k) βt(k) 表示 t t t 时刻观察状态为 j j j 的概率。
α t ( j ) = P ( o 1 , . . . , o t , S t = j ∣ λ ) \alpha_{t}(j) = P(o_1,...,o_t, S_t=j | \lambda ) αt(j)=P(o1,...,ot,St=jλ)

α t ( j ) = { ∑ i = 1 n α t − 1 ( i ) a j i , t > 1 π j , t = 1 \alpha_{t}(j) = \begin{cases} \sum_{i=1}^n \alpha_{t-1}(i)a_{ji}, t > 1 \\ \pi_j, t = 1\\ \end{cases} αt(j)={i=1nαt1(i)aji,t>1πj,t=1

β t ( k ) = ∑ i = 1 n α t ( i ) b k i \beta_{t}(k) = \sum_{i=1}^n \alpha_{t}(i)b_{ki} βt(k)=i=1nαt(i)bki

2.3. Viterbi 算法:

已知HMM的参数和观察到的状态序列为 O O O,求最可能产生该状态序列的隐藏序列 S S S,即要找到这样的隐藏序列,使得下面的后验概率最大:
P ( S ∣ O ) = P ( S ) P ( O ∣ S ) P ( O ) = π s 1 b o 1 s 1 ∏ t = 2 T a s t s t − 1 b o t s t \begin{aligned} P(S|O) &= \frac{P(S)P(O|S)}{P(O)}\\ &=\pi_{s_1}b_{o_1s_1}\prod_{t=2}^Ta_{s_ts_{t-1}}b_{o_ts_t} \end{aligned} P(SO)=P(O)P(S)P(OS)=πs1bo1s1t=2Tastst1botst
α t ( j ) \alpha_t(j) αt(j) 表示 t t t 时刻隐藏状态为 j j j 时,从某个隐藏状态序列产生观察序列 O O O 的最大概率:
α t ( j ) = { m a x i (   α t − 1 ( i ) a j i b o t j   ) , t > 1 π j b o t j , t = 1 \alpha_{t}(j) = \begin{cases} \underset{i}{max}(\ \alpha_{t-1}(i)a_{ji}b_{o_tj}\ ), t > 1 \\ \pi_jb_{o_tj}, t = 1\\ \end{cases} αt(j)={imax( αt1(i)ajibotj ),t>1πjbotj,t=1
不断迭代,算出所有的 α t ( j ) \alpha_t(j) αt(j) ,同时记录每个 α t ( j ) \alpha_t(j) αt(j) 对应的上一个时刻的隐藏状态。算到最后一个时刻时,取最大的 α T ( j ) \alpha_T(j) αT(j) 并回溯得到隐藏序列。

2.4. Baum-Welch算法:

对于给定的观测序列 O O O ,如何估计模型参数使得 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 最大。对于该问题,目前还没有能找到全局最优解的方法,但是Baum-Welch算法能找到局部最优。
前向概率:
α t ( j ) = P ( o 1 , . . . , o t , s t = j ∣ λ ) \alpha_{t}(j) = P(o_1,...,o_t, s_t=j | \lambda ) αt(j)=P(o1,...,ot,st=jλ)
后向概率:
β t ( j ) = P ( o t + 1 , . . . , o T ∣ s t = j , λ ) \beta_{t}(j) = P(o_{t+1},...,o_T | s_t=j, \lambda ) βt(j)=P(ot+1,...,oTst=j,λ)
则:
P ( O , s t = j ∣ λ ) = P ( o 1 , . . . , o t , o t + 1 , . . . , o T , s t = j ∣ λ ) = P ( o 1 , . . . , o t , s t = j ∣ λ ) P ( o t + 1 , . . . , o T ∣ o 1 , . . . , o t , s t = j , λ ) = P ( o 1 , . . . , o t , s t = j ∣ λ ) P ( o t + 1 , . . . , o T ∣ s t = j , λ ) = α t ( j ) β t ( j ) \begin{aligned} P(O,s_t=j|\lambda) &= P(o_1,...,o_t,o_{t+1},...,o_T, s_t=j | \lambda) \\ &= P(o_1,...,o_t,s_t=j|\lambda)P(o_{t+1},...,o_T|o_1,...,o_t,s_t=j,\lambda) \\ &= P(o_1,...,o_t,s_t=j|\lambda)P(o_{t+1},...,o_T|s_t=j,\lambda) \\ &=\alpha_{t}(j)\beta_{t}(j) \end{aligned} P(O,st=jλ)=P(o1,...,ot,ot+1,...,oT,st=jλ)=P(o1,...,ot,st=jλ)P(ot+1,...,oTo1,...,ot,st=j,λ)=P(o1,...,ot,st=jλ)P(ot+1,...,oTst=j,λ)=αt(j)βt(j)

要使如下概率最大
P ( O ∣ λ ) = ∑ S P ( O , S ∣ λ ) P ( S ∣ λ ) P(O|\lambda) = \sum_{S}P(O, S|\lambda)P(S|\lambda) P(Oλ)=SP(O,Sλ)P(Sλ)

  • EM算法E步:
    Q ( λ , λ ^ ) = ∑ S l o g P ( O , S ∣ λ ) P ( O , S ∣ λ ^ ) Q(\lambda, \hat{\lambda}) = \sum_{S}logP(O, S|\lambda)P(O, S|\hat{\lambda}) Q(λ,λ^)=SlogP(O,Sλ)P(O,Sλ^)
    其中, λ ^ \hat{\lambda} λ^ 是隐马尔可夫模型参数的当前估计值, λ \lambda λ 是要极大化的隐马尔可夫模型参数。
    由于 P ( O , S ∣ λ ) = π s 1 b o 1 s 1 ∏ t = 2 T a s t s t − 1 b o t s t P(O, S|\lambda) = \pi_{s_1}b_{o_1s_1}\prod_{t=2}^Ta_{s_ts_{t-1}}b_{o_ts_t} P(O,Sλ)=πs1bo1s1t=2Tastst1botst,则 Q ( λ ∣ λ ^ ) Q(\lambda|\hat{\lambda}) Q(λλ^) 可展开为:
    Q ( λ , λ ^ ) = ∑ S l o g π s 1 P ( O , S ∣ λ ^ ) + ∑ S ( ∑ t = 2 T l o g a s t s t − 1 ) P ( O , S ∣ λ ^ ) + ∑ S ( ∑ t = 1 T l o g b o t s t ) P ( O , S ∣ λ ^ ) \begin{aligned} Q(\lambda, \hat{\lambda}) &= \sum_{S}log\pi_{s_1}P(O, S|\hat{\lambda}) \\ &\quad + \sum_{S}(\sum_{t=2}^Tlog a_{s_ts_{t-1}} )P(O, S|\hat{\lambda}) \\ &\quad + \sum_{S}(\sum_{t=1}^Tlog b_{o_ts_t} )P(O, S|\hat{\lambda}) \end{aligned} Q(λ,λ^)=Slogπs1P(O,Sλ^)+S(t=2Tlogastst1)P(O,Sλ^)+S(t=1Tlogbotst)P(O,Sλ^)

  • EM算法M步:
    利用拉格朗日和偏导可得:
    π j = P ( O , s 1 = j ∣ λ ^ ) P ( O ∣ λ ^ ) \pi_j = \frac{P(O,s_1=j|\hat{\lambda})}{P(O|\hat{\lambda})} πj=P(Oλ^)P(O,s1=jλ^)
    a i j = ∑ t = 2 T P ( O , s t = i , s t − 1 = j ∣ λ ^ ) ∑ t = 2 T P ( O , s t − 1 = j ∣ λ ^ ) a_{ij} = \frac{\sum_{t=2}^TP(O, s_t=i, s_{t-1}=j|\hat{\lambda})}{\sum_{t=2}^T P(O, s_{t-1}=j |\hat{\lambda})} aij=t=2TP(O,st1=jλ^)t=2TP(O,st=i,st1=jλ^)
    b k j = ∑ t = 1 T P ( O , s t = j ∣ λ ^ ) I ( o t = k ) ∑ t = 1 T P ( O , s t = j ∣ λ ^ ) b_{kj} = \frac{\sum_{t=1}^TP(O, s_t=j|\hat{\lambda}) I(o_t=k)}{\sum_{t=1}^T P(O, s_t=j |\hat{\lambda})} bkj=t=1TP(O,st=jλ^)t=1TP(O,st=jλ^)I(ot=k)

HMM学习笔记(二):监督学习方法与Baum-Welch算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值