1

このウィキペディアのリンクからMatlabにBaum-Welchアルゴリズムを実装しています:Baum-Welchアルゴリズム。これは、金融時系列のボラティリティ予測の一部です。
2 つの質問があります。

1 : ウィキペディア ページの最後の更新ステップで、「これらのステップは、必要なレベルの収束まで反復的に繰り返されるようになりました。」と説明されています。
では、ループを停止する条件を宣言するにはどうすればよいでしょうか。さらに、どの変数を評価して、許容できるかどうかを確認する必要がありますか?

2 :ウィキペディアの式に注意すると、次のようになりますkesi

kesi = (alhpa(i,t) * a(i,j) * beta(j,t+1) * b(j,t+1) ) / sum over states for alpha(states,T)

alpha分子 ( and beta) でスケーリングされる 2 つの係数と、分母 ( just )でスケーリングされる 1 つの係数がありますalpha。したがって、お互いの効果をキャンセルしません。方程式を実装し(たとえば、20回繰り返すループで)、スケーリング手順を実行しました。しかし、「遷移確率行列」と「初期分布」と「放出行列」はNaN値を取得します!!!

この質問の回答Baum-Welch 多くの可能な観察を読みました。そこに記載されているチュートリアルに基づいてスケーリングを行いました。
これが私のコードです:

n = 3;      % number of sataes
T = 20;     % number of observations
%do some initializing things with random values and computing gamma,kesi...
index=20;
while index>=0
pi_star = gamma(:,1)';
P_star = zeros(n,n);
for i_2=1:n
    makhraj = sum(gamma(i_2,:));
    for j=1:n
        sorat = sum(kesi(i_2,j,:));
        P_star(i_2,j) =(sorat) / (makhraj) ;
    end
end
Q_star=zeros(n,T);
for t=1:T
    for i_2=1:n
        makhraj = sum(gamma(i_2,:));
        sorat=0;
        for h=1:T
            if Obs(h) == Obs(t)
                sorat = sorat + (gamma(i_2,t));
            end
        end
        Q_star(i_2,t) = (sorat)/(makhraj);
    end
end
%computing the forward probabilities
for i_2=1:n
    alpha(1,i_2) = pi_star(1,i_2)*Q_star(i_2,1);
end
for t=2:T
    for j=1:n
        alpha(t,j) = (alpha(t-1,:)*(P_star(:,j))) * Q_star(j,t) ;
    end
end
%%% scaling forward probabilities
for t=1:T
    c = 1 / sum(alpha(t,:));
    for i2=1:n
        alpha(t,i2) = alpha(t,i2) * c;
    end
end
%computes backward probabilitis
for t=(T-1):(-1) : 1
    rightVector=Q_star(:,t+1).* beta( t+1 ,:)' ;
    beta ( t , : ) = P_star* rightVector ;
end
%%% scaling backward probabilities
for t=1:T
    d = 1 / sum(beta(t,:));
    for i2=1:n
        beta(t,i2) = beta(t,i2) * d;
    end
end
%computing gamma variable
sigma_ab = zeros(1,T);
for t=1:T
    for j=1:n
        sigma_ab(1,t) = sigma_ab(1,t) + (alpha(t,j)*beta(t,j));
    end
end
for t=1:T
    for j=1:n
        gamma(j,t) = ((alpha(t,j)*beta(t,j))/sigma_ab(1,t));
    end
end
%computing kesi
makhraj_k = zeros(1,T);
for t=1:T
    for i_2=1:n
        makhraj_k(1,t) = makhraj_k(1,t) + alpha(t,i_2);
    end
end
for t=1:T-1
    for i_2=1:n
        for j=1:n
            kesi(i_2,j,t) = (alpha(t,i_2)*P_star(i_2,j)*beta(t+1,j)*Q_star(j,t+1))/makhraj_k(1,t);
        end
    end
end
index = index -1;
end %end while

では、このスケーリングの問題に対して今何をすべきでしょうか? このNaN値は、スケーリングの問題またはその他の理由によるものですか?
御時間ありがとうございます。

4

0 に答える 0