`

HMM示例及Matlab计算

阅读更多

Alice Bob是好朋友,但是他们离得比较远,每天都是通过电话了解对方那天作了什么。Bob仅仅对三种活动感兴趣:公园散步,购物以及清理房间。他选择做什么事情只凭当天天气。Alice对于Bob所住的地方的天气情况并不了解,但是知道总的趋势。在Bob告诉Alice每天所做的事情基础上,Alice想要猜测Bob所在地的天气情况。

  Alice认为天气的运行就像一个马尔可夫链。其有两个状态 “雨”和”晴”,但是无法直接观察它们,也就是说,它们对于Alice是隐藏的。每天,Bob有一定的概率进行下列活动:“散步”,“购物”,或 “清理”。因为Bob会告诉Alice他的活动,所以这些活动就是Alice的观察数据。这整个系统就是一个隐马尔可夫模型HMM

  Alice知道这个地区的总的天气趋势,并且平时知道Bob会做的事情。也就是说这个隐马尔可夫模型的参数是已知的。可以用程序语言(Python)写下来:

   // 状态数目,两个状态:雨或晴

   states = (‘Rainy’, ‘Sunny’)

   // 每个状态下可能的观察值

   observations = (‘walk’, ‘shop’, ‘clean’)

   //初始状态空间的概率分布

   start_probability = {‘Rainy’: 0.6, ‘Sunny’: 0.4}

   // 与时间无关的状态转移概率矩阵

   transition_probability = {

   ’Rainy’ : {‘Rainy’: 0.7, ‘Sunny’: 0.3},

   ’Sunny’ : {‘Rainy’: 0.4, ‘Sunny’: 0.6},

   }

   //给定状态下,观察值概率分布,发射概率

   emission_probability = {

   ’Rainy’ : {‘walk’: 0.1, ‘shop’: 0.4, ‘clean’: 0.5},

   ’Sunny’ : {‘walk’: 0.6, ‘shop’: 0.3, ‘clean’: 0.1},

   }

  在这些代码中,start_probability代表了Alice对于Bob第一次给她打电话时的天气情况的不确定性(Alice知道的只是那个地方平均起来下雨多些)。在这里,这个特定的概率分布并非平衡的,平衡概率应该接近(在给定变迁概率的情况下){‘Rainy’: 0.571, ‘Sunny’: 0.429} transition_probability 表示马尔可夫链下的天气变迁情况,在这个例子中,如果今天下雨,那么明天天晴的概率只有30%。代码emission_probability 表示了Bob每天作某件事的概率。如果下雨,有 50% 的概率他在清理房间;如果天晴,则有60%的概率他在外头散步。

  AliceBob通了三天电话后发现第一天Bob去散步了,第二天他去购物了,第三天他清理房间了。Alice现在有两个问题:这个观察序列“散步、购物、清理”的总的概率是多少?(注:这个问题对应于HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)) 最能解释这个观察序列的状态序列(晴/雨)又是什么?(注:这个问题对应HMM基本问题之二:给定观察序列O=O1,O2,OT以及模型λ,如何选择一个对应的状态序列S = q1,q2,qT,使得S能够最为合理的解释观察序列O

  至于HMM的基本问题之三:如何调整模型参数,使得P(O|λ)最大?这个问题事实上就是给出很多个观察序列值,来训练以上几个参数的问题。

 

For illustration, the section uses the example described in A Concrete Example for Hidden Markov Model.

 

First, create the transition and emission matrices by entering the following commands.

%%%%%%%%%%%%%%%%%%%%%

转移矩阵

TRANS=[0.7 0.3;0.4 0.6];

 

发射概率

EMIS=[0.1 0.4 0.5;0.6 0.3 0.1];

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%

Next, generate a random sequence of emissions from the model, seq, of length 1000, using the function hmmgenerate. You can also return the corresponding random sequence of states in the model as the second output, states.

 

Generating Data

%%%%%%%%%%%%%%%%%%%%%%%%%

随机生成状态和概率

[seq, states] = hmmgenerate(1000, TRANS, EMIS);

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

得到这么一段东西:

seq=[1, 2, 2, 2, 3, 2,...]

说明朋友最近的行踪:【散步,购物,购物,购物,打扫卫生,购物】,是个购物狂哦!

 

Computing the Most Likely Sequence of States

 

Used the Viterbi algorithm to compute the most likely sequence of states that the model would go through to generate the given sequence of emissions.

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

likelystates = hmmviterbi(seq, TRANS, EMIS);

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

To test the accuracy of hmmviterbi, you can compute the percentage of the time that the actual sequence states agrees with the sequence likelystates.

 

%%%%%%%%%%%%%%%%%%%%%%%%%%

sum(states==likelystates)/1000

%%%%%%%%%%%%%%%%%%%%%%%%%

 

I got 0.7710 in my computer. 看来对天气的预测不是很准哈

 

Estimating the Transition and Emission Matrices

Suppose you do not know the transition and emission matrices in the model, and you observe a sequence of emissions, seq. If you have an initial guess as to the values of TRANS and EMIS, you can estimate the transition and emission matrices using the function hmmtrain.

For example, suppose you have the following initial guesses for TRANS and EMIS.

 

 

%%%%%%%%%%%%%%%%%%%%%%%%

TRANS_GUESS = [0.5 0.5;0.5 0.5];

EMIS_GUESS = [0.3 0.4 0.3;0.6 0.3 0.2];

%%%%%%%%%%%%%%%%%%%%%%%%

 

You can estimate TRANS and EMIS with the following command.

 

%%%%%%%%%%%%%%%%%%%%%%%%%%

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)

%%%%%%%%%%%%%%%%%%%%%%%%%%

分享到:
评论

相关推荐

    隐马尔科夫模型(HMM)的MATLAB程序和工具箱

    总的来说,掌握HMM的MATLAB实现,不仅可以深化对HMM理论的理解,还能在实际项目中灵活运用,解决各种序列分析问题。通过深入学习和实践,可以进一步探索HMM在其他领域的应用,如图像处理、推荐系统等。

    HMM.zip_HMM_HMM matlab_hmm-matlab_hmm的MATLAB

    6. **应用示例**:在MATLAB文件中,可能包含了一些示例数据,比如模拟的观测序列,用于演示如何用这些函数进行训练和预测。用户可以通过调用这些函数,理解HMM的工作原理,并将其应用到自己的项目中。 通过研究和...

    HMM.zip_HMM_HMM matlab_HMM toolbox_HMM-UBM_matlab hmm

    在MATLAB环境中,HMM工具箱提供了一套完整的框架来实现HMM的学习和推理,使得研究人员和工程师能够便捷地处理与HMM相关的问题。 HMM的基本概念包含以下几个部分: 1. **状态**:在HMM中,系统存在一组不可观测的...

    HMM相关程序合集(Matlab)

    - **Demo程序**:提供预设的示例,帮助你快速了解如何运行和分析HMM代码。 - **Matlab代码**:包括初始化HMM模型、执行前向/后向算法、维特比解码、Baum-Welch训练等核心功能。 5. **学习路径**: - 首先,阅读...

    基于HMM的姿势识别 matlab代码

    【基于HMM的姿势识别 matlab代码】是一种利用隐马尔科夫模型(Hidden Markov Model,简称HMM)进行人体姿态识别的技术实现。HMM是一种统计建模方法,广泛应用于语音识别、自然语言处理和生物信息学等领域。在姿势...

    matlab官网的hmm工具包

    MATLAB作为强大的数学计算和数据分析环境,提供了专门的HMM工具包,帮助用户方便地实现HMM的相关算法。 ### HMM基本概念 在HMM中,系统状态是不可观测的,但会产生一系列可观测的输出序列。模型由以下三个关键元素...

    Hmm.rar_HMM_HMM toolbox_MATLAB HMM TOOLBOX_hidden markov_hmm mat

    在"Hmm_5"这个文件中,可能包含了相关的示例代码、模型参数或训练数据,用于演示如何使用HMM Toolbox进行操作。为了更深入地理解和使用这个工具箱,你需要详细阅读文档,了解各个函数的具体用法,并通过实际编程实践...

    hmm算法matlab实现和实例

    ### HMM算法MATLAB实现与实例详解 #### HMM(Hidden Markov Model)简介 隐马尔可夫模型(HMM)是一种统计模型,...此外,本文还提供了一个具体的实现示例,有助于读者进一步掌握HMM算法的具体操作流程和技术要点。

    ykdziix54.zip_DEMO_hmm的MATLAB

    标题中的"ykdziix54.zip_DEMO_hmm的MATLAB"表明这是一个关于隐马尔科夫模型(Hidden Markov Model,简称HMM)的MATLAB实现的压缩包,包含示例代码和相关工具函数。这个压缩包的目的是帮助用户理解和应用HMM在实际...

    MATLAB3.rar_HMM_HMM 语音识别_hmm 语音识别_matlab 语音识别_语音 matlab

    HMM在语音识别领域是常用的一种统计建模方法,而MATLAB则是一个强大的编程环境,常用于科学研究和工程计算。 描述中提到“基于HMM的语音识别的资料,希望对大家有所帮助。”这暗示了包含的文件可能是教程、论文、...

    隐马尔可夫模型源代码(matlab)

    隐马尔可夫模型(Hidden ...MATLAB因其强大的矩阵运算能力和丰富的科学计算库,是实现HMM的理想选择。通过深入研究这些源代码,你不仅可以掌握HMM的基本原理,还能熟悉MATLAB编程,为今后的科研工作打下坚实基础。

    hmm.rar_HMM_hidden markov model _hmm codes_hmm in matlab_hmm mat

    在这个“hmm.rar”压缩包中,包含了与HMM相关的代码实现,尤其是用Matlab编写的代码,这为理解和应用HMM提供了一个实践平台。 一、隐藏马尔可夫模型(HMM)基础 1. **模型定义**:HMM是一个随机过程,其中系统处于...

    abhishekbala-HMM_MATLAB_Model.zip

    MATLAB是一种广泛用于数值计算、数据分析和算法开发的编程环境,而HMM则是一种统计建模方法,常用于处理序列数据,如自然语言处理、语音识别、生物信息学等领域。 在描述中,虽然没有提供具体的信息,但我们可以...

    matlab-hmm-master.zip_HMM_SPEAKER RECOGNITION_hmm 语音 matlab_语音 训

    - 在这个项目中,`matlab-hmm-master`可能是包含源代码和示例数据的文件夹,用户可以通过解析这些文件了解如何在MATLAB环境中实现HMM训练和说话人识别的过程。 5. **文件结构**: - `matlab-hmm-master`很可能...

    HMM Matlab toolbox

    Matlab是一个强大的数值计算和可视化环境,它为实现HMM算法提供了便利。"HMM Matlab toolbox"是一个专门用于在Matlab环境中实现HMM算法的工具箱,它包含了一系列用于训练、评估和应用HMM的函数。 HMM的基本思想是...

    Matlab 隐马尔科夫模型HMM

    在提供的压缩包文件"HMM"中,可能包含Matlab代码示例,用于演示如何建立HMM模型、训练模型参数、进行解码以及评估。这些代码可以帮助理解HMM的工作原理,并在具体项目中进行应用。 通过深入理解和熟练运用HMM,你...

    基于HMM的非特定人孤立词语音识别MATLAB代码

    在本文中,我们将深入探讨基于隐马尔可夫模型(HMM)的非特定人孤立词语音识别系统,这是在MATLAB环境下实现的一种技术。非特定人语音识别是指不针对特定个体,而是针对广泛人群的语音识别系统,使得系统能够处理...

    HMM工具箱和相应matlab程序

    MATLAB作为强大的数值计算和可视化平台,是实现HMM算法的理想选择。工具箱通常包含函数库,如初始化模型、计算前向/后向概率、执行维特比解码、应用Baum-Welch算法进行参数估计等功能。这些函数使用户能够快速搭建和...

    HMMmatlab代码实现.pdf

    `HMMmatlab代码实现.pdf`显然提供了一个在MATLAB环境中实现HMM学习和推理的代码示例。 该代码的核心函数是`dhmm_em.m`,它实现了HMM的期望最大化(Expectation-Maximization, EM)算法。EM算法是估计参数的一种迭代...

Global site tag (gtag.js) - Google Analytics