我已经训练了一个用于草图的嗯模型" D"使用jahmm,该模型通过j -mm网站建议的K-means启动,然后我使用Baum-Welch算法。经过训练,我测试了一个观察序列,并通过ForwardBackwardScaledCalculator.InProbability()方法获得概率,代码为;
...
//training
KMeansLearner<ObservationInteger> kml = new KMeansLearner<ObservationInteger>(20, new OpdfIntegerFactory(256), seqs);
KullbackLeiblerDistanceCalculator klc = new KullbackLeiblerDistanceCalculator();
Hmm initHmm = kml.learn();
BaumWelchLearner bwl = new BaumWelchLearner();
Hmm<ObservationInteger> learntHmm = bwl.iterate(initHmm, seqs);
for (int i = 0; i < 10; i++) {
System.out.println("Distance at iteration : " + klc.distance(learntHmm, initHmm));
learntHmm = bwl.iterate(learntHmm, seqs);
}
return learntHmm
//test
ForwardBackwardScaledCalculator fbc = new ForwardBackwardScaledCalculator(testseqs,trainedHmm);
System.out.println(fbc.lnProbability());
然而,lnProbability()的结果是-196.25146甚至更小(-300),这里的问题是什么?这是因为HMm训练不好还是因为数据集? 非常感谢任何建议!
答案 0 :(得分:2)
自从你问过这已经很久了,但由于我也以类似的方式使用了相同的库,让我试着回答你的问题。
与Hmms的关系是识别概率可靠于数据集的大小,数据集越大,识别的概率就越小。您可以尝试根据数据集大小设置识别阈值,或者获取模型相同精确表示的识别概率的平均值。