2012-04-21 69 views
0

我使用隐马尔可夫模型进行分类,jahmm实现。为什么我们在训练隐马尔可夫模型时迭代

当训练模型时,我使用kMeans聚类作为初始模型。然后我使用任意迭代来优化模型。我怀疑是在这些迭代中发生的。

我的直觉告诉我,sequenes是基于初始模型生成的,而初始模型又用于再次训练模型,依此类推。

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

谢谢!

回答

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; 
} 
相关问题