【机器学习】嘿马机器学习(算法篇)第9篇:HMM模型,4.5 维特比算法解码隐藏状态序列【附代码文档】

🏆🏆🏆教程全知识点简介:1.定位、目标。2. K-近邻算法涵盖距离度量、k值选择、kd树、鸢尾花种类预测数据集介绍、练一练、交叉验证网格搜索、facebook签到位置预测案例。3. 线性回归包括线性回归简介、线性回归损失和优化、梯度下降法介绍、波士顿房价预测案例、欠拟合和过拟合、正则化线性模型、正规方程推导方式、梯度下降法算法比较优化、维灾难。4. 逻辑回归涵盖逻辑回归介绍、癌症分类预测案例(良恶性乳腺癌肿瘤预测、获取数据)、ROC曲线绘制。5. 朴素贝叶斯算法包括朴素贝叶斯算法简介、概率基础复习、产品评论情感分析案例(取出内容列数据分析、判定评判标准好评差评)。6. 支持向量机涵盖SVM算法原理、SVM损失函数、数字识别器案例。7. 决策树算法包括决策树分类原理、cart剪枝、特征工程特征提取、决策树算法api、泰坦尼克号乘客生存预测案例。8. EM算法涵盖初识EM算法、EM算法介绍。9. HMM模型包括马尔科夫链、HMM简介、前向后向算法评估观察序列概率、维特比算法解码隐藏状态序列、HMM模型API介绍。10. 集成学习进阶涵盖Bagging、xgboost算法原理、otto案例(Otto Group Product Classification Challenge xgboost实现)、数据变化可视化、lightGBM、stacking算法基本思想、住房月租金预测。11. 聚类算法包括聚类算法api初步使用、聚类算法实现流程、模型评估、算法优化、特征降维、用户对物品类别喜好细分案例、算法选择指导。12. 数学基础涵盖向量与矩阵范数、朗格朗日乘子法、Huber Loss、极大似然函数取对数原因。

📚📚👉👉👉code git仓库: https://gitee.com/yinuo112/AI/blob/master/机器学习/嘿马机器学习(算法篇)/note.md 直接get🍅🍅
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
HMM模型
学习目标
- 了解什么是马尔科夫链
- 知道什么是HMM模型
- 知道前向后向算法评估观察序列概率
- 知道维特比算法解码隐藏状态序列
- 了解鲍姆-韦尔奇算法
- 知道HMM模型API的使用
4.5 维特比算法解码隐藏状态序列
学习目标
- 知道维特比算法解码隐藏状态序列
在本篇 会讨论维特比算法解码隐藏状态序列,即给定模型和观测序列,求给定观测序列条件下,最可能出现的对应的隐藏状态序列。
HMM模型的解码问题最常用的算法是维特比算法,当然也有其他的算法可以求解这个问题。
同时维特比算法是一个通用的求序列最短路径的动态规划算法,也可以用于很多其他问题。
1 HMM最可能隐藏状态序列求解概述
HMM模型的解码问题即:
- 给定模型λ=(A,B,Π)\lambda=(A,B,\Pi)λ=(A,B,Π)O=o1,o2,...oTO={o_1,o_2,...o_T}O=o1,o2,...oTI∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗P(I∗∣O)P(I^\ast |O)P(I∗∣O)
一个可能的近似解法是求出观测序列O在每个时刻t最可能的隐藏状态it∗i^\ast _tit∗I∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗
- 在给定模型λ\lambdaλqiq_iqiγt(i)\gamma _t(i)γt(i)
![image-20191211151315040]
近似算法很简单,但是却不能保证预测的状态序列整体是最可能的状态序列,因为预测的状态序列中某些相邻的隐藏状态可能存在转移概率为0的情况。
而维特比算法可以将HMM的状态序列作为一个整体来考虑,避免近似算法的问题,下面 来看看维特比算法进行HMM解码的方法。
2 维特比算法概述
维特比算法是一个通用的解码算法,是基于动态规划的求序列最短路径的方法。
既然是动态规划算法,那么就需要找到合适的局部状态,以及局部状态的递推公式。在HMM中,维特比算法定义了两个局部状态用于递推。
1) 第一个局部状态是在时刻t隐藏状态为iiii1,i2,...iti_1,i_2,...i_ti1,i2,...it
- 记为δt(i)\delta _t(i)δt(i)
![image-20191211151501175]
由δt(i)\delta _t(i)δt(i)δ\deltaδ
![image-20191211151534411]
2) 第二个局部状态由第一个局部状态递推得到。
- 定义在时刻t隐藏状态为i的所有单个状态转移路径(i1,i2,...,it−1,i)(i_1,i_2,...,i_{t-1},i)(i1,i2,...,it−1,i)ψt(i)\psi _t(i)ψt(i)
- 其递推表达式可以表示为:
![image-20191211153102474]
有了这两个局部状态, 就可以从时刻0一直递推到时刻T,然后利用ψt(i)\psi _t(i)ψt(i)
3 维特比算法流程总结
现在 来总结下维特比算法的流程:
-
输入:HMM模型λ=(A,B,Π)\lambda=(A,B,\Pi)λ=(A,B,Π)O=(o1,o2,...oT)O=(o_1,o_2,...o_T)O=(o1,o2,...oT)
-
输出:最有可能的隐藏状态序列I∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗
流程如下:
- 1)初始化局部状态:
![image-20191211153308449]
- 2) 进行动态规划递推时刻t=2,3,...Tt=2,3,...Tt=2,3,...T
![image-20191211153349430]
- 3) 计算时刻T最大的δT(i)\delta _T(i)δT(i)ψt(i)\psi _t(i)ψt(i)
![image-20191211153412145]
- 4) 利用局部状态ψt(i)\psi _t(i)ψt(i)t=T−1,T−2,...,1t=T-1,T-2,...,1t=T−1,T−2,...,1
![image-20191211153607900]
最终得到最有可能的隐藏状态序列I∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗
4 HMM维特比算法求解实例
下面 仍然用盒子与球的例子来看看HMM维特比算法求解。 的观察集合是:
![image-20191211153746752]
的状态集合是:
![image-20191211153802703]
而观察序列和状态序列的长度为3.
初始状态分布为:
![image-20191211153823665]
状态转移概率分布矩阵为:
![image-20191211153840457]
观测状态概率矩阵为:
![image-20191211153917435]
球的颜色的观测序列:
![image-20191211153935679]
按照 前面的维特比算法,首先需要得到三个隐藏状态在时刻1时对应的各自两个局部状态,此时观测状态为1:
![image-20191211154001419]
现在开始递推三个隐藏状态在时刻2时对应的各自两个局部状态,此时观测状态为2:
- δ2(1)=max1≤j≤3[δ1(j)aj1]b1(o2)=max1≤j≤3[0.1×0.5,0.16×0.3,0.28×0.2]×0.5=0.028\delta_2(1) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j1}]b_1(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.5, 0.16 \times 0.3, 0.28\times 0.2] \times 0.5 = 0.028δ2(1)=max1≤j≤3[δ1(j)aj1]b1(o2)=max1≤j≤3[0.1×0.5,0.16×0.3,0.28×0.2]×0.5=0.028
-
Ψ2(1)=3\Psi_2(1)=3Ψ2(1)=3
-
δ2(2)=max1≤j≤3[δ1(j)aj2]b2(o2)=max1≤j≤3[0.1×0.2,0.16×0.5,0.28×0.3]×0.6=0.0504\delta_2(2) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j2}]b_2(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.2, 0.16 \times 0.5, 0.28\times 0.3] \times 0.6 = 0.0504δ2(2)=max1≤j≤3[δ1(j)aj2]b2(o2)=max1≤j≤3[0.1×0.2,0.16×0.5,0.28×0.3]×0.6=0.0504
-
Ψ2(2)=3\Psi_2(2)=3Ψ2(2)=3
-
δ2(3)=max1≤j≤3[δ1(j)aj3]b3(o2)=max1≤j≤3[0.1×0.3,0.16×0.2,0.28×0.5]×0.3=0.042\delta_2(3) = \max_{1\leq j \leq 3}[\delta_1(j)a_{j3}]b_3(o_2) = \max_{1\leq j \leq 3}[0.1 \times 0.3, 0.16 \times 0.2, 0.28\times 0.5] \times 0.3 = 0.042δ2(3)=max1≤j≤3[δ1(j)aj3]b3(o2)=max1≤j≤3[0.1×0.3,0.16×0.2,0.28×0.5]×0.3=0.042
- Ψ2(3)=3\Psi_2(3)=3Ψ2(3)=3
继续递推三个隐藏状态在时刻3时对应的各自两个局部状态,此时观测状态为1:
- δ3(1)=max1≤j≤3[δ2(j)aj1]b1(o3)=max1≤j≤3[0.028×0.5,0.0504×0.3,0.042×0.2]×0.5=0.00756\delta_3(1) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j1}]b_1(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.5, 0.0504 \times 0.3, 0.042\times 0.2] \times 0.5 = 0.00756δ3(1)=max1≤j≤3[δ2(j)aj1]b1(o3)=max1≤j≤3[0.028×0.5,0.0504×0.3,0.042×0.2]×0.5=0.00756
-
Ψ3(1)=2\Psi_3(1)=2Ψ3(1)=2
-
δ3(2)=max1≤j≤3[δ2(j)aj2]b2(o3)=max1≤j≤3[0.028×0.2,0.0504×0.5,0.042×0.3]×0.4=0.01008\delta_3(2) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j2}]b_2(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.2, 0.0504\times 0.5, 0.042\times 0.3] \times 0.4 = 0.01008δ3(2)=max1≤j≤3[δ2(j)aj2]b2(o3)=max1≤j≤3[0.028×0.2,0.0504×0.5,0.042×0.3]×0.4=0.01008
-
Ψ3(2)=2\Psi_3(2)=2Ψ3(2)=2
-
δ3(3)=max1≤j≤3[δ2(j)aj3]b3(o3)=max1≤j≤3[0.028×0.3,0.0504×0.2,0.042×0.5]×0.7=0.0147\delta_3(3) = \max_{1\leq j \leq 3}[\delta_2(j)a_{j3}]b_3(o_3) = \max_{1\leq j \leq 3}[0.028 \times 0.3, 0.0504 \times 0.2, 0.042\times 0.5] \times 0.7 = 0.0147δ3(3)=max1≤j≤3[δ2(j)aj3]b3(o3)=max1≤j≤3[0.028×0.3,0.0504×0.2,0.042×0.5]×0.7=0.0147
- Ψ3(3)=3\Psi_3(3)=3Ψ3(3)=3
此时已经到最后的时刻, 开始准备回溯。此时最大概率为δ3(3)\delta _3(3)δ3(3)i3∗=3i^\ast _3=3i3∗=3
由于ψ3(3)=3\psi _3(3)=3ψ3(3)=3i2∗=3i^\ast _2=3i2∗=3ψ2(3)=3\psi _2(3)=3ψ2(3)=3i1∗=3i^\ast _1=3i1∗=3
5 小结
-
维特比算法流程总结:
-
输入:HMM模型λ=(A,B,Π)\lambda=(A,B,\Pi)λ=(A,B,Π)O=(o1,o2,...oT)O=(o_1,o_2,...o_T)O=(o1,o2,...oT)
-
输出:最有可能的隐藏状态序列I∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗
-
流程如下:
- 1)初始化局部状态:
![image-20191211153308449]
* 2) 进行动态规划递推时刻<span>t=2,3,...Tt=2,3,...Tt=2,3,...T</span>
![image-20191211153349430]
* 3) 计算时刻T最大的<span>δT(i)\delta _T(i)δT(i)</span><span>ψt(i)\psi _t(i)ψt(i)</span>
![image-20191211153412145]
* 4) 利用局部状态<span>ψt(i)\psi _t(i)ψt(i)</span><span>t=T−1,T−2,...,1t=T-1,T-2,...,1t=T−1,T−2,...,1</span>
![image-20191211153607900]
- 最终得到最有可能的隐藏状态序列I∗=i1∗,i2∗,...iT∗I^\ast ={i^\ast _1,i^\ast _2,...i^\ast _T}I∗=i1∗,i2∗,...iT∗
4.6 鲍姆-韦尔奇算法简介
学习目标
- 了解鲍姆-韦尔奇算法
模型参数学习问题 —— 鲍姆-韦尔奇(Baum-Welch)算法(状态未知) ,
- 即给定观测序列O={o1,o2,...oT}O={o_1,o_2,...o_T}O={o1,o2,...oT}λ=(A,B,Π)\lambda =(A,B,\Pi )λ=(A,B,Π)P(O∣λ)P(O|\lambda )P(O∣λ)
- 它的解法最常用的是鲍姆-韦尔奇算法,其实就是基于EM算法的求解,只不过鲍姆-韦尔奇算法出现的时代,EM算法还没有被抽象出来,所以被叫为鲍姆-韦尔奇算法。
![image-20191209171743726]
2 鲍姆-韦尔奇算法原理
鲍姆-韦尔奇算法原理既然使用的就是EM算法的原理,
- 点赞
- 收藏
- 关注作者
评论(0)