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

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

问题描述

我很难弄清楚如何使用 Kevin Murphy'sHMM 工具箱 工具箱.如果有经验的人可以澄清一些概念性问题,那将是一个很大的帮助.我以某种方式理解了 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);

例如,第 5 个例子是:

for example, the 5th example was:

>> 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天全站免登陆