【机器学习】嘿马机器学习(算法篇)第8篇:HMM模型,4.3 HMM模型基础【附代码文档】

52 阅读1分钟

🏆🏆🏆教程全知识点简介: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、极大似然函数取对数原因。


📚📚👉👉👉   gitee.com/yinuo112/AI… 🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

HMM模型

学习目标

  • 了解什么是马尔科夫链
  • 知道什么是HMM模型
  • 知道前向后向算法评估观察序列概率
  • 知道维特比算法解码隐藏状态序列
  • 了解鲍姆-韦尔奇算法
  • 知道HMM模型API的使用

4.3 HMM模型基础

学习目标

  • 了解HMM模型解决的问题的主要特征
  • 知道HMM模型的两个重要假设
  • 指导HMM观测序列的生成过程
  • 知道HMM模型的三个基本问题

1 什么样的问题需要HMM模型

首先我们来看看什么样的问题解决可以用HMM模型。使用HMM模型时我们的问题一般有这两个特征:

  • 1)我们的问题是基于序列的,比如时间序列,或者状态序列。

  • 2)我们的问题中有两类数据,

    • 一类序列数据是可以观测到的,即观测序列
    • 而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列

有了这两个特征,那么这个问题一般可以用HMM模型来尝试解决。这样的问题在实际生活中是很多的。

  • 比如:我现在给大家写课件,我在键盘上敲出来的一系列字符就是观测序列,而我实际想写的一段话就是隐藏状态序列,输入法的任务就是从敲入的一系列字符尽可能的猜测我要写的一段话,并把最可能的词语放在最前面让我选择,这就可以看做一个HMM模型了。

  • 再举一个,假如我上课讲课,我发出的一串连续的声音就是观测序列,而我实际要表达的一段话就是隐藏状态序列,你大脑的任务,就是从这一串连续的声音中判断出我最可能要表达的话的内容。

从这些例子中,我们可以发现,HMM模型可以无处不在。但是上面的描述还不精确,下面我们用精确的数学符号来表述我们的HMM模型。

2 HMM模型的定义

对于HMM模型,首先我们假设Q是所有可能的隐藏状态的集合,V是所有可能的观测状态的集合,即:

  • Q=q1,q2,...,qNQ={q_1,q_2,...,q_N}Q=q​1​​,q​2​​,...,q​N​​
  • V=v1,v2,...vMV={v_1,v_2,...v_M}V=v​1​​,v​2​​,...v​M​​

其中,N是可能的隐藏状态数,M是所有的可能的观察状态数。

对于一个长度为T的序列,i是对应的状态序列, O是对应的观察序列,即:

  • i=i1,i2,...,iTi={i_1,i_2,...,i_T}i=i​1​​,i​2​​,...,i​T​​
  • O=o1,o2,...oTO={o_1,o_2,...o_T}O=o​1​​,o​2​​,...o​T​​

其中,任意一个隐藏状态it∈Qi_t \in Qi​t​​∈Qot∈Vo_t\in Vo​t​​∈V

HMM模型做了两个很重要的假设如下:

1) 齐次马尔科夫链假设。

  • 任意时刻的隐藏状态只依赖于它前一个隐藏状态。
    • 当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。

    • 但是这样假设的好处就是模型简单,便于求解。

    • 如果在时刻t的隐藏状态是it=qii_t=q_ii​t​​=q​i​​t+1t+1t+1it+1=qji_{t+1}=q_ji​t+1​​=q​j​​aija_{ij}a​ij​​

      • aij=P(it+1=qj∣it=qi)a_{ij}=P(i_{t+1}= q_j | i_t=q_i)a​ij​​=P(i​t+1​​=q​j​​∣i​t​​=q​i​​)
    • 这样aija_{ij}a​ij​​

      • A=[aij]N×NA=[a_{ij}]_{N \times N}A=[a​ij​​]​N×N​​

2) 观测独立性假设。

  • 即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。

    • 如果在时刻t的隐藏状态是it=qji_t=q_ji​t​​=q​j​​ot=vko_t=v_ko​t​​=v​k​​vkv_kv​k​​qjq_jq​j​​bj(k)b_j(k)b​j​​(k)

      • bj(k)=P(ot=vk∣it=qj)b_j(k)=P(o_t=v_k|i_t=q_j)b​j​​(k)=P(o​t​​=v​k​​∣i​t​​=q​j​​)
    • 这样bj(k)b_j(k)b​j​​(k)

      • B=[bj(k)]N×MB=[b_j(k)]_{N \times M}B=[b​j​​(k)]​N×M​​
    • 除此之外,我们需要一组在时刻t=1的隐藏状态概率分布Π\PiΠ

      • Π=[Πi]N \Pi =[\Pi_i]_NΠ=[Π​i​​]​N​​

      其中Πi=P(i1=qi)\Pi _i=P(i_1=q_i)Π​i​​=P(i​1​​=q​i​​)

一个HMM模型,可以由隐藏状态初始概率分布Π\PiΠ

Π\PiΠ

因此,HMM模型可以由一个三元组λ\lambdaλ

  • λ=(A,B,Π)= \lambda =(A,B, \Pi )=λ=(A,B,Π)=

3 一个HMM模型实例

下面我们用一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型。

例子来源于李航的《统计学习方法》。

假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

盒子123
红球数547
白球数563

按照下面的方法从盒子里抽球,开始的时候,

  • 从第一个盒子抽球的概率是0.2,
  • 从第二个盒子抽球的概率是0.4,
  • 从第三个盒子抽球的概率是0.4。

以这个概率抽一次球后,将球放回。

然后从当前盒子转移到下一个盒子进行抽球。规则是:

  • 如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。
  • 如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球