Как повысить точность распознавания эскизов HMM, используя большое отрицательное число ForwardBackwardScaledCalculator.InProbability()
Я подготовил модель hmm для эскиза "D", используя jahmm, модель инициализируется с помощью K-средних, как предложено на сайте jahmm, затем я использую алгоритм 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 плохо обучен или из-за набора данных? Очень ценю любые предложения!
1 ответ
С тех пор, как вы спросили, прошло много времени, но поскольку я также использовал ту же библиотеку аналогичным образом, позвольте мне ответить на ваш вопрос.
Что касается Hmms, то вероятность распознавания зависит от размера набора данных, и чем больше набор данных, тем меньше вероятность распознавания. Вы можете попытаться установить порог распознавания в зависимости от размера набора данных или получить среднее значение вероятности распознавания при одинаковых точных представлениях вашей модели.