0
我使用隱馬爾可夫模型進行分類,jahmm實現。爲什麼我們在訓練隱馬爾可夫模型時迭代
當訓練模型時,我使用kMeans聚類作爲初始模型。然後我使用任意迭代來優化模型。我懷疑是在這些迭代中發生的。
我的直覺告訴我,sequenes是基於初始模型生成的,而初始模型又用於再次訓練模型,依此類推。
這是真的還是有其他的事情發生?
謝謝!
我使用隱馬爾可夫模型進行分類,jahmm實現。爲什麼我們在訓練隱馬爾可夫模型時迭代
當訓練模型時,我使用kMeans聚類作爲初始模型。然後我使用任意迭代來優化模型。我懷疑是在這些迭代中發生的。
我的直覺告訴我,sequenes是基於初始模型生成的,而初始模型又用於再次訓練模型,依此類推。
這是真的還是有其他的事情發生?
謝謝!
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;
}