机器学习:隐马尔可夫模型(HMM)
后续会回来补充代码
1 隐马尔可夫模型
隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程。
1.1 数学定义
隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成同一个观测从而产生观测随机序列的过程。隐藏的马尔可夫链随机生成状态序列,而每一个状态又生成一个观测。序列的每一个位置称作一个时刻。
隐马尔可夫模型可以由初始状态概率向量 π \pi π,状态转移矩阵 A A A和观测矩阵 B B B决定。 π \pi π和 A A A决定状态序列, B B B决定观测序列。隐马尔可夫模型可以记作: λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)。其各个部分的介绍如下:
记 Q = { q 1 , q 2 , … , q N } Q=\{q_{1},q_{2},\dots,q_{N}\} Q={q1,q2,…,qN}为所有可能的状态集合, V = { v 1 , v 2 , … , v M } V=\{v_{1}, v_{2},\dots,v_{M}\} V={v1,v2,…,vM}为所有可能的观测集合。假设目前得到的 T T T个时刻观测序列 O = ( o 1 , o 2 , … , o T ) O=(o_{1},o_{2},\dots,o_{T}) O=(o1,o2,…,oT),其对应的状态序列记为 I = ( i 1 , i 2 , … , i T ) I=(i_{1},i_{2},\dots,i_{T}) I=(i1,i2,…,iT)。状态序列是不可知的
状态转移矩阵 A = [ a i j ] N × N A=[a_{ij}]_{N\times N} A=[aij]N×N, 其中 a i j = P ( i t + 1 = q j ∣ i t = q i ) , i , j = 1 , 2 , … , N a_{ij}=P(i_{t+1}=q_{j}|i_{t}=q_{i}),i,j=1,2,\dots,N aij=P(it+1=qj∣it=qi),i,j=1,2,…,N,即为在时刻 t t t处于状态 q i q_{i} qi的条件下在时刻 t + 1 t+1 t+1转移到状态 q j q_{j} qj的概率。观测矩阵 B = [ b j ( k ) ] N × M B=[b_{j}(k)]_{N\times M} B=[bj(k)]N×M,其中 b j ( k ) = P ( o t = v k ∣ i t = q j ) , k = 1 , 2 , … , M , j = 1 , 2 , … , N b_{j}(k)=P(o_{t}=v_{k}|i_{t}=q_{j}),k=1,2,\dots,M,j=1,2,\dots,N bj(k)=P(ot=vk∣it=qj),k=1,2,…,M,j=1,2,…,N为时刻 t t t处于状态 q j q_{j} qj的条件下生成观测 v k v_{k} vk的概率。
初始状态变量 π = ( π i ) \pi=(\pi_{i}) π=(πi),其中 π i = P ( i 1 = q i ) , i = 1 , 2 , … , N \pi_{i}=P(i_{1}=q_{i}),i=1,2,\dots,N πi=P(i1=qi),i=1,2,…,N为初始时刻 t = 1 t=1 t=1处于状态 q i q_{i} qi的概率。
1.2 基本假设
- 齐次马尔可夫假设:隐藏的马尔科夫链在任意时刻 t t t的状态只依赖于其前一个时刻状态,与其他时刻的状态和观测无关,也与时刻 t t t无关: P ( i t ∣ i t − 1 , o t − 1 , … , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , … , T P(i_{t}|i_{t-1},o_{t-1},\dots,i_{1},o_{1})=P(i_{t}|i_{t-1}),t=1,2,\dots,T P(it∣it−1,ot−1,…,i1,o1)=P(it∣it−1),t=1,2,…,T
- 观测独立性假设:任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。
1.3 基本问题
- 概率计算问题:给定模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)和观测序列 O O O,计算该观测序列出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。求解该问题可以使用前向算法和后向算法,这里不详细介绍。
- 学习问题:已知观测序列 O O O,估计模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)最大。求解该问题主要使用Baum-Welch算法(这个算法是EM算法的一种特例,EM算法在三硬币模型上的推导过程参考:https://blog.csdn.net/yeshang_lady/article/details/132151771)。这里不再赘述。
- 预测问题:又被称为解码问题。已知模型 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B)和观测序列 O O O,求对给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(I∣O)最大的状态序列。这里主要介绍维特比算法。
2 预测问题
2.1 维特比算法
维特比算法是一个动态规划算法,其规划过程与前向算法类似。两个算法的区别在于:评估问题的前向算法会保留每一条路径的概率,最终结果是各概率之和;维特比算法是计算给定观测序列下最可能的隐藏状态序列,因此每一步都只保留概率最大的路径,最终结果是一条概率最大的路径。其算法流程如下:
输入: 模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , … , o T ) O=(o_{1},o_{2},\dots,o_{T}) O=(o1,o2,…,oT);
输出:最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , … , i T ∗ ) I^{*}=(i_{1}^{*},i_{2}^{*},\dots,i_{T}^{*}) I∗=(i1∗,i2∗,…,iT∗)。
步骤: (1)初始化 δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , … , N \delta_{1}(i)=\pi_{i}b_{i}(o_{1}),i=1,2,\dots,N δ1(i)=πibi(o1),i=1,2,…,N Ψ 1 ( i ) = 0 , i = 1 , 2 , … , N \Psi_{1}(i)=0,i=1,2,\dots,N Ψ1(i)=0,i=1,2,…,N(2)递推。对 t = 2 , 3 , … , T t=2,3,\dots,T t=2,3,…,T δ t ( i ) = m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , … , N \delta_{t}(i)=\underset {1\le j\le N}{max}[\delta_{t-1}(j)a_{ji}]b_{i}(o_{t}),i=1,2,\dots,N δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,…,N Ψ t ( i ) = a r g m a x 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , … , N \Psi_{t}(i)=arg \underset {1\le j \le N}{max}[\delta_{t-1}(j)a_{ji}]b_{i}(o_{t}),i=1,2,\dots,N Ψt(i)=arg1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,…,N(3)终止 P ∗ = m a x 1 ≤ j ≤ N δ T ( i ) P^{*}=\underset {1\le j\le N}{max}\delta_{T}(i) P∗=1≤j≤NmaxδT(i) i T ∗ = a r g m a x 1 ≤ j ≤ N [ δ T ( i ) ] i^{*}_{T}=arg \underset {1\le j\le N}{max} [\delta_{T}(i)] iT∗=arg1≤j≤Nmax[δT(i)](4)最优路径回溯。对 t = T − 1 , T − 2 , … , 1 t=T-1,T-2,\dots,1 t=T−1,T−2,…,1 i t ∗ = Ψ t + 1 ( i t + 1 ∗ ) i^{*}_{t}=\Psi_{t+1}(i^{*}_{t+1}) it∗=Ψt+1(it+1∗)求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , … , i T ∗ ) I^{*}=(i_{1}^{*},i_{2}^{*},\dots,i_{T}^{*}) I∗=(i1∗,i2∗,…,iT∗)
参考资料
- 《统计学习方法》
相关文章:
机器学习:隐马尔可夫模型(HMM)
后续会回来补充代码 1 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程。 1.1 数学定义 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成…...
使用插件实现pdf,word预览功能
效果 代码: 插件地址: https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…...
yolov5模型构建源码详细解读(yaml、parse_model等内容)
文章目录 前言一、yolov5文件说明二、yolov5调用模型构建位置三、模型yaml文件解析1、 yaml的backbone解读Conv模块参数解读C3模块参数解读 2、yaml的head解读Concat模块参数解读Detect模块参数解读 四、模型构建整体解读五、构建模型parse_model源码解读 前言 本文章记录yolo…...
Monodepth2和Lite-Mono准备数据集
以KITTI为例下载解压后放在/home/lwd/tmp/2011_09_26 cd /home/lwd/tmp/2011_09_26 ls输出 2011_09_26_drive_0001_sync 2011_09_26_drive_0002_sync 2011_09_26_drive_0005_sync python txt.py txt.py import os, sysalos.listdir(.) al.sort() fopen(train.txt, w) for a in…...
ML-fairness-gym入门教学
1、ML-fairness-gym简介 ML-fairness-gym是一个探索机器学习系统长期影响的工具。可以用于评估机器学习系统的公平性和评估静态数据集上针对各种输入的误差度量的差异。开源网站:GitHub - google/ml-fairness-gym 2、安装ML-fairness-gym(Windows&…...
结构体指针变量的使用
1、结构体指针的引用 #include<iostream> using namespace std;struct Student {int num;char name[32]; }; int main() {struct Student stu {1,"张三"};struct Student* p &stu;system("pause"); return 0; } 2、通过结构体指针访问结构体…...
解决oracle的em访问提示“使用不受支持的协议。”的bug
1. 设置oracle唯一名称 执行emctl时需要设置一个唯一的名称 否则提示 “Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name. ”中文意思为“未定义环境变量ORACLE_UNQNAME。 请将ORACLE_UNQNAME设置为数据库唯一名称/服务…...
编译工具:CMake(三)| 最简单的实例升级
编译工具:CMake(三)| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装:非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…...
20天学会rust(四)常见系统库的使用
前面已经学习了rust的基础知识,今天我们来学习rust强大的系统库,从此coding事半功倍。 集合 数组&可变长数组 在 Rust 中,有两种主要的数组类型:固定长度数组(Fixed-size Arrays)和可变长度数组&…...
drawio----输出pdf为图片大小无空白(图片插入论文)
自己在写论文插入图片时为了让论文图片放大不模糊,啥方法都试了,最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小,pdf的白边很大如下如所示,插入论文的时候后虽然放大不会模糊,但是白边很大会显…...
2021年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:字符统计 给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。 输入 输入包含一行,一个字符串,长度不超过1000。 输出 输出一行,包括出现次数最多的字符和该字符出现的次数,中间以…...
HCIP VRRP技术
一、VRRP概述 VRRP(Virtual Router Pedundancy Protocol)虚拟路由器冗余协议,既能够实现网关的备份,又能够解决多个网关之间互相冲突的问题,从而提高网络可靠性。 局域网中的用户的终端通常采用配置一个默认网关的形…...
JAVA AES ECB/CBC 加解密
JAVA AES ECB/CBC 加解密 1. AES ECB2. AES CBC 1. AES ECB package org.apache.jmeter.functions;/*** author yuyang*/import org.apache.commons.lang3.StringUtils; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;/*** a…...
Android FrameWork 层 Handler源码解析
Handler生产者-消费者模型 在android开发中,经常会在子线程中进行一些耗时操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。 其中:子线程、handler、主线程,其实构成了线程模型中经典的…...
list
目录 迭代器 介绍 种类 本质 介绍 模拟实现 注意点 代码 迭代器 介绍 在C中,迭代器(Iterators)是一种用于遍历容器(如数组、vector、list等)中元素的工具 无论容器的具体实现细节如何,访问容器中的元素的方…...
ABeam×Startup丨德硕管理咨询(深圳)创新研究团队前往灵境至维·既明科技进行拜访交流
近日,德硕管理咨询(深圳)(以下简称“ABeam-SZ”)创新研究团队一行前往灵境至维既明科技有限公司(以下简称“灵境至维”)进行拜访交流,探讨线上虚拟空间的商业模式。 现场合影 &…...
TCP的相关性质
文章目录 流量控制拥塞控制拥塞窗口 延迟应答捎带应答面向字节流粘包问题TCP的异常 流量控制 由于接收端处理数据的速度是有限的,如果发送端发的太快,那么接收端的缓冲区就可能会满。此时如果发送端还发数据,就会出现丢包现象,并…...
pointpillars在2D CNN引入自适应注意力机制
在给定的代码中,您想要引入自适应注意力机制。自适应注意力机制通常用于增强模型的感受野,从而帮助模型更好地捕捉特征之间的关系。在这里,我将展示如何在您的代码中引入自适应注意力机制,并提供详细的解释。 首先,让…...
【每日一题】1572. 矩阵对角线元素的和
【每日一题】1572. 矩阵对角线元素的和 1572. 矩阵对角线元素的和题目描述解题思路 1572. 矩阵对角线元素的和 题目描述 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&a…...
leetcode原题:检查子树
题目: 检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。 如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
