3

MATLAB でマルコフ連鎖の遷移行列を作成しようとしています。いくつかの異なる観測シーケンス (すべて異なる長さ) があり、それらを使用して遷移行列を生成する必要があります。

Matlab で多次マルコフ連鎖遷移行列を作成すると、単一の観測シーケンスで遷移行列を作成する方法がわかります。

異なる長さの観測を使用してどのように構築できますか? 一例として、1 つのシーケンスが 1、2、3、4 であり、別のシーケンスが 4、5、6 である場合があります。すべてのシーケンスをループしてカウントを計算することなく、これを行う方法はありますか?

4

2 に答える 2

5

したがって、マルコフ連鎖については、状態遷移のみに関心があると思います。すべての状態遷移を 1 つの Nx2 マトリックスにグループ化し、行が表示される回数をカウントできます。

この例では、長さ 4、3、および 3 の 3 つの観測値を使用しています。 cellfun を使用して、次の方法ですべての状態遷移を 1 つの行列にまとめることができます。

obs = cell(1, 3);

obs(1) = {[1 2 3 4]};
obs(2) = {[4 5 6]};
obs(3) = {[3 4 5]};

transitions = cellfun(@(x)([x(1:length(x)-1); x(2:length(x))]), obs, 'UniformOutput', false);

alltransitions = cell2mat(transitions)';

これにより、観察された遷移が得られます(1->2, 2->3, 3->4 ...):

alltransitions =

     1     2
     2     3
     3     4
     4     5
     5     6
     3     4
     4     5

遷移マトリックスを設定するには、ここにリストされているアドバイスを参考にして、すべての遷移の行を数えます。

http://www.mathworks.it/matlabcentral/answers/75009-i-ve-a-matrix-of-6x4-and-i-want-to-count-the-rows-how-many-times-it-行列で発生

[uniqueTransitions, ~, i]=unique(alltransitions,'rows','stable');
v=arrayfun(@(x) sum(i==x),1:size(uniqueTransitions,1))';
p = v/sum(v);

ベクトル p には遷移確率が含まれているため、先に進んで疎行列を作成できます。

transitionMatrix = sparse(uniqueTransitions(:,1), uniqueTransitions(:,2), p, 6,6)

結果は次のとおりです。

transitionMatrix =

   (1,2)       0.1429
   (2,3)       0.1429
   (3,4)       0.2857
   (4,5)       0.2857
   (5,6)       0.1429
于 2013-05-30T21:30:00.797 に答える
0

これは、次のような特定のデータ シーケンス (1 つのベクトル) の遷移確率行列 (TPM) を計算するためのより簡単な方法かもしれません。

myS = {S1,S2,S1,S3,...} と同じ数の状態;

TPM = hmmestimate(myS,myS);

hmmestimate関数は、MATLAB の隠れマルコフ モデルで定義されています。

于 2016-06-10T17:25:20.653 に答える