隐藏马尔可夫模型在Matlab中对序列进行分类

我对机器学习非常新手,我已经阅读了关于Matlab统计工具箱中隐藏马尔可夫模型的资料,我想使用它来对给定的信号序列进行分类。我有一个矩阵P,包含3D坐标,即[501×3],我想基于此训练模型。每个完整的轨迹会在特定的点集上结束,即在(0,0,0)处达到其目标。

根据我的场景,合适的伪代码/方法是什么?

我的伪代码:

  1. 501×3矩阵P是发射矩阵,其中每个坐标是一个状态
  2. 随机的NxN转移矩阵值(但我对此感到困惑)
  3. 使用函数hmmgenerate生成测试序列
  4. 使用hmmtrain(sequence,old_transition,old_emission)进行训练
  5. 将最终的转移和发射矩阵提供给hmmdecode,并提供一个未知序列以给出概率(这也让我感到困惑)

编辑1:简而言之,我想对10类轨迹进行分类,每个轨迹的尺寸为[501x3],使用HMM。我想对每个轨迹抽样50行,即[50x3],以构建模型。然而,我有murphyk's的HMM工具箱来处理这种随机序列。


回答:

该陈述/案例要求构建和训练一个隐藏马尔可夫模型,具有以下组件,特别是使用murphyk's的HMM工具箱作为选择:

  1. O = 观测向量
  2. Q = 状态向量
  3. T = 向量序列
  4. nex = 序列数量
  5. M = 混合数量

演示代码(来自murphyk's工具箱):

    O = 8;          %向量中的系数数量    T = 420;         %序列中的向量数量    nex = 1;        %序列数量    M = 1;          %混合数量    Q = 6;          %状态数量data = randn(O,T,nex);% 参数的初始猜测prior0 = normalise(rand(Q,1));transmat0 = mk_stochastic(rand(Q,Q));if 0    Sigma0 = repmat(eye(O), [1 1 Q M]);    % 将每个均值初始化为一个随机数据点    indices = randperm(T*nex);    mu0 = reshape(data(:,indices(1:(Q*M))), [O Q M]);    mixmat0 = mk_stochastic(rand(Q,M));else    [mu0, Sigma0] = mixgauss_init(Q*M, data, 'full');    mu0 = reshape(mu0, [O Q M]);    Sigma0 = reshape(Sigma0, [O O Q M]);    mixmat0 = mk_stochastic(rand(Q,M));end[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = ...    mhmm_em(data, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', 5);loglik = mhmm_logprob(data, prior1, transmat1, mu1, Sigma1, mixmat1);

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注