簡體   English   中英

隱馬爾可夫模型在Matlab中對序列進行分類

[英]Hidden Markov model classifying a sequence in Matlab

我是機器學習的新手,我讀過有關隱馬爾可夫模型的Matlab統計工具箱,我想用它來分類給定的信號序列。 我在3D矩陣P 3D坐標[501x3],我想基於此來訓練模型。 外推完整軌跡在一組特定點上結束,即在(0,0,0)處達到目標。

根據我的場景,什么是合適的偽代碼/方法。

我的偽代碼:

  1. 501x3矩陣P是發射矩陣,其中每個坐標是狀態
  2. 隨機NxN轉移矩陣值(但我很困惑)
  3. 使用hmmgenerate函數生成測試序列
  4. 使用hmmtrain(sequence,old_transition,old_emission)
  5. 給出具有未知序列的hmmdecode最終轉換和發射矩陣以給出概率(也容易混淆)

編輯1:簡而言之,我想要將[501x3]中的每一個與HMM分類為10類軌跡。 我想為每個軌跡采樣50行,即[50x3] ,以便建​​立模型。 但是,對於這樣的隨機序列,我是murphyk's HMM工具箱。

以下是使用隱馬爾可夫模型對d維序列進行分類的方法概述:

1)培訓:

對於每個班級k

  • 准備一個HMM模型。 這包括初始化以下內容:
    • 轉換矩陣:Q-by-Q矩陣,其中Q是狀態數
    • 先驗概率的向量:Q-by-1向量
    • 排放模型:在您的情況下,觀測值是3D點,因此您可以使用多變量正態分布 (使用指定的平均向量和協方差矩陣)或高斯混合模型 (使用混合系數組合的一組MVN分布)
  • 在正確初始化上述參數后,訓練HMM模型,為其提供屬於該類的序列集(EM算法)。

2)預測

接下來分類一個新的序列X

  • 使用每個模型log P(X|model_k)計算序列的對數似然
  • 然后你選擇概率最高的班級。 這是課堂預測。

正如我在評論中提到的, 統計工具箱只實現離散觀察HMM模型,因此您必須自己找到另一個庫或實現代碼。 Kevin Murphy的工具箱( HMM工具箱BNTPMTK3 )是該領域的熱門選擇。

以下是我過去使用Kevin Murphy的工具箱發布的一些答案:

上面的答案與你在這里嘗試的有些不同,但它是一個很好的起點。

聲明/案例告訴我根據選擇建立和訓練一個隱藏的Markov模型,該模型具有以下組件,特別是使用murphyk's HMM工具箱:

  1. O =觀察的向量
  2. Q =狀態向量
  3. T =向量序列
  4. nex =序列數
  5. M =混合物的數量

演示代碼(來自murphyk's工具箱):

    O = 8;          %Number of coefficients in a vector
    T = 420;         %Number of vectors in a sequence
    nex = 1;        %Number of sequences
    M = 1;          %Number of mixtures
    Q = 6;          %Number of states



data = randn(O,T,nex);

% initial guess of parameters
prior0 = normalise(rand(Q,1));
transmat0 = mk_stochastic(rand(Q,Q));

if 0
    Sigma0 = repmat(eye(O), [1 1 Q M]);
    % Initialize each mean to a random data point
    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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM