package dist.test; import dist.Distribution; import dist.DiscreteDistribution; import shared.DataSet; import shared.Instance; import dist.hmm.HiddenMarkovModelReestimator; import dist.hmm.ForwardBackwardProbabilityCalculator; import dist.hmm.SimpleHiddenMarkovModel; import dist.hmm.StateSequenceCalculator; /** * A simple coin flipping test * @author Andrew Guillory gtg008g@mail.gatech.edu * @version 1.0 */ public class HMMCoinTest { /** * The main method * @param args ignored */ public static void main(String[] args) { // simple coin flip test SimpleHiddenMarkovModel model = new SimpleHiddenMarkovModel(2); model.setInitialStateProbabilities(new double[] { .1, .9 }); model.setOutputDistributions(new Distribution[] { new DiscreteDistribution(new double[] { .2, .8}), new DiscreteDistribution(new double[] { .2, .8}) }); model.setTransitionProbabilities(new double[][] { { .2, .8 }, { .9, .1 } }); DataSet sequence = new DataSet(new Instance[] { new Instance(1), new Instance(0) }); DataSet[] sequences = new DataSet[] { sequence, new DataSet(new Instance[] { new Instance(1), new Instance(0) }), new DataSet(new Instance[] { new Instance(1), new Instance(0) }), new DataSet(new Instance[] { new Instance(1), new Instance(0) }) }; System.out.println(model + "\n"); System.out.println("Observation Sequences: "); for (int i = 0; i < sequences.length; i++) { System.out.println(sequences[i]); } System.out.println(); ForwardBackwardProbabilityCalculator fbc = new ForwardBackwardProbabilityCalculator(model, sequence); System.out.println("Probability of first sequence: "); System.out.println(fbc.calculateProbability()); System.out.println(); StateSequenceCalculator vc = new StateSequenceCalculator(model, sequence); int[] states = vc.calculateStateSequence(); System.out.println("Most likely state sequence of first sequence: "); for (int i = 0; i < states.length; i++) { System.out.print(states[i] + " "); } System.out.println(); System.out.println(); System.out.println("Reestimations of model based on sequences: "); HiddenMarkovModelReestimator bwr = new HiddenMarkovModelReestimator(model, sequences); bwr.train(); System.out.println(model + "\n"); bwr.train(); System.out.println(model + "\n"); for (int i = 0; i < 1000; i++) { bwr.train(); } System.out.println(model + "\n"); fbc = new ForwardBackwardProbabilityCalculator(model, sequence); System.out.println("Probability of first sequence: "); System.out.println(fbc.calculateProbability()); System.out.println("Probabilities of other sequences: "); for (int i = 1; i < sequences.length; i++) { fbc = new ForwardBackwardProbabilityCalculator(model, sequences[i]); System.out.println(fbc.calculateProbability()); } } }