BaumWelchLearner.java:
public <O extends Observation> Hmm<O>
learn(Hmm<O> initialHmm, List<? extends List<? extends O>> sequences)
{
Hmm<O> hmm = initialHmm;
for (int i = 0; i < nbIterations; i++)
hmm = iterate(hmm, sequences);
return hmm;
}
実際には各反復で何度も繰り返し設けられた観察シーケンスを使用しています。モデルは時には局所的な最大値に収束することがあるので、反復が必要です。次のようなプログラムを書くと、繰り返しのたびにモデルが表示されます。
BaumWelchLearner bwl = new BaumWelchLearner();
for (int i=0; i<=bwl.getNbIterations(); i++) {
Hmm iteration = bwl.iterate(yourHmm, learningSequences);
System.out.println("\nIteration " + i + ":\n" + iteration.toString());
yourHmm = iteration;
}