Skalieren der Rückwärtsvariablen in HMM Baum-Welch

9

Ich versuche nur, den skalierten Baum-Welch-Algorithmus zu implementieren, und bin auf ein Problem gestoßen, bei dem meine Rückwärtsvariablen nach der Skalierung über dem Wert 1 liegen. Ist das normal? Schließlich sollten die Wahrscheinlichkeiten nicht über 1 liegen.

Ich verwende den Skalierungsfaktor, den ich aus den Vorwärtsvariablen erhalten habe:

ct=1/sSαt(s)
wobei c_t der Skalierungsfaktor für die Zeit t ist, alpha die Vorwärtsvariable ist, s die Zustände in hmm sind.

Für den Rückwärtsalgorithmus habe ich ihn unten in Java implementiert:

public double[][] backwardAlgo(){
        int time = eSequence.size();
        double beta[][] = new double[2][time];

        // Intialize beta for current time
        for(int i = 0; i < 2; i++){
            beta[i][time-1] = scaler[time-1];
        }

        // Use recursive method to calculate beta
        double tempBeta = 0;
        for(int t = time-2; t >= 0; t--){
            for(int i = 0; i < 2; i++){
                for(int j = 0; j < 2; j++){
                    tempBeta = tempBeta + (stateTransitionMatrix[i][j] * emissionMatrix[j][eSequence.get(t+1)] * beta[j][t+1]);
                }
                beta[i][t] = tempBeta;
                beta[i][t] = scaler[t] * beta[i][t];
                tempBeta = 0;
            }
        }
        return beta;
    }

Die Skalen werden in dem Array namens Scaler gespeichert. Es gibt 2 Zustände in diesem hmm. Ich sollte auch beachten, dass die Skalierungsfaktoren, die ich erhalte, ebenfalls über 1 liegen.

itzjustricky
quelle

Antworten:

0

sS.αt(s)tt0,t1,, eSequence.get(t)ctβtichme- -1sS.βtichme- -1(s)=|S.|ct- -1

Sandris
quelle
0

β

βt(s)=p(xt+1,...,xN.|st=s)p(xt+1,...,xN.|x1,...,xt)

Ich denke also, dass über 1 sein kann.β

Verweisen Sie auf diesen Hinweis (Seite 8).

Dämmerung. W.
quelle