训练隐马尔可夫模型的问题和分类的使用 [英] Issue in training hidden markov model and usage for classification

查看:38
本文介绍了训练隐马尔可夫模型的问题和分类的使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很难弄清楚如何使用凯文墨菲的HMM 工具箱工具箱.如果任何有经验的人都可以澄清一些概念性问题,那将是一个很大的帮助.我以某种方式理解了 HMM 背后的理论,但如何实际实现它并提及所有参数设置令人困惑.

I am having a tough time in figuring out how to use Kevin Murphy's HMM toolbox Toolbox. It would be a great help if anyone who has an experience with it could clarify some conceptual questions. I have somehow understood the theory behind HMM but it's confusing how to actually implement it and mention all the parameter setting.

有 2 个类,所以我们需要 2 个 HMM.
假设训练向量是:class1 O1={ 4 3 5 1 2} 和​​ class O_2={ 1 4 3 2 4}.
现在,系统必须将未知序列 O3={1 3 2 4 4} 分类为 class1 或 class2.

There are 2 classes so we need 2 HMMs.
Let say the training vectors are :class1 O1={ 4 3 5 1 2} and class O_2={ 1 4 3 2 4}.
Now,the system has to classify an unknown sequence O3={1 3 2 4 4} as either class1 or class2.

  1. obsmat0 和 obsmat1 会发生什么?
  2. 如何为转换概率 transmat0 和 transmat1 指定/语法?
  3. 在这种情况下,变量数据是什么?
  4. 状态数是否为 Q=5,因为使用了五个唯一的数字/符号?
  5. 输出符号数=5 ?
  6. 如何提及转换概率 transmat0 和 transmat1?

推荐答案

不要回答每个单独的问题,让我来说明如何使用 HMM 工具箱 一个例子——天气例子,通常在引入隐马尔可夫模型时使用.

Instead of answering each individual question, let me illustrate how to use the HMM toolbox with an example -- the weather example which is usually used when introducing hidden markov models.

基本上模型的状态是三种可能的天气类型:晴天、雨天和有雾.在任何一天,我们假设天气只能是这些值之一.因此 HMM 状态的集合是:

Basically the states of the model are the three possible types of weather: sunny, rainy and foggy. At any given day, we assume the weather can be only one of these values. Thus the set of HMM states are:

S = {sunny, rainy, foggy}

但是在这个例子中,我们不能直接观察天气(显然我们被锁在地下室!).相反,我们拥有的唯一证据是每天检查您的人是否带伞.在 HMM 术语中,这些是离散观察:

However in this example, we can't observe the weather directly (apparently we are locked in the basement!). Instead the only evidence we have is whether the person who checks on you every day is carrying an umbrella or not. In HMM terminology, these are the discrete observations:

x = {umbrella, no umbrella}

HMM 模型具有三个特点:

The HMM model is characterized by three things:

  • 先验概率:处于序列第一个状态的概率向量.
  • 转换概率:描述从一种天气状态转变为另一种天气状态的概率的矩阵.
  • 排放概率:描述在给定状态(天气)的情况下观察输出(伞与否)的概率的矩阵.

接下来,我们要么获得这些概率,要么必须从训练集中学习它们.完成后,我们可以进行推理,例如计算观察序列相对于 HMM 模型(或一堆模型,并选择最可能的模型)的似然......

Next we are either given the these probabilities, or we have to learn them from a training set. Once that's done, we can do reasoning like computing likelihood of an observation sequence with respect to an HMM model (or a bunch of models, and pick the most likely one)...

以下示例代码展示了如何填充现有概率以构建模型:

Here is a sample code that shows how to fill existing probabilities to build the model:

Q = 3;    %# number of states (sun,rain,fog)
O = 2;    %# number of discrete observations (umbrella, no umbrella)

%#  prior probabilities
prior = [1 0 0];

%# state transition matrix (1: sun, 2: rain, 3:fog)
A = [0.8 0.05 0.15; 0.2 0.6 0.2; 0.2 0.3 0.5];

%# observation emission matrix (1: umbrella, 2: no umbrella)
B = [0.1 0.9; 0.8 0.2; 0.3 0.7];

然后我们可以从这个模型中采样一堆序列:

Then we can sample a bunch of sequences from this model:

num = 20;           %# 20 sequences
T = 10;             %# each of length 10 (days)
[seqs,states] = dhmm_sample(prior, A, B, num, T);

例如,第五个例子是:

>> seqs(5,:)        %# observation sequence
ans =
     2     2     1     2     1     1     1     2     2     2

>> states(5,:)      %# hidden states sequence
ans =
     1     1     1     3     2     2     2     1     1     1

我们可以评估序列的对数似然:

we can evaluate the log-likelihood of the sequence:

dhmm_logprob(seqs(5,:), prior, A, B)

dhmm_logprob_path(prior, A, B, states(5,:))

或计算维特比路径(最可能的状态序列):

or compute the Viterbi path (most probable state sequence):

vPath = viterbi_path(prior, A, multinomial_prob(seqs(5,:),B))

使用 EM 算法进行训练,最好使用一组观察序列.

Training is performed using the EM algorithm, and is best done with a set of observation sequences.

继续同一个例子,我们可以使用上面生成的数据来训练一个新模型并将其与原始模型进行比较:

Continuing on the same example, we can use the generated data above to train a new model and compare it to the original:

%# we start with a randomly initialized model
prior_hat = normalise(rand(Q,1));
A_hat = mk_stochastic(rand(Q,Q));
B_hat = mk_stochastic(rand(Q,O));  

%# learn from data by performing many iterations of EM
[LL,prior_hat,A_hat,B_hat] = dhmm_em(seqs, prior_hat,A_hat,B_hat, 'max_iter',50);

%# plot learning curve
plot(LL), xlabel('iterations'), ylabel('log likelihood'), grid on

请记住,州顺序不必匹配.这就是为什么我们需要在比较两个模型之前置换状态.在这个例子中,经过训练的模型看起来很接近原始模型:

Keep in mind that the states order don't have to match. That's why we need to permute the states before comparing the two models. In this example, the trained model looks close to the original one:

>> p = [2 3 1];              %# states permutation

>> prior, prior_hat(p)
prior =
     1     0     0
ans =
      0.97401
  7.5499e-005
      0.02591

>> A, A_hat(p,p)
A =
          0.8         0.05         0.15
          0.2          0.6          0.2
          0.2          0.3          0.5
ans =
      0.75967      0.05898      0.18135
     0.037482      0.77118      0.19134
      0.22003      0.53381      0.24616

>> B, B_hat(p,[1 2])
B =
          0.1          0.9
          0.8          0.2
          0.3          0.7
ans =
      0.11237      0.88763
      0.72839      0.27161
      0.25889      0.74111

<小时>

您可以使用隐马尔可夫模型做更多事情,例如分类或模式识别.您将拥有属于不同类别的不同观察序列集.您首先为每个集合训练一个模型.然后给定一个新的观察序列,您可以通过计算其相对于每个模型的似然对其进行分类,并预测具有最高对数似然的模型.


There are more things you can do with hidden markov models such as classification or pattern recognition. You would have different sets of obervation sequences belonging to different classes. You start by training a model for each set. Then given a new observation sequence, you could classify it by computing its likelihood with respect to each model, and predict the model with the highest log-likelihood.

argmax[ log P(X|model_i) ] over all model_i

这篇关于训练隐马尔可夫模型的问题和分类的使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆