Exemple #1
0
        public int[] PredictObservationSequence(int T)
        {
            var emission   = MathE.eexpify(logEmission);
            var transition = MathE.eexpify(logTransition);
            var pi         = MathE.eexpify(logPi);

            List <int> O    = new List <int>();
            Random     rand = new Random();

            int[] states_ = new int[states];
            for (int j = 0; j < states; j++)
            {
                states_[j] = j;
            }
            int state = RouletteSelection <int>(states_, pi, rand);


            for (int t = 0; t < T; t++)
            {
                // Get next observation state
                double[] probabilities = new double[observationSymbols];
                int[]    observations  = new int[observationSymbols];
                bool     stop          = true;
                for (int j = 0; j < observationSymbols; j++)
                {
                    probabilities[j] = emission[state, j];
                    observations[j]  = j;
                    if (probabilities[j] > 0)
                    {
                        stop = false;
                    }
                }
                if (stop)
                {
                    break;
                }
                int winner = RouletteSelection <int>(observations, probabilities, rand);
                O.Add(winner);

                stop = true;
                // Proceed to next hidden state
                probabilities = new double[states];
                int[] nextStates = new int[states];
                for (int j = 0; j < states; j++)
                {
                    probabilities[j] = transition[state, j];
                    nextStates[j]    = j;
                    if (probabilities[j] > 0)
                    {
                        stop = false;
                    }
                }
                if (stop)
                {
                    break;
                }

                winner = RouletteSelection <int>(nextStates, probabilities, rand);
                state  = winner;
            }
            return(O.ToArray());
        }
Exemple #2
0
 public double[,] CalculateGamma(int[] O)
 {
     return(MathE.eexpify(CalculateLogGamma(O)));
 }