HiddenMarkovProcess

HiddenMarkovProcess[i0,m,em]

表示一个离散时间、有限状态的隐马尔可夫过程,该过程包括转换矩阵 m,输出矩阵 em 和初始隐含状态 i0.

HiddenMarkovProcess[,m,{dist1,}]

表示一个输出分布为 disti 的隐马尔可夫过程.

HiddenMarkovProcess[p0,m,]

表示一个初始隐含状态概率矢量为 p0 的隐马尔可夫过程.

更多信息

  • HiddenMarkovProcess 亦称为隐马尔可夫模型或 HMM.
  • HiddenMarkovProcess 是一个离散时间和离散状态的随机过程.
  • 隐马尔可夫过程以 DiscreteMarkovProcess[p0,m] 作为底层的隐含状态转换过程. 从一个隐马尔可夫过程观察到的值,即输出,是随机的,在状态为 i 时服从输出分布 disti. 访问给定状态序列所产生的输出是独立的.
  • HiddenMarkovProcess 的隐含状态是一些介于 1 和 之间的整数,其中 是转换矩阵 m 的长度.
  • 转换矩阵 m 指定了有条件的隐含状态转换概率 mi,jProbability[x[k+1]jx[k]i],其中 x[k] 是时间 k 时过程的隐含状态.
  • 输出矩阵 em 规定了在特定隐含状态下输出的概率 emi,rProbability[y[k]rx[k]i],其中 x[k] 是隐含状态,y[k] 是时间 k 时的输出.
  • 输出分布 disti 必须全部是单变量的或者全部是多变量的,全部是离散的或者全部是连续的.
  • 输出分布 disti 规定如果 x[k]i,则 y[k]disti.
  • 在输出矩阵中,可以用一行零表示一个无输出的静止状态,对于一般输出,也可用 None 来表示. 每个静止状态必须有一条路径通往一个输出状态.
  • 对于含有静止状态的隐马尔可夫过程 procHiddenMarkovProcess[proc] 会给出不包含静止状态的有效过程.
  • EstimatedProcess[data,HiddenMarkovProcess[n,edist]] 可被用于估算有 n 个状态的过程,其中输出分布属于由 edist 指定的分布组合.
  • 可使用下列特殊 edist 模板:
  • ss 离散输出
    "Gaussian"高斯输出
    dist分布为 dist 的状态的输出
    {dist1,,distn}状态 i 的输出分布 disti
  • EstimatedProcess 可接受下列关于 ProcessEstimator 的设置:
  • Automatic自动选择参数估算器
    "BaumWelch"期望最大化算法的最大化对数似然
    "ViterbiTraining"解码最可能的路径以及采用有监督训练
    "StateClustering"先用聚类算法然后用有监督训练
    "SupervisedTraining"根据状态和输出数据来估计
  • 方法 "BaumWelch""ViterbiTraining""StateClustering" 不要求指定估计中的隐含状态路径,而 "SupervisedTraining" 却要求访问隐藏的状态路径数据.
  • 对数据进行运算的函数,比如 LogLikelihood 可接受 Missing 值.
  • 默认情况下,RandomFunction[HiddenMarkovProcess[]] 只给出输出. 如果设置 Method->{"IncludeHiddenStates"->True},函数将给出一个 TemporalData 对象 td,同时,还包括状态序列作为元数据. 可以利用 td["HiddenStates"] 来提取隐含状态数据.
  • HiddenMarkovProcess 规定 m× 的矩阵,元素非负,每行元素之和为1,em× 的矩阵,元素非负,每行元素之和为 0 或 1, i0 是介于 1 和 之间的整数,p0 是长度为 的矢量,元素非负,元素之和为 1.
  • HiddenMarkovProcess 可以与某些函数一起使用,比如 LogLikelihoodFindHiddenMarkovStatesEstimatedProcessPDFProbability 以及 RandomFunction 函数.

范例

打开所有单元关闭所有单元

基本范例  (2)

定义一个隐马尔可夫过程:

模拟一下:

可视化输出:

根据给定输出找到最可能的隐含状态序列(Viterbi 解码):

范围  (17)

基本用法  (8)

定义一个有离散输出的隐马尔可夫过程:

生成样本路径:

定义一个有连续输出的隐马尔可夫过程:

计算一个输出序列的 LogLikelihood

定义一个有连续多变量输出的隐马尔可夫过程:

绘制输出概率密度函数在时间 时的图形:

定义一个有静止状态和离散输出的隐马尔可夫过程:

None 或零矢量来表示静止状态:

根据给定输出找到最可能的隐含状态序列:

突出显示输出状态:

找出已去除静止状态的实际隐马尔可夫过程:

定义一个有静止状态和连续输出的隐马尔可夫过程:

None 来表示静止状态:

计算过程的平均值:

找出已去除静止状态的实际隐马尔可夫过程:

根据数据估算隐马尔可夫过程:

指定一个有三个可能输出值的 2-状态过程:

计算一个过程的协方差:

使用带有 Property 注记的 Graph 来定义 HiddenMarkovProcess

计算只有输出隐含状态的有效 HMM:

估算  (5)

估算一个输出为正态分布的 2-状态过程:

将 100 条路径的直方图叠加起来:

用模板形式指定过程的类别来估算:

估算具有指数输出的 2-状态模型:

为过程估算提供一个初值:

sv 作为初始模型来估算一个过程:

指定不同的估算方法:

"BaumWelch" 是默认的估算器,它能迭代式的最大化给定输出的似然:

"ViterbiTraining" 是迭代估算器,它能最大化给定输出的联合似然和它们的未知底层状态:

"StateClustering" 常被用来进行快速的、实验性的非迭代估算:

比较所估算过程的对数似然:

"SupervisedTraining" 是能够最大化所给输出和状态的联合似然的估算器:

用模板形式指定过程的类别来估算:

对于给定输出,用子选项 "StateData" 来指定关于隐含状态的数据:

估算有两个输出和一个静止状态的 3-状态模型:

用赋值初始过程来估算一个模型:

如果没有给定初始过程,指定模板中哪些状态是静止的:

比较所得过程的对数似然:

过程内部属性  (4)

计算输出分布在一固定时间的 PDF

计算多变量输出的符号时间为变量的平均值和协方差:

隐马尔可夫过程在特定时间的输出样本:

绘制频率图形并和理论值进行对比:

找出隐马尔可夫过程输出的平稳分布:

推广和延伸  (1)

指定 RandomFunction 应该包含的隐含状态路径:

隐含状态作为元数据储存在生成的 TemporalData 对象中:

可视化状态路径:

应用  (11)

游戏  (3)

某个偶尔不老实的赌场提供一种赌硬币游戏,使用欺诈手段在所用的硬币上做了手脚,头出现的概率是尾出现概率的三倍. 已知赌场发牌员在悄悄的交替使用正常的硬币和有问题的硬币,概率为 10%:

头或尾出现的概率:

假设开始时使用两种硬币的概率相同,所得的隐马尔可夫过程:

如果上一次是头,这次还是头的概率:

如果你打算掷六次,计算尾至少出现三次的概率:

如果赌场一直使用正常的硬币,则概率为:

给定投掷结果序列,推断庄家什么时候使用了有问题的硬币:

有三个瓮,每个都盛有许多红球、蓝球和绿球:

有一个人,每次随机的选择一个瓮,取出一个球,报告球的颜色,然后把球放回其中一个瓮里. 如此重复四次. 转移到下一个瓮的概率为:

从一个瓮中取出某种颜色的球的概率对应于瓮中不同球的比例:

给定选第一个瓮的概率,构建隐马尔可夫过程:

出现颜色序列为 {red,blue,green,green} 的概率:

给定颜色序列,找出最有可能的瓮的序列:

在第一人称射击游戏中,一个特工隐藏在某一关中,等着跳出来攻击玩家. 该特工看不到玩家,但可以听到他们在做什么,结合他所知的游戏布局来估计玩家的位置. 假设这样一个布局,有27个区,四种类型草地、金属栅板、水和门户:

给不同类型的区域分配颜色:

走在不同类型的地面上会产生不同的声音:

根据地形类型产生各种声音的概率:

图示这一关的布局:

我们假设玩家通过其中任意一个门进来的概率是相同的:

玩家呆在现在所处区域不动的概率为 10%, 否则以相等的概率移动到相邻区域,由此,转移概率矩阵为:

特工听到了下述声音序列:

这表示玩家极有可能是从 27 号门进来的,此时正在 7 号区:

遗传学  (3)

一个 DNA 序列是由碱基 A、C、G、和 T 组成的. 名为核苷酸序列的子序列则是以每个字母出现的不同频率来区分开的. 一个重要的任务是将 DNA 序列分成不同的核苷酸子序列. 设想我们有一个 DNA 序列,以一个外显子开始,包含一个 5 剪接位点,结束于一个内含子. 如果外显子的碱基组成是均匀的,内含子缺少 C 和 G 碱基对,剪接位点共有核苷酸序列的 G 碱基概率是 0.95. 那么,核苷酸频率的分布为:

状态机的状态为外显子 (1)、剪接位点 (2)、内含子 (3) 和终端 (4),状态间的转换概率为:

输出结果为核苷酸 A (1)、C (2)、G (3)、T (4) 或终端 (5):

找到给予核苷酸序列最可能在的位置(外显子、剪接位点、内含子或终端):

上述核苷酸序列和 DNA 序列的联合概率为:

模式种乳腺癌的风险是因为遗传了 BRCA1 基因的一个受损的等位基因 B 而导致的. 遗传过程中,父母各自贡献自己的两个等位基因中的一个,那么每个等位基因就有 1/2 被遗传的概率:

如果母亲有一对正常的等位基因 bb,那么该父母的儿子可能出现的各个等位基因组合的概率为:

这个男孩的输出概率跟他的父亲是一样的,因为他们都是男性. 输出结果 1 意味着癌症,2 意味着没有癌症:

假设我们已知这个父亲的先验概率:

求这个父亲和这个男孩都患乳腺癌的概率:

研究某二倍体植物的两个基因,发现有以下等位基因:

并有九种不同的基因型:

这是一种自花授粉的植物,也就是说,子代的基因型只取决于父代的基因型:

基因型遗传图展示出各代之间的遗传概率:

DiscreteMarkovProcess 来对各代之间的基因型改变建模:

等位基因决定植物的表现型,即可见的特征。假设大写字母代表的等位基因相对对应的小写字母代表的等位基因是完全显性的:

这个基因型决定四种不同的表现型:

该植物的表现型(以整数标注)可以用隐马尔可夫过程来构建:

孟德尔收集了覆盖四代的 2734 个植物表现型,我们模拟他所观察到的性状:

根据这些观察到的性状来估算基因型的遗传概率:

语言学  (1)

利用一个 2-状态 HMM,把文本中的字符分类为元音和辅音:

找出最佳的参数估计:

对每一个字符,从输出矩阵中选取可能性最大的状态:

天气  (2)

树木年轮的大小和年平均气温显著相关. 利用两个温度状态(热和冷)三个树木年轮尺寸(小、中等和大),根据给定的一个四年树木年轮尺寸的序列 ,估计那几年的年平均气温. 温度改变的转换概率为:

输出概率:

树木年轮尺寸的隐马尔可夫模型:

对于指定的年轮观测值,找出最有可能的温度序列:

找出最有可能的单个温度的序列:

设想你被锁在一个房间里,你推断外面的天气情况的唯一线索是给你送饭的人是否带伞. 天气有三种可能的状态晴天、下雨或有雾,其转换概率为:

带伞的概率由天气决定:

用隐马尔可夫过程来对是否有伞建模:

基于线索的模式来进行关于外面天气的推断:

最有可能的天气模式:

每天最可能的天气状况序列:

Other  (2)

一个生产过程要么处于好的状态,要么处于坏的状态. 当处于好的状态并继续保持的概率为 90%,一旦进入不好的状态,将永远处于该状态:

当处于好的状态时,产品质量合格的概率为 99%,当处于坏的状态时,产品质量合格的概率为96%:

如果以好的状态开始生产过程的概率为 80% 并且第一个产品是合格的,计算接下来两个产品合格的概率:

一个 2 位寄存器,有四个可能的状态:00、01、10和11. 该寄存器的初始状态有同样的概率是四者中任意一个:

在每一个时间步长,寄存器被随机操作. 寄存器状态不变的概率为 1/2,两个位元换位的概率为 1/4,右边的位元被翻转的概率为 1/4:

当寄存器被以此方式操作过后,我们来观察它左边的位元:

假如前三个观测值为 0、0 和 1,找出最有可能的状态序列:

属性和关系  (6)

带有离散输出的 HiddenMarkovProcessSliceDistribution 的计算结果为经验分布 DataDistribution

找出时间 时的输出分布:

找出时间 时输出的联合分布的 PDF

在任何单个时间,带有指数输出的 HiddenMarkovProcess 的输出遵从 HyperexponentialDistribution

带有一般输出分布的 HiddenMarkovProcess 的输出结果为 MixtureDistribution

被当作输出矩阵的 HMM 等价于离散马尔可夫过程:

HiddenMarkovProcess 被定义来重新标记隐含状态:

对于上面的两个过程,短输出序列的似然性是相同的:

带有静止状态的不同隐马尔可夫模型可能会给所有的序列输出指定同样的似然性:

验证它们的有效隐马尔可夫过程是一样的:

检查两个模型的所有短输出序列的似然是相同的:

可能存在的问题  (5)

输出分布必须全都有相同的维数:

输出分布必须要么全是离散的,要么全是连续的:

从每一个静止状态,一定可以到达某一输出状态,也就是说,没有重复出现的类是完全静止的:

改变转移概率使静止状态 2 可以到达输出状态 1:

如果转移矩阵每一行的和不为 1,它们将自动被归一化:

如果初始概率之和不为 1,它们也将被归一化:

Wolfram Research (2014),HiddenMarkovProcess,Wolfram 语言函数,https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html.

文本

Wolfram Research (2014),HiddenMarkovProcess,Wolfram 语言函数,https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html.

CMS

Wolfram 语言. 2014. "HiddenMarkovProcess." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html.

APA

Wolfram 语言. (2014). HiddenMarkovProcess. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html 年

BibTeX

@misc{reference.wolfram_2024_hiddenmarkovprocess, author="Wolfram Research", title="{HiddenMarkovProcess}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_hiddenmarkovprocess, organization={Wolfram Research}, title={HiddenMarkovProcess}, year={2014}, url={https://reference.wolfram.com/language/ref/HiddenMarkovProcess.html}, note=[Accessed: 22-November-2024 ]}