Solo estoy tratando de implementar el algoritmo de Baum-Welch escalado y me he encontrado con un problema en el que mis variables hacia atrás, después de escalar, superan el valor de 1. ¿Es esto normal? Después de todo, las probabilidades no deberían ser superiores a 1.
Estoy usando el factor de escala que obtuve de las variables directas:
Para el algoritmo anterior, lo implementé en Java a continuación:
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;
}
Las escalas se almacenan en la matriz llamada escalador. Hay 2 estados en este hmm. También debo tener en cuenta que los factores de escala que obtengo también son superiores a 1.
fuente