为什么我们在训练隐马尔可夫模型时进行迭代

时间:2012-04-21 19:33:02

标签: iteration hidden-markov-models

我正在使用隐藏的马尔可夫模型进行分类,即jahmm实现。

在训练模型时,我使用kMeans聚类作为初始模型。然后我使用任意迭代轮来优化模型。我很惊讶在这些迭代中发生了。

我的胆量告诉我,基于初始模型生成序列,而初始模型又用于再次训练模型,依此类推。

这是真的还是还有其他事情发生?

谢谢!

1 个答案:

答案 0 :(得分:0)

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;
}