public void TestDiscBWL() { var hmm = BuildDiscHMM(); var learntHmm = BuildDiscInitHMM(); var mg = new MarkovGenerator(hmm); var training = mg.GenerateSequences(200, 100); var bwl = new TrainBaumWelch(learntHmm, training); var klc = new KullbackLeiblerDistanceCalculator(); bwl.Iteration(5); learntHmm = (HiddenMarkovModel) bwl.Method; var e = klc.Distance(learntHmm, hmm); Assert.IsTrue(e < 0.01); }
public void TestDiscKMeans() { var hmm = BuildDiscHMM(); var mg = new MarkovGenerator(hmm); var sequences = mg.GenerateSequences(200, 100); var trainer = new TrainKMeans(hmm, sequences); var klc = new KullbackLeiblerDistanceCalculator(); trainer.Iteration(5); var learntHmm = (HiddenMarkovModel) trainer.Method; var e = klc.Distance(learntHmm, hmm); Assert.IsTrue(e < 0.05); }
public double Distance(HiddenMarkovModel hmm1, HiddenMarkovModel hmm2) { double distance = 0.0; for (int i = 0; i < SequenceCount; i++) { IMLDataSet oseq = new MarkovGenerator(hmm1) .ObservationSequence(Len); distance += (new ForwardBackwardScaledCalculator(oseq, hmm1) .LnProbability() - new ForwardBackwardScaledCalculator( oseq, hmm2).LnProbability()) / Len; } return(distance / SequenceCount); }
public double Distance(HiddenMarkovModel hmm1, HiddenMarkovModel hmm2) { double distance = 0.0; for (int i = 0; i < SequenceCount; i++) { IMLDataSet oseq = new MarkovGenerator(hmm1) .ObservationSequence(Len); distance += (new ForwardBackwardScaledCalculator(oseq, hmm1) .LnProbability() - new ForwardBackwardScaledCalculator( oseq, hmm2).LnProbability()) /Len; } return distance/SequenceCount; }