[英]Hidden Markov model classifying a sequence in Matlab
我是機器學習的新手,我讀過有關隱馬爾可夫模型的Matlab統計工具箱,我想用它來分類給定的信號序列。 我在3D矩陣P
3D坐標[501x3],我想基於此來訓練模型。 外推完整軌跡在一組特定點上結束,即在(0,0,0)處達到目標。
根據我的場景,什么是合適的偽代碼/方法。
我的偽代碼:
P
是發射矩陣,其中每個坐標是狀態 hmmgenerate
函數生成測試序列 hmmtrain(sequence,old_transition,old_emission)
hmmdecode
最終轉換和發射矩陣以給出概率(也容易混淆) 編輯1:簡而言之,我想要將[501x3]
中的每一個與HMM分類為10類軌跡。 我想為每個軌跡采樣50行,即[50x3]
,以便建立模型。 但是,對於這樣的隨機序列,我是murphyk's
HMM工具箱。
以下是使用隱馬爾可夫模型對d維序列進行分類的方法概述:
對於每個班級k
:
接下來分類一個新的序列X
:
log P(X|model_k)
計算序列的對數似然 正如我在評論中提到的, 統計工具箱只實現離散觀察HMM模型,因此您必須自己找到另一個庫或實現代碼。 Kevin Murphy的工具箱( HMM工具箱 , BNT , PMTK3 )是該領域的熱門選擇。
以下是我過去使用Kevin Murphy的工具箱發布的一些答案:
上面的答案與你在這里嘗試的有些不同,但它是一個很好的起點。
聲明/案例告訴我根據選擇建立和訓練一個隱藏的Markov模型,該模型具有以下組件,特別是使用murphyk's
HMM工具箱:
演示代碼(來自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.