6

11 の状態と遷移確率行列がありますが、モデルが非表示になっていないため、排出量はありません。状態 (1,2,3, ..., 11) のみで構成されています。
遷移確率行列に基づいてランダムな状態を生成したいのですが、HMM ツール ボックスには出力確率行列が必要です。私は何をすべきか?

[seq, states] = hmmgenerate(100, Trans, Emis) 
4

1 に答える 1

7

次の点を考慮してください。

%# number of states
N = 11;

%# some random transition matrix
trans = rand(N,N);
trans = bsxfun(@rdivide, trans, sum(trans,2));

%# fake emission matrix (only one symbol)
emis = ones(N,1);

%# get a sample of length = 10
[~,states] = hmmgenerate(10, trans, emis)

生成される状態のシーケンス:

>> states
states =
    10     1     3    11     9     4    11     1     4     6

編集:

実際、マルコフ連鎖を扱うのは比較的簡単で、自分で行うことができます。統計ツールボックスの HMM 関数を使用しない別の例を次に示します。

%# number of states
N = 3;

%# transition matrix
trans = rand(N,N);
trans = bsxfun(@rdivide, trans, sum(trans,2));

%# probability of being in state i at time t=0
prior = rand(1,N);
prior = prior ./ sum(prior);

%# generate a sequence of states
len = 100;          %# length of sequence
states = zeros(1,len);
states(1) = randsample(N, 1, true, prior);
for t=2:len
    states(t) = randsample(N, 1, true, trans(states(t-1),:));
end

%# show sequence
stairs(states, 'LineWidth',2)
set(gca, 'YGrid','on', 'YLim',[0 N+1])
xlabel('time'), ylabel('states')
title('sequence of states')

状態のシーケンス

各反復で RANDSAMPLE 関数を使用してサンプリングしています。コア関数のみ (ツールボックスなし) を使用する場合は、別の方法について「 MATLAB の加重乱数」を参照してください。

于 2012-06-15T19:08:43.847 に答える