Menu

#1 Hmm.java forwardAlpha function

open
nobody
None
5
2004-03-24
2004-03-24
Anonymous
No

Hi,
I am not sure if it is a bug or not. But it seems that
in Hmm.java, forwardAlpha() function is different from
Robiner's paper on induction step. For convenience, I
put both your code and my modification below.
/////////////////////////////your
code////////////////////////
private double forwardAlpha()
{
clearAlpha();
for(int j=0;j<getNumStates();j++) {
alpha[0][j] = lambda.getPi(j) *
lambda.getB(j,obSeq[0]);
}
rescaleAlpha(0);

for(int t=1;t<len_obseq;t++) {
for(int i=0;i<getNumStates();i++) {
double sum = 0.0;
for(int
j=lambda.getLLimit(i);j<=lambda.getRLimit(i);j++) {
sum += alpha[t-1][i] *
lambda.getA(i,j);
}
alpha[t][i] = sum*lambda.getB(i,obSeq[t]);
}
rescaleAlpha(t);
}
double sum = 0.0;
for(int i=0;i<getNumStates();i++) {
sum += alpha[len_obseq-1][i];
}
return sum;
}
///////////////////////////////////////
//////////my modification on induction step///////////////
private double forwardAlpha()
{
clearAlpha();
for(int j=0;j<getNumStates();j++) {
alpha[0][j] = lambda.getPi(j) *
lambda.getB(j,obSeq[0]);
}
rescaleAlpha(0);

for(int t=1;t<len_obseq;t++) {
for(int i=0;i<getNumStates();i++) {
double sum = 0.0;
//I modified here//
for(int j=0;j<getNumStates();j++) {
if(j>lambda.getLLimit(i) &&
j<lambda.getRLimit(i)){
//I changed i, j//
sum += alpha[t-1][j] *
lambda.getA(j,i);
}
}
alpha[t][i] = sum*lambda.getB(i,obSeq[t]);
}
rescaleAlpha(t);
}
double sum = 0.0;
for(int i=0;i<getNumStates();i++) {
sum += alpha[len_obseq-1][i];
}
return sum;
}
/////////////////////////
my email address xxie@uwo.ca
my name is maggie xie
Thanks.

maggie

Discussion


Log in to post a comment.

MongoDB Logo MongoDB