Tôi chỉ đang cố gắng thực hiện thuật toán Baum-Welch được chia tỷ lệ và tôi đã gặp phải một vấn đề trong đó các biến lùi của tôi, sau khi chia tỷ lệ, vượt quá giá trị của 1. Điều này có bình thường không? Rốt cuộc, xác suất không nên hơn 1.
Tôi đang sử dụng hệ số tỷ lệ tôi thu được từ các biến chuyển tiếp:
Đối với thuật toán lạc hậu, tôi đã triển khai nó trong java dưới đây:
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;
}
Các thang đo được lưu trữ trong mảng được gọi là scaler. Có 2 trạng thái trong hmm này. Tôi cũng nên lưu ý rằng các yếu tố quy mô tôi đang nhận được là hơn 1.