我正在使用隐藏马尔可夫模型进行分类,即 jahmm 实现。
在训练模型时,我使用 kMeans 聚类作为初始模型。然后 ia 使用任意迭代轮次来优化模型。我想知道在这些迭代中会发生什么。
我的直觉告诉我,序列是基于初始模型生成的,而这些序列又用于再次训练模型,依此类推。
这是真的还是发生了其他事情?
谢谢!
我正在使用隐藏马尔可夫模型进行分类,即 jahmm 实现。
在训练模型时,我使用 kMeans 聚类作为初始模型。然后 ia 使用任意迭代轮次来优化模型。我想知道在这些迭代中会发生什么。
我的直觉告诉我,序列是基于初始模型生成的,而这些序列又用于再次训练模型,依此类推。
这是真的还是发生了其他事情?
谢谢!
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;
}