HMM模型

article/2025/11/6 2:45:53

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。隐马尔可夫模型(HMM)可以用五个元素来描述,包括2个状态集合和3个概率矩阵:1. 隐含状态 S、2. 可观测状态 O、3. 初始状态概率矩阵 π、4. 隐含状态转移概率矩阵 A、5. 观测状态转移概率矩阵 B 。
在这里插入图片描述

马尔科夫链

对于一个马尔可夫链来说,第n+1刻的状态只跟第n刻的状态有关,与第n-1,n-2,n-3,…等时刻的状态是没有任何关系的。

隐马尔科夫模型

对于上图,有两个行数据,这两列数据分布的特点,第一行是x行,第二行是o行,x行的某一个状态依赖于前一个状态,x行的每一个都指向o行其中的一个.

对于上图,一般把x行称为状态序列,o行称为观测序列,状态序列和观测序列是什么?
状态序列:隐藏的马尔科夫链随机生成的状态序列,称为状态序列。
观测序列:每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列
所以有马尔科夫模型定义:隐马尔可夫模型是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程。其中,状态之间的转换以及观测序列和状态序列之间都存在一定的概率关系。

HMM 表示

设Q是所有可能的状态的集合,V是所有可能的观测的集合。

Q=q1,q2,…,qN,V=v1,v2,…,vM
其中,N是可能的状态数,M是可能的观测数。

I是长度为T的状态序列,O是对应的观测序列。

I=(i1,i2,…,iT),O=(o1,o2,…,oT)
A是状态转移矩阵:A=[aij]N×N
i=1,2,…,N;j=1,2,…,N
其中,在时刻t,处于qi 状态的条件下在时刻t+1转移到状态qj 的概率:

aij=P(it+1=qj|it=qi)
B是观测概率矩阵:B=[bj(k)]N×M
k=1,2,…,M;j=1,2,…,N
其中,在时刻t处于状态qj 的条件下生成观测vk 的概率:

bj(k)=P(ot=vk|it=qj)
π是初始状态概率向量:π=(πi)
其中,πi=P(i1=qi)
隐马尔科夫模型由初始状态概率向量π、状态转移概率矩阵A和观测概率矩阵B决定。π和A决定状态序列,B决定观测序列。因此,隐马尔科夫模型λ可以由三元符号表示,即:λ=(A,B,π)。A,B,π称为隐马尔科夫模型的三要素。

两个假设

(1):设隐马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关。(齐次马尔科夫性假设)

(2):假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测和状态无关。(观测独立性假设)

示例

wiki上面有一个预测病人是否感冒的例子
想象一个乡村诊所,村名的身体状况要么健康要么发烧,他们只有问诊所的医生的才能知道是否发烧。医生通过询问村名的感觉去诊断他们是否发烧。村民自身的感觉有正常、头晕或冷。
假设一个病人每天来到诊所并告诉医生他的感觉。假设病人的健康状况是一个离散马尔可夫链。病人的状态有两种:健康和发烧,但医生不能直接观察到,这意味着状态对医生是不可见的。
每天病人会告诉医生自己有以下几种由他的健康状态决定的感觉的一种:正常、冷或头晕。这些是观察结果。 整个系统为一个隐马尔可夫模型(HMM)。
现状:医生知道村民的总体健康状况,还知道发烧和没发烧的病人通常会表明自己有什么症状。 换句话说,医生知道隐马尔可夫模型的参数。
根据收集到的信息,得出以下的数据。
病人的状态,也就是Q(‘Healthy’, ‘Fever’)
病人的感觉,即观测状态,也就是V:(‘normal’, ‘cold’, ‘dizzy’)
π是初始状态概率向量:{‘Healthy’: 0.6, ‘Fever’: 0.4}
状态转移矩阵:

transition_probability = {'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},'Fever' : {'Healthy': 0.4, 'Fever': 0.6},}

观测概率矩阵:

emission_probability = {'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},}

起始概率start_probability 表示病人第一次到访时医生认为其所处的HMM状态,他唯一知道的是病人倾向于是健康的。这里用到的特定概率分布不是均衡的,如转移概率大约是{‘Healthy’: 0.57, ‘Fever’: 0.43}。 转移概率transition_probability表示潜在的马尔可夫链中健康状态的变化。
在这个例子中,当天健康的病人仅有30%的机会第二天会发烧。放射概率emission_probability表示每天病人感觉的可能性。假如他是健康的,50%会感觉正常。如果他发烧了,有60%的可能感觉到头晕。
如图所示:
在这里插入图片描述

HMM的三个问题

1:评估问题
已知模型λ=(A,B,π) 和观测序列O=o1,o2,…,oT,计算在模型λ下某种观测序列O出现的概率P(O|λ)
也就是HMM模型参数A,B,π已知。求病人出现一系列症状的概率?
2:学习问题
已知观测序列O=o1,o2,…,oT,估计模型参数λ=(A,B,π),使P(O|λ)最大。即用极大似然法的方法估计参数,采用EM思想、
也就是通过病人表现的一系列的症状,估计出现这一系列症状的最佳模型参数。
3:预测问题(解码问题)
已知观测序列O=o1,o2,…,oT 和模型参数λ=(A,B,π),求给定观测序列条件概率P(I|O)最大的状态序列I=(i1,i2,…,iT),即给定观测序列,求最有可能的对应的状态序列。
也就是通过观测V的状态链,去预测这几天病人是否有感冒等状态。

维特比算法

病人连续三天都去看医生,医生发现他这三天的感觉依次是:感觉正常,感觉冷,感觉头晕。医生想知道怎样的健康状态序列最能够解释这系列的观察结果。这个时候就需要用到维特比算法来解决这个问题。
维特比算法代码

def print_dptable(V):print "    ",for i in range(len(V)): print "%7d" % i,printfor y in V[0].keys():print "%.5s: " % y,for t in range(len(V)):print "%.7s" % ("%f" % V[t][y]),printdef viterbi(obs, states, start_p, trans_p, emit_p):V = [{}]path = {}# Initialize base cases (t == 0)for y in states:V[0][y] = start_p[y] * emit_p[y][obs[0]]path[y] = [y]# Run Viterbi for t > 0for t in range(1,len(obs)):V.append({})newpath = {}for y in states:(prob, state) = max([(V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])V[t][y] = probnewpath[y] = path[state] + [y]# Don't need to remember the old pathspath = newpathprint_dptable(V)(prob, state) = max([(V[len(obs) - 1][y], y) for y in states])return (prob, path[state])

对维特比的参数解释如下: obs 为观察结果序列, 例如 [‘normal’, ‘cold’, ‘dizzy’]; states 为一组隐含状态; start_p 为起始状态概率; trans_p 为转移概率; 而 emit_p 为放射概率。 为了简化代码,我们假设观察序列 obs 非空且 trans_p[i][j] 和 emit_p[i][j] 对所有状态 i,j 有定义。
给出维特比的参数

states = ('Healthy', 'Fever')observations = ('normal', 'cold', 'dizzy')start_probability = {'Healthy': 0.6, 'Fever': 0.4}transition_probability = {'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},'Fever' : {'Healthy': 0.4, 'Fever': 0.6},}emission_probability = {'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},}

求解

def example():return viterbi(observations,states,start_probability,transition_probability,emission_probability)
print example()

总结

维特比算法揭示了通过观察结果 [‘normal’, ‘cold’, ‘dizzy’] ,找到最有可能由状态序列 [‘Healthy’, ‘Healthy’, ‘Fever’]产生。 换句话说,对于观察到的活动, 病人第一天感到正常,第二天感到冷时都是健康的,而第三天发烧了。
维特比路径本质上是穿过格式结构的最长路径。 诊所例子的格式结构如下, 黑色加粗的是维特比路径:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/fccPHQQC.shtml

相关文章

怎么进入修复计算机界面,开机进入启动修复界面不能启动win7电脑的修复办法...

我们在win7系统的使用中有小伙伴在win7开机的时候遇到系统自动进入系统的启动修复的页面是系统出现了问题吗,提示报错文件为:X:\Windows\system32\drivers\spoon.sys的问题,那我们在win7系统的出现这样的情况应该怎么办呢&#xf…

win7电脑蓝屏没有修复计算机,教你win7开机蓝屏怎么修复

在使用电脑的过程中,经常会遇到一些问题,最常见的莫过于win7开机蓝屏了,很多朋友并不知道win7开机蓝屏怎么修复,那么遇到win7开机蓝屏的情况应该怎么办呢?下面小编针对此问题教程大家开机蓝屏怎么修复。 方法一、系统自…

win7单机修复计算机在哪,win7电脑故障怎么进入安全模式修复

如果Win7系统电脑硬件驱动或网络等出了问题,可以进入安全模式进行修复,但是很多朋友都不知win7电脑故障怎么进入安全模式修复,下面就来分享一下win7电脑故障进入安全模式的详细方法吧。 win7电脑故障怎么进入安全模式修复 方法一、开机按F8键…

Win10安装程序修复计算机,如何在Windows 10上使用安装介质引导或修复

本文将向您展示如何使用可启动的安装USB或DVD介质修复Windows 10安装,而不会丢失数据。 如果无法从Windows中访问Windows 10高级选项疑难解答选项,则需要使用USB或DVD介质。 Windows 10上使用安装介质引导或修复的步骤是: --下载Windows ISO …

windows系统镜像修复计算机,分享win10用镜像文件修复系统的方法

今天来聊聊一篇关于分享win10用镜像文件修复系统的方法的文章,现在就为大家来简单介绍下分享win10用镜像文件修复系统的方法,希望对各位小伙伴们有所帮助。 1、win10系统出错之后,不是一定需要重装系统的,可以直接使用通过win10来修复系统,即…

win10 u盘 修复计算机,怎么用u盘修复windows10专业版系统

怎么用u盘修复windows10专业版系统?很多朋友都想要知道U盘维护系统的方法是什么,其实U盘维护系统的方法是非常简单的,如果大家想学习的话,下面win10专业版官网小编教你怎么用u盘修复windows10专业版系统,有需要的用户&…

win10计算机恢复,win10系统使用“配置 windows 恢复环境(RE)”命令修复计算机的详细办法...

有关win10系统使用“配置 windows 恢复环境(RE)”命令修复计算机的操作方法想必大家有所耳闻。但是能够对win10系统使用“配置 windows 恢复环境(RE)”命令修复计算机进行实际操作的人却不多。其实解决win10系统使用“配置 windows 恢复环境(RE)”命令修复计算机的问题也不是难…

win10单机修复计算机在哪,win10如何进入高级修复选项

进入WinRE(Windows恢复环境)后,点击“疑难解答”即可显示“恢复电脑”、“初始化电脑”等Windows恢复选项,再点击“高级选项”,则可以看到更多的系统维护选项 小编整理了以下进入winRE的方法: 方法一:通过“电脑设置”…

系统盘修复计算机命令,U盘启动盘修复系统的详细步骤

原标题:U盘启动盘修复系统的详细步骤 虽然win10系统自带系统修复功能,能够在系统出现问题时修复Windows,但是此功能并不是万能,有些用户无法通过启动修复解决系统问题,也有些用户修复后就崩溃了,那么出现老…

u盘修复计算机系统,U盘启动盘修复win10系统的详细步骤

虽然win10系统自带系统修复功能,能够在系统出现问题时修复Windows,但是此功能并不是万能,有些用户无法通过启动修复解决系统问题,也有些用户修复后就崩溃了,那么出现老是重启的情况,我们就需要通过安装介质…

戴尔启动修复无法自动修复此计算机,在 Dell 计算机上运行 Windows 启动修复

Windows 8和Windows 8.1 注:注:如果计算机由于检测到的启动故障而将故障转移到Windows恢复,则应启动自动修复工具。如果自动故障转移无法正常工作,您也可以从 Windows 安装 CD 或 DVD 或从 Advanced Start Options 启动自动修复作为手动恢复工具。 引导至System Recovery O…

u盘修复计算机系统,详细教你如何用u盘修复电脑系统

当电脑出现系统问题,如系统文件损坏或确实,系统引导出错等问题,可以尝试使用u盘来对系统进行修复,下面就将使用u盘修复电脑系统的方法教给大家,即使系统没有问题大家也可以尝试制作一个启动u盘,有备无患。 …

windows7修复计算机在哪里找,Windows7系统修复方法大全

Windows7系统虽然很稳定但是系统毕竟也是软件,由一个一个文件组成,如件遭到损坏导致系统故障、系统崩溃时我们就需要对Windows7系统进行修复了,至于Win7系统的修复方法,可以参考以下小编整理的Windows7系统修复方法大全,有需要的朋友可以学习一下。 方法一、使用系统还原 …

windows系统镜像修复计算机,如何修复:Windows无法在此计算机上查找系统映像

使用内置Windows备份和恢复实用程序从外部硬盘驱动器或USB记忆棒还原系统映像时,甚至在命令提示符下还原系统映像时,通常会发生此问题。 通常,使用外部硬盘驱动器执行系统恢复时,会经常出现此错误消息。 基本上6可以防止在外部硬盘上找到系统映像。 执行系统还原时应检查并…

台式启动修复无法自动修复此计算机怎么办,如果win7启动修复无法自动修复此计算机怎么办...

摘要: 1. 引导时按F8键,直到出现高级选项后再移动,然后放开. 2.选择最后一个正确的配置,然后按Enter进行修复. 3.引导时按8进入安全模式并使用系统自己的系统还原. 4.使用系统磁盘进行修复,打开命令提示符,输入sfc / s…

window无法自动修复计算机,win7系统无法自动修复此计算机的解决方法

很多小伙伴都遇到过win7系统无法自动修复此计算机的困惑吧,一些朋友看过网上零散的win7系统无法自动修复此计算机的处理方法,并没有完完全全明白win7系统无法自动修复此计算机是如何解决的,今天小编准备了简单的解决办法,只需要按…

台式电脑显示无法自动修复此计算机,windows无法自动修复此计算机怎么解决

类型:系统其它大小:3.2M语言:中文 评分:10.0 标签: 立即下载 windows很多的小伙伴都出现了无法自动修复计算机的问题,一般这种情况是文件损坏了,只要修复好就可以了,下面小编就来给大…

Win7开机F8没有修复计算机选项的恢复方法

首先管理员运行cmd.exe,输入下面命令: reagentc /enable回车后重启按F8就能看到“修复计算机”选项。如果提示如下,可能你系统是Ghost版的,精简掉了: REAGENTC.EXE: 操作失败: 2 系统找不到指定的文件。 遇到上面这种…

怎么恢复计算机高级用户配置,如何解决win7按F8键启动高级选项中没有“修复计算机”...

win7旗舰版在默认安装情况下“高级选项”中会包含“修复计算机”选项,那么如何解决win7按F8键启动高级选项中没有“修复计算机”呢?这里学习啦小编就教给大家解决win7按F8键启动高级选项中没有“修复计算机”的方法。 解决win7按F8键启动高级选项中没有“修复计算机”方法 系统…

安全模式检测计算机,win7如何以安全模式修复计算机系统? ,您会在阅读后知道...

操作方法 01 首先需要进入安全模式 单击以关闭计算机并重新启动. 当出现类似于图2的界面时,单击F2. 选择安全模式以启动. 02 1. 在Win7安全模式下删除顽固的文件 当我们不处于安全模式时,删除某些文件时,它可能会提示“正在使用文件且无法删除…