233搞懂HMM(隐马尔可夫)

让你一文轻松搞懂HMM HMM 隐马尔可夫模型 1. 基本概念: 隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的随机状态序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔科夫链随机生成的状态序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置又可以看做是一个时刻。 如上图所示,用 t = 1, 2, … ,n 来表示时间序列,用Z来表示所有所有可能的状态值 阅读详情

有向图模型,主要用于时序数据建模,在语音识别,自然语言处理等领域,以及在知识图谱命名实体识别中的序列标注,有广泛应用。

HMM模型由两部分组成, 观测变量x与 状态变量y。其中状态变量又称为隐变量,常常被作为序列标注结果

2条性质

马尔可夫链性质:

  1. t时刻的状态变量y只由t-1时刻的状态决定,而与t-2及之前的无关
  2. t时刻的观测变量仅由t时刻的状态变量决定

3个参数

  1. 状态转移概率矩阵:
    为NxN的矩阵,矩阵里的每个值记录从当前状态转移到其它状态的概率
  2. 输出观测概率矩阵:
    为NxM的矩阵,M为观测值结果的个数
    矩阵记录从当前状态到每一个观测值的概率
  3. 初始状态概率
    在t=1初始时刻,各状态出现的概率。

给定隐马尔可夫模型 λ \mathbf{\lambda} λ,生成观测序列的过程:

  1. 设置t=1,根据初始状态概率参数,选择初始状态
  2. 根据输出观测概率矩阵,得出当前状态变量的观测变量
  3. 根据状态转移概率矩阵,得出当前状态变量的下一个状态变量
  4. 重复2-3过程,直到结束

3个问题

  1. 概率计算问题。给定模型 λ = ( A , B , π ) \lambda=\left(A,B,\pi\right) λ=(A,B,π)和观测序列 O = o 1 , o 2 , … , o T O=o_1,o_2,…,o_T O=o1​,o2​,…,oT​,计算在模型 λ \lambda λ下观测序列 O O O出现的概率 P ( O | λ ) P\left(O\middle|\lambda\right) P(O∣λ)。前向-后向算法是通过递推地计算前向-后向概率可以高效地进行隐马尔可夫模型的概率计算。

  2. 学习问题。已知观测序列 O = o 1 , o 2 , … , o T O=o_1,o_2,…,o_T O=o1​,o2​,…,oT​,估计模型 λ = ( A , B , π ) \lambda=\left(A,B,\pi\right) λ=(A,B,π)参数,使得在该模型下观测序列概率 P ( O | λ ) P\left(O\middle|\lambda\right) P(O∣λ)最大。即用极大似然估计的方法估计参数。EM算法可以高效地对隐马尔可夫模型进行训练。它是一种非监督学习算法。

  3. 预测问题。已知模型 λ = ( A , B , π ) \lambda=\left(A,B,\pi\right) λ=(A,B,π)和观测序列 O = o 1 , o 2 , … , o T O=o_1,o_2,…,o_T O=o1​,o2​,…,oT​,求对给定观测序列条件概率 P ( I | O ) P\left(I\middle| O\right) P(I∣O)最大的状态序列 I = i 1 , i 2 , … , i T I=i_1,i_2,…,i_T I=i1​,i2​,…,iT​。维特比算法应用动态规划高效地求解最优路径,即概率最大的状态序列。

维特比算法

输入:HMM模型参数,观测序列
输出:状态序列
算法流程:
时刻由观测序列长度决定
δ \delta δ用于记录每一时刻各状态的概率
ψ \psi ψ用于记录前一个时刻的状态,便于回溯

  1. 初始化, δ \delta δ和 ψ \psi ψ, ψ \psi ψ置为0
  2. 递归(动态规则,状态转移矩阵),
    现有t-1时刻,各状态出现的概率。
    根据状态转移矩阵,分别计算其转移到各个状态的概率,取最大值乘以输出观测概率
  3. 取累乘概率的最大值,并进行回溯,得到状态序列
class HiddenMarkov:
    def __self__(self):
        self.alphas = None
        self.forward_P = None
        self.betas = None
        self.backward_P = None
        
    def viterbi(self, Q, V, A, B, O, PI):
        # 状态集合的大小
        N = len(Q)
        # 观测序列的大小
        M = len(O)
        
        deltas = np.zeros((N, M))
        psi = np.zeros((N, M))
        I = np.zeros((1, M))
        
        # 遍历预测序列,即遍历全部时刻
        for t in range(M):
            # 得到这个观测序列值在观测集合里的索引 
            idxO= V.index(O[t])
            
            # 每一个时刻遍历所有状态
            for i in range(N):
                if t == 0:
                    deltas[i][t] = PI[0][i] * B[i][idxO]
                    psi[i][t] = 0
                else:
                    # t-1时刻所有的状态 与 转移到第i个状态的概率 对应相乘取最大值
                    # 再与输出预测相乘
                    deltas[i][t] = np.max(
                       np.multiply([delta[t-1] for delta in deltas], [a[i] for a in A])) * B[i][idxO]
                    
                    psi[i][t] = np.argmax(
                       np.multiply([delta[t-1] for delta in deltas], [a[i] for a in A]))
        # 得到最后一时刻的最大概率的下标
        I[0][M-1] = np.argmax([delta[M-1] for delta in deltas])
        # 由后向前递归得到其它结点
        for t in range(M - 2, -1, -1):
            I[0][t] = psi[int(I[0][t+1])][t+1]
        
        # 输出最优路径
        print('最优路径是:', "->".join([str(int(i + 1)) for i in I[0]]))
Q = [1, 2, 3]  # 状态序列
V = ['红', '白']
A = [[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]] # 状态转移
B = [[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]]  # 输出观测
O = ['红', '白', '红']  # 观测序列
PI = [[0.2, 0.4, 0.4]]  # 初始概率分布

HMM = HiddenMarkov()
HMM.viterbi(Q, V, A, B, O, PI)

参考资料

  1. 《机器学习》周志华
  2. 《统计学习方法》李航
  3. 统计学习方法代码实现
(2-3)马尔可夫决策过程(MDP):贝尔曼方程 贝尔曼方程(Bellman Equation)是强化学习中的关键方程,用于描述值函数之间的关系。 阅读详情

相关推荐

隐马尔科夫模型(HMM)

出处:视频截图,b站shuhuai008 目录 代码实现:hmmlearn 1. 背景 1.1 数理统计学两大派 1.2 概率图 2. HMM 2.1 一个模型,两个假设,三个问题 2.2 Evaluation问题 (1)前向 (2)后向 2.3 Learning问题 2.4 Decoding问题 3. 总结 3.1 HMM 3.2 动态模型(Dynamic Mo...

满腹的小不甘 3万+

HMM与CRF

HMM与CRF 认识HMM与CRF模型 学习目标 了解HMM与CRF模型的输入和输出. 了解HMM与CRF模型的作用. 了解HMM与CRF模型的使用过程. 了解HMM与CRF模型之间的差异. 了解HMM和CRF的发展现状. HMM模型的输入和输出 HMM(Hidden Markov Model), 中文称作隐含马尔科夫模型, 因俄国数学家马尔可夫而得名. 它一般以文本序列数据为输入, 以该序列对应的隐含序列为输出. 什么是隐含序列: 序列数据中每个单元包含的隐性信息, 这些隐性信息...

码python的Vinsmoke 638

隐马尔可夫模型(HMM)——从理论证明、算法实现到实际应用

实心圆之间的箭头,表示隐状态转移,比如图中的红色箭头,表示t-1时刻状态Y1,在t时刻转移为状态Y2。(1)对于时刻t=1,也就是第一天,可能的状态为{下雨,晴天},小宝第一天选择的是郊游,另外,从Start开始只有一条路径到达晴天,所以。的位置上,因为隐状态的初始分布式是已知的,而且隐状态到观测状态的概率也是已知的,所以此时你可沿着箭头方向向下走一步生成观测值。现在固定t时刻的状态,假设为。(下雨)=P(x1=郊游,y1=下雨)=P(x1=郊游|y1=下雨)P(y1=下雨)=0.1*0.6=0.06。

L 5749

详解隐马尔可夫模型(HMM)中的维特比算法

笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 4. 隐马尔可夫模型与序列标注 第3章的n元语法模型从词语接续的流畅度出发,为全切分词网中的二元接续打分,进而利用维特比算法求解似然概率最大的路径。这种词语级别的模型无法应对 OOV(Out of Vocabulary,即未登录词) 问题: 00V在最初的全切分阶段就已经不可能进人词网了,更何谈召回。 例如下面一句: 头上戴着束发嵌宝紫金冠,齐眉勒着二龙抢珠金抹额 加粗的就是相...

gman344的博客 2695

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 253

D触发器(D Flip-Flop)与D锁存器(D Latch)

在解释这个练习题之前,我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。这将帮助我们理解所提到的练习。

weixin_65190179的博客 9158

一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现

一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现1 隐马尔科夫模型1.1 HMM解决的问题1.2 HMM模型的定义1.2.1HMM的两个假设1.2.2 HMM模型1.3 HMM模型的三个问题概率估计功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定...

Elenstone的博客 1万+

集成电路设计笔记(七)UVLO设计

1. 什么是UVLO 欠压锁定(Undervoltage-Lockout)简称UVLO,是电子设备中在电源电压低于正常工程准位时,切断电源的电路。在嵌入式系统中常会用UVLO监控电池电压,若电压低于一定值,会直接切断电源,保护嵌入式系统的电路。 许多电子设备中都有UVLO的功能,例如在镇流器中就有UVLO电路,若电压过低时直接切断电源。 UVLO就是低电压锁定; 低压关断. 欠压关断模式是当供电电压低于IC的开启门限电压时的一种保护模式。欠压关断模式可保证IC在供电电压不足时不致于被损坏。一个低电压锁定(

ccbirds 2万+

隐马尔科夫模型基础

隐马尔科夫模型基础

joey_hu0922的博客 9109

【SOFA】SOFA框架+Win10+VS2019 配置

SOFA (Simulation Open Framework Architecture)官网 SOFA 是一个开源的仿真框架,用于实时的物理仿真,而且主要针对医学上的仿真。主要用于研究人员开发新的算法,也可以作为一个有效的快速成型工具或是物理引擎。 官网中给出的配置方法写的很清晰,有着各个库或者软件的版本要求,仔细看按版本要求来 官网配置地址 官网给了两种方 1.通过脚本自动配置 2. 自己下载相关库通过CMake进行生成 第一种 没使用,不知道是否好使,因为如果其中有下载的东西,国内不一定能成功,大家可

GordonWei 5259

从时序博弈到数据稳定:CS1237驱动中的信号滤波与卡尔曼实践

本文探讨了CS1237高精度ADC驱动在复杂工业环境中的信号处理挑战,重点介绍了一阶滤波与自适应卡尔曼滤波算法的实践应用。通过参数优化和动态调整策略,有效提升了数据稳定性和抗干扰能力,为嵌入式系统在噪声环境下的精密测量提供了可靠解决方案。

rnn9storyteller的博客 862

HMM隐马尔科夫模型

最近课题上需要用到HMM,网上搜了很多文章,发现这篇文讲得通俗易懂,转载过来。 本文转载自:http://www.cnblogs.com/skyme/p/4651331.html 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模

yearningseeker的博客 1262

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 526

机器学习基础 HMM模型(隐马尔科夫)

在机器学习算法中,马尔可夫链(Markov chain)是个很重要的概念。马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈·马尔可夫(俄语:Андрей Андреевич Марков)得名。马尔科夫链即为状态空间中从一个状态到另一个状态转换的随机过程。该过程要求具备“无记忆”的性质:马尔科夫链作为实际过程的统计模型具有许多应用。在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态

mengxianglong123的博客 1万+

Arduino与Proteus仿真实例-LCD2004-I2C(PCF8574)驱动仿真

LCD2004-I2C(PCF8574)驱动仿真 PCF8574/74A 通过两线双向 I2C 总线(串行时钟 (SCL)、串行数据 (SDA))提供通用远程 I/O 扩展。 LCD2004,即2004字符型液晶显示器,是一种点阵模块,用于显示字母、数字、字符等。 它由 5x8 个点阵位置组成; 每个位置可以显示一个字符。 两个字符之间有一个点间距,行之间有一个空格,从而将字符和行分开。 模型 2004 表示它显示 4 行,每行 20 个字符。 在前面的实例中对PCF8574和LCD2004的已经做了详细介

视觉与物联智能 1165

【局部规划模块曲线算法】曲线平滑介绍

本文先对轨迹平滑问题做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容(1)适合给移动机器人运动的路径【满足运动学,高阶平滑】(2)高阶的运动学不能够突变的【至少三阶的加速度不能突变,最好四阶的jerk和五阶的snap也不能突变】(3)在转弯的地方不会停下来(4)加减速均衡,节省能量(5)节省时间的。

qq_35635374的博客 5714

nlp基础—7.隐马尔可夫模型(HMM算法)

文章目录引言一、隐马尔可夫模型的定义1. 两个集合(序列)2. 两个基本假设3. 三个参数二、隐马尔科夫模型的三个基本问题1. 概率计算问题1.1 直接计算法1.2 前向算法1.3 后向算法2. HMM的学习问题2.1 监督学习算法2.2 非监督学习算法—Baum-Welch算法3. HMM的预测问题3.1 近似算法3.2 维特比算法 引言   HMM算法的知识体系如下: 可以总结为两个基本假设,两个集合(序列),三个参数,三个基本问题。 一、隐马尔可夫模型的定义   隐马尔科夫模型是关于时序的概率模型,

柳杰的博客 1730

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

隐马尔可夫学习笔记(一)

隐马尔可夫模型学习笔记(一) 前言 学习隐马尔可夫模型时,最大的困难便是一堆公式与实际问题对应不上号。原因可能还是在于对概率论的理解太表面,且隐马尔可夫模型考虑了时间因素,显然这样的随机过程一时半会是难以形象的理解的。因此,本文采用先举例,后定义公式的方式来学习隐马尔可夫模型。 思考 隐马尔可夫模型 当然,我们还是首先需要知道隐马尔可夫模型(HMM)在统计学习中的地位和应用。参考书本

Demon-初来驾到 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

gmm中隐变量是什么的_浅谈MFCC/HMM/GMM/EM/LM

GMM和HMM虽然都是MM,但这两个MM其实没啥关系。GMM(Gaussian Mixture Model)混合高斯模型,就是一堆不同分布的高斯模型按一定比例组合在一起,用来对特征进行分类;HMM(Hidden Markov Model)是隐马尔可夫模型,用来对序列进行建模,从一个观测序列,推出对应的状态序列,也就是“由果找因”。这里的“因”一般是隐藏的,无法简单的看出来的(除非你有透视眼),所以...

weixin_30431137的博客 568

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

nlp(贪心学院)——时序模型、HMM、隐变量模型、EM算法

任务225: 时序模型 随时间维度变化的 每时每刻有相关性(t时刻数据t+1时刻数据有相关性) 时序数据长度不确定 时序数据:如股票价格、语音、文本、温度 任务226: HMM的介绍 观测值、隐式变量 z是一个隐式的状态 可以是生成模型,从状态生成观测值 也可以是判别模型 任务227: HMM的应用例子 掷硬币案例 A硬币出现正面的概率是μ1\mu_{1}μ1​ B硬币出现正面的概率是μ2\mu_{2}μ2​ 小明和我隔着一块不透明的布 小明有自己的顺序投A还是投B,我只能看到硬币最后是正面还是反面朝

Grateful_Dead424的博客 1594

史上最详细最容易理解的HMM文章

http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models wiki上一个比较好的HMM例子 分类 隐马尔科夫模型    HMM(隐马尔科夫模型)是自然语言处理中的一个基本模型,用途比较广泛,如汉语分词、词性标注及语音识别等,在NLP中占有很重要的地位。网上关于HMM的介绍讲解文档很多,我自己当时开始看的时

Flying Dreams 6万+

机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)

     为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的。不得不说,网络上关于语音识别的通俗易懂教程太少,都是各种公式满天飞,很少有说具体细节的,当然了,那需要有实战经验才行。下面总结以下几点,对其有个宏观印象即可(以孤立词识别为例)。   一、每个单词的读音都对应一个HMM模...

weixin_34279184的博客 467

一文搞懂HMM(隐马尔可夫模型)

什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度。熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;反之,,熵越小,系统越有序,意味着具有确定和有规则的运动状态。熵的中文意思是热量被温度除的商。负熵是物质系统有序化,组织化,复杂化状态的一种度量。 熵最早来原于物理学. 德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种...

5179

HMM隐马尔可夫模型详解

1 隐马尔可夫模型HMM 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。 当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下降。 但是作为一个经典的模型,学习HMM的模型和对应算法,对我们解决问题建模的能力提高以及算法思路的拓展还是很好...

WeisongZhao 6万+

隐马尔可夫模型(HMM)攻略

隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价值。平时,经常能接触到涉及 HMM 的相关文章,一直没有仔细研究过,都是蜻蜓点水,因此,想花一点时间梳理下,加深理解,在此特别感谢 52nlp 对 HMM 的详细介绍。   考虑下面交通灯的例子

likelet的专栏 22万+

隐马尔可夫模型(HMM)详解

阅读原文 隐马尔可夫模型(Hidden Markov model, HMM)是一种结构最简单的动态贝叶斯网的生成模型,它也是一种著名的有向图模型。它是典型的自然语言中处理标注问题的统计机器学模型,本文将重点介绍这种经典的机器学习模型。 一、引言 假设有三个不同的骰子(6面、4面、8面),每次先从三个骰子里面选择一个,每个骰子选中的概率为1/3,如下图所示,重复上述过程,得到一串数...

Robin Hu的专栏 6万+
上一篇: 什么才是一个好的特征工程?
下一篇: 【AI-NLP】Transformer理论及源码理解
CodeSlogan
博客等级 码龄6年 4227粉丝 130原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeSlogan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值