matlab - 使用 hmm 对序列进行分类的基本帮助

标签 matlab machine-learning classification hidden-markov-models

我是 matlab、隐马尔可夫模型和机器学习的新手,正在尝试对给定的信号序列进行分类。请让我知道我所遵循的方法是否正确:

  1. 创建一个 N × N 转换矩阵并填充随机值,每行总和为 1。 (N 将是状态数)
  2. 创建一个 N x M 发射/观测矩阵并填充随机值,每行总和为 1
  3. 将序列的不同实例(即每个实例都会说“你好”这个词)转换成一个长流并将每个流提供给 hmm train 函数,这样:

    new_transition_matrix old_transition_matrix = hmmtrain(sequence,old_transition_matrix,old_emission_matrix)

  4. 给出最终的转换和发射矩阵,用未知序列进行 hmm 解码,给出概率 即 [posterior_states logrithmic_probability] = hmmdecode(sequence, final_transition_matrix,final_emission_matris)

最佳答案

1.2. 是正确的。你必须小心你的初始转换和发射矩阵不是完全统一的,它们应该为 training 稍微随机化。去工作。

3. 我会单独输入“Hello”序列,而不是将它们连接起来形成一个长序列。

假设这是 Hello 的序列:[1,0,1,1,0,0]。如果你从 3 个 'Hello' 序列组成一个长序列,你会得到:

data = [1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0]

这并不理想,您应该像这样分别输入序列:

数据 = [1,0,1,1,0,0; 1,0,1,1,0,0; 1,0,1,1,0,0]

由于您使用的是 MatLab,我建议使用 HMM toolbox由墨菲。它有一个关于如何训练具有多个观察序列的 HMM 的演示:

M = 3;
N  = 2;

% "true" parameters
prior0 = normalise(rand(N ,1));
transmat0 = mk_stochastic(rand(N ,N ));
obsmat0 = mk_stochastic(rand(N ,M));

% training data: a 5*6 matrix, e.g. 5 different 'Hello' sequences of length 6
number_of_seq = 5;
seq_len= 6;
data = dhmm_sample(prior0, transmat0, obsmat0, number_of_seq, seq_len);

% initial guess of parameters
prior1 = normalise(rand(N ,1));
transmat1 = mk_stochastic(rand(N ,N ));
obsmat1 = mk_stochastic(rand(N ,M));

% improve guess of parameters using EM
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);
LL

4.你说的是对的,下面是你在HMM工具箱中计算对数概率的方法:

% use model to compute log[P(Obs|model)]
loglik = dhmm_logprob(data, prior2, transmat2, obsmat2)

最后:看看这个 paper by Rabiner如果有任何不清楚的地方,请了解数学是如何工作的。

希望这对您有所帮助。

关于matlab - 使用 hmm 对序列进行分类的基本帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303450/

相关文章:

python - 使用进化算法实现对抗性示例生成器表现不佳

tensorflow - 对如何在 Web 应用程序中使用一些基本的机器学习感到好奇

python - 我如何在 scikit-learn 中使用 k 折交叉验证来获得每折的精确召回率?

python - 如何在版本高于 v7.3 的 MATLAB 中保存大 mat 文件并在 Python 中读取

database - MATLAB 数据库工具箱的开源替代品

MATLAB 指南针北

python - 为什么在卷积神经网络中可能有低损失,但准确率也很低?

matlab - 如何在 MATLAB 中设置自定义默认颜色图?

machine-learning - 二元分类使用哪种强化算法

machine-learning - 哪些分类器提供权重向量?