(补) HMM 求解参数-状态转移矩阵 A
昨天在看的时候, 才发现, HMM参数求解给忘了 状态转移矩阵A的求解, 我以为我做了...好气哦, 不多比比, 直接来.
A 是状态转移矩阵, 表示在 已知前一个状态下, 求解后一个概率(写出来就是一个条件概率)
最基础的条件概率公式哈
分母 可以通过前面的 F/B 算法计算出来, 所以问题在于如何计算 这个联合概率
估计 A-理论
由上, 我们的目标是如何计算 , 在观测值已知的情况下.
由 是一 一对应的关系, 通过贝叶斯公式可以得到:
跟之前同样的套路, 对 x 进行区间拆分, 即:
换个变量顺序哈, 为了把 看为一个整体, 求解技巧是为了最终形式简洁
展开写:
同样根据 D-separation性质 可将与条件概率无关的独立变量进行省略, 化简得到:
这几个项, 不就刚好对应: Forward, 状态转移矩阵, 发射概率矩阵, Backwark 呀.
也就是可以算出所有的:
....
再进行一个归一化的操作, 则就算出了 的概率了, (用来估计A要用到的)
估计A-栗子
考虑 Z, 假设有3个样本, 通过之前的 F/B 算法, 可以得到每个z_i 的概率分布.
样本1
z1 | z2 | z3 | z4 | z5 | z6 |
---|---|---|---|---|---|
0.6 | 0.5 | 0.6 | 0.7 | 0.6 | 0.2 |
0.3 | 0.3 | 0.2 | 0.2 | 0.1 | 0.3 |
0.1 | 0.2 | 0.2 | 0.1 | 0.3 | 0.5 |
样本2
z1 | z2 | z3 | z4 | z5 |
---|---|---|---|---|
0.5 | 0.4 | 0.3 | 0.6 | 0.3 |
0.3 | 0.4 | 0.5 | 0.3 | 0.1 |
0.2 | 0.2 | 0.2 | 0.1 | 0.6 |
样本3
z1 | z2 | z3 | z4 |
---|---|---|---|
0.5 | 0.1 | 0.3 | 0.5 |
0.3 | 0.2 | 0.3 | 0.1 |
0.2 | 0.7 | 0.3 | 0.4 |
我们要计算的是 这个概率. 根据上面的数据, 方法就是前面的理论推导的式子, 过程跟 HMM的第2篇, 已知Z 来计算是差不多的过程. 这里就不展开了.
最后呢就计算出来状态转移矩阵 A.
用到的EM算法
随机初始化 参数
while not 收敛:
E-step: (核心是为了计算 p(z|x)
根据已知的 计算
// 用 F/B 算法求解
M-step:
参数更新
不搞了 HMM 就先搞到这, 我感觉之前我还挺清晰的, 写着写着, 这些概率公式, 总感觉留有bug, 真心觉得, 概率模型贼不好理解, 一不小心就自己个就弄混了, 什么条件概率, 全概率, 贝叶斯, 条件独立 , 序列, 值概率....自己都写崩溃了, 赶紧撤退, 战略性放弃一波, 再恶补一波概率论先.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通