Saya hanya mencoba untuk mengimplementasikan algoritma Baum-Welch yang diskalakan dan saya telah mengalami masalah di mana variabel terbelakang saya, setelah penskalaan, berada di atas nilai 1. Apakah ini normal? Bagaimanapun, probabilitas tidak boleh lebih dari 1.
Saya menggunakan faktor skala yang saya dapatkan dari variabel forward:
Untuk algoritma mundur saya menerapkannya di java di bawah ini:
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;
}
Timbangan disimpan dalam array yang disebut scaler. Ada 2 status dalam hmm ini. Saya juga harus mencatat bahwa faktor skala yang saya dapatkan lebih dari 1 juga.
sumber