机器学习系列:隐马尔可夫模型 (3)
接上一篇机器学习序列隐马尔可夫模型(2)本篇主要讲解隐马尔可夫模型的解码问题.五、解码问题解码问题或预测问题是在HMM学习问题已经解决的情况下即模型参数已确定对于某个观测序列O求概率最大的那个状态序列。解码问题一般可以用两种算法处理即近似算法和Viterbi算法。1. 近似算法近似算法是通过比较t时刻的概率值获取最有可能出现的状态从而构成一个状态序列把它作为预测的结果。时刻t最有可能的状态从而得到预测的状态序列。近似算法计算过程简单但不能保证它是整体上的最优状态序列而且其预测的序列可能有实际不发生的部分即有可能出现转移概率为0的相邻状态。下面给出的Viterbi算法可以获得整体上的最优状态序列。2.Viterbi算法Viterbi算法维特比算法是通过动态规划方法在各个状态节点中求出一条概率最大的路径其中的每一条路径即对应着一个状态序列。首先将各个时刻上的所有可能的状态结果用节点表示于是可以绘制出如下图所示的网状图其中每个时刻隐藏状态有N中选择也就是有N个对应的节点。解码问题的目标是在给定观测序列的情况下要在这个网格图中找到一条最佳路径使得概率最大。问题详述如下问题 已知模型参数给定观测序列, 求最优隐藏状态序列, 即因为所以问题等价于:为用动态规划方法求解问题这里先对每个节点定义阶段目标函数即定义在时刻t状态为的所有单个路径中概率最大值:如上图所示这里的表示t时刻的第i个节点的目标函数。因为所以就是最优路径中最后时刻T处选择的节点记以下的任务是依次求出, 为此先推导阶段目标函数的递推过程。由的定义有于是得到递推式,在前面给出的网状图中若在最优路径中已确定t时刻的状态是 欲回溯上一时刻t-1处最优路径中的状态等效地考虑如下目标函数于是定义一个时刻t处状态为时其上一时刻(t-1)处的最优状态序号函数最后可以得到Viterbi算法:----------------------------------------------Viterbi算法-------------------------------------------------------------------输入模型模型 观测序列输出最优状态序列1. 初始化2. 对于 t 2, 3, ..., T 依次递推 3. 最终路径回溯1 初始2 对t T-1, T-2, ..., 1 依次递推4. 求出最优状态序列--------------------------------------------------------------------------------------------------------------------------------以下给出Viterbi算法的MATLAB实现function predI myHMMviterbi(O, PIest,Aest, Best) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % HMM模型之解码问题 % % myHMMviterbi: 使用维特比算法解码找出最可能的隐藏状态序列 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %输入 % O: 1*T, 1个长度是T的观测序列矩阵 % PIest: N*1,初始状态概率的估计 % Aest N*N, A的估计 % Best N*M, B的估计 %输出 % predI: 最优状态序列 %2026.6.11 MiaoZhh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [s,T]size(O); [numStates,numObserv]size(Best); deltazeros(T,numStates); psizeros(T,numStates); %标记概率最大的那个状态下标 %% 各节点最大概率计算 %初始值计算 for i1:numStates delta(1,i)(Best(i,O(1,1)).*PIest(i,1)); psi(1,i)0; %表示无前驱 end %递推 for t1:T-1 AtAest.*delta(t,:); for i1:numStates [Max,idx]max(At(:,i)); delta(t1,i)Best(i,O(1,t1))*Max; psi(t1,i)idx; end end %% 最优路径回溯 predIzeros(1,T); %初始 tT [Max,predI(:,T)]max(delta(T,:)); %反推 for tT:(-1):2 predI(t-1)psi(t,predI(t)); end end六、验证以下在MATLAB中通过一个具体的例子来验证前面给出的学习问题和解码问题的算法。直接给出主函数如下function main() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %验证HMM模型之学习问题的主函数 %其中调用的函数HMMgenerate用来生成在给定参数下的一组观测序列 %调用的函数myHMMtrain用来训练HMM模型以获得参数的估计值PIest Aest, Best %2026.8.14 MiaoZhh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all clc % 定义状态转移矩阵,发射矩阵和初始状态概率向量 A [0.9 0.1; 0.05 0.95]; % 2状态转移概率 B [1/6,1/6,1/6,1/6,1/6,1/6; % 状态1发射概率均匀分布 7/12,1/12,1/12,1/12,1/12,1/12]; % 状态2发射概率偏向1 PI[0.9;0.1]; % 初始状态概率向量偏向2 % 生成观测序列和真实状态序列 T1000; %序列长度 [O, I] myHMMgenerate(T, PI, A, B); % 初始猜测矩阵需满足概率分布 A_GUESS [0.85 0.15; 0.1 0.9]; B_GUESS [0.17 0.16 0.17 0.16 0.17 0.17; % 状态1 0.6 0.08 0.08 0.08 0.08 0.08]; % 状态2 PI_GUESS[0.5;0.5]; % 执行Baum-Welch算法 [PIest Aest, Best] myHMMtrain(O, PI_GUESS, A_GUESS, B_GUESS); % 对比真实与估计参数 disp(Baum-Welch估计的初始状态概率向量:); disp(PIest); disp(Baum-Welch估计的转移矩阵:); disp(Aest); disp(Baum-Welch估计的发射矩阵:); disp(Best); %% 预测 %用Viterbi算法预测 [Os, Is] hmmgenerate(100,Aest, Best); predI myHMMviterbi(Os, PIest,Aest, Best); %计算准确率如果有真实状态对比 trueStatesIs; likelyStatespredI; accuracy sum(likelyStates trueStates)/ numel(trueStates); fprintf(解码准确率: %.2f%%\n, accuracy * 100); end运行效果如下其中的myHMMgenerate函数的功能是用来产生一组给定模型参数情况下定长的观测序列和状态序列。这里我们模仿了MATLAB工具箱中的函数hmmgenerate. 以下给出其实现部分function [O, I] myHMMgenerate(T, PI, A, B) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %myHMMgenerate: 函数生成 一个HMM模型的状态序列和观测序列 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %输入 % T: 1*1, 序列长度 % PI: N*1参数PI的初步状态概率向量 % A: N*N, 状态转移概率矩阵 % B: N*M观测概率矩阵(发射概率矩阵) %输出 % O: 1*T, 长度是T的观测序列向量 % I: 1*T, 长度是T的观测序列向量 %2026.8.14 MiaoZhh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% O zeros(1,T); I zeros(1,T); [numStates,numEmissions] size(B); % create three random sequences, one for initial state, one for state changes, one for emission initstatechange rand(1); statechange rand(1,T); randvals rand(1,T); % calculate cumulative probabilities PIc cumsum(PI,1); Ac cumsum(A,2); Bc cumsum(B,2); % normalize these just in case they dont sum to 1. PIcPIc./repmat(PIc(end,:),numStates,1); Ac Ac./repmat(Ac(:,end),1,numStates); Bc Bc./repmat(Bc(:,end),1,numEmissions); %PI initstate 1; for innerState numStates-1:-1:1 if initstatechange PIc(innerState) initstate innerState 1; break; end end % Assume that we start in state initstate. currentstate initstate; % main loop for count 1:T % calculate state transition stateVal statechange(count); state 1; for innerState numStates-1:-1:1 if stateVal Ac(currentstate,innerState) state innerState 1; break; end end % calculate emission val randvals(count); emit 1; for inner numEmissions-1:-1:1 if val Bc(state,inner) emit inner 1; break; end end % add values and states to output O(count) emit; I(count) state; currentstate state; end end《机器学习序列隐马尔可夫模型 》部分到此结束谢谢浏览。

相关新闻

凯迪拉克V-16:1930年代超越劳斯莱斯的工程奇迹与商业启示

凯迪拉克V-16:1930年代超越劳斯莱斯的工程奇迹与商业启示

1. 一个被遗忘的“王中王”:凯迪拉克的世纪之巅 聊起顶级豪华车,今天大家脑子里蹦出来的,大概率是劳斯莱斯、宾利,或者迈巴赫。凯迪拉克?它似乎已经稳稳地坐在了“二线豪华”的牌桌上,主打一个性价比和错位…

2026/8/18 12:15:36 阅读更多 →
做了5年项目管理,我最想劝新人改掉这7个习惯

做了5年项目管理,我最想劝新人改掉这7个习惯

刚做项目经理那会儿,我也觉得,项目经理最重要的就是盯。 任务要盯,进度要盯,成员要盯,需求要盯,风险要盯。 群里半天没人回复,就担心事情没人推进; 任务快到期了,就忍不…

2026/8/18 12:15:36 阅读更多 →
【数据结构学习2】单向链表的使用与进阶练习以及双向链表和内核链表(【C语言】实现)

【数据结构学习2】单向链表的使用与进阶练习以及双向链表和内核链表(【C语言】实现)

文章目录一、单向链表的使用与进阶练习1.1 单向链表中间结点的查找1.2 单向链表倒数K个结点的查找1.3 删除单向链表中的某个值1.4 单向链表逆序1.5 单向链表排序1.6 单向链表的环状链表1.6.1 创建环状链表1.6.2 判断是否为环状链表1.6.3 找出环状链表的入口1.6.4 环状链表的长度…

2026/8/18 12:15:36 阅读更多 →

最新新闻

英雄联盟自动选人、技能计时与战绩分析一条龙:League Akari 完整上手指南

英雄联盟自动选人、技能计时与战绩分析一条龙:League Akari 完整上手指南

英雄联盟自动选人、技能计时与战绩分析一条龙:League Akari 完整上手指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 深夜十一…

2026/8/18 12:53:58 阅读更多 →
从AI工具使用者到能力架构师:构建个人Harness架构的实战指南

从AI工具使用者到能力架构师:构建个人Harness架构的实战指南

最近在技术社区里,一个名为“Harness”的架构概念被频繁提及,尤其是在讨论如何将AI大模型能力系统化地融入开发、学习和职业发展时。很多开发者,无论是刚接触AI的新手,还是寻求技术突破的资深工程师,都面临一个共同的困…

2026/8/18 12:53:58 阅读更多 →
我花3小时用Java地址解析库改造订单系统,收货地址识别从此告别正则硬扛

我花3小时用Java地址解析库改造订单系统,收货地址识别从此告别正则硬扛

我花3小时用Java地址解析库改造订单系统,收货地址识别从此告别正则硬扛 【免费下载链接】address-parse Java 版智能解析收货地址 项目地址: https://gitcode.com/gh_mirrors/addr/address-parse 晚上十一点,我盯着屏幕上第三十二行乱成一团的订单…

2026/8/18 12:53:58 阅读更多 →
AI长视频生成实战:导演台与For循环工作流解析

AI长视频生成实战:导演台与For循环工作流解析

你试过用 AI 生成视频吗?是不是经常遇到这样的场景:好不容易构思了一个精彩的脚本,满怀期待地交给 AI,结果它只给你生成了 5 秒、10 秒的片段。你想做一个一分钟的短视频,它告诉你“上下文太长,处理不了”&…

2026/8/18 12:53:58 阅读更多 →
重装系统后装 Office 还要折腾两小时?这款开源工具把下载安装激活压缩成一条命令

重装系统后装 Office 还要折腾两小时?这款开源工具把下载安装激活压缩成一条命令

重装系统后装 Office 还要折腾两小时?这款开源工具把下载安装激活压缩成一条命令 【免费下载链接】LKY_OfficeTools 一键自动化 下载、安装、激活 Office 的利器。 项目地址: https://gitcode.com/GitHub_Trending/lk/LKY_OfficeTools LKY Office Tools 是一…

2026/8/18 12:53:58 阅读更多 →
Rokid AIUI 快速入门教程

Rokid AIUI 快速入门教程

AIUI快速入门 一、初始化AIUI项目 1.在设备终端(terminal)输入 npm create yodaos-pkg/aiui-agentlatest my-agentcd my-agent #进入名为 my-agent 的文件夹 ls #列出当前文件夹里的文件和子文件夹2.文件所在文件位置 二、使用Craft(AIUI …

2026/8/18 12:52:58 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →