Accord.Statistics.Models.Markov.ForwardBackwardAlgorithm.Forward C# (CSharp) Method

Forward() public static method

Computes Forward probabilities for a given hidden Markov model and a set of observations.
public static Forward ( ContinuousHiddenMarkovModel model, double observations, double &scaling ) : ].double[
model ContinuousHiddenMarkovModel
observations double
scaling double
return ].double[
        public static double[,] Forward(ContinuousHiddenMarkovModel model, double[][] observations, out double[] scaling)
        {
            int states = model.States;
            double[,] A = model.Transitions;
            IDistribution[] B = model.Emissions;
            double[] pi = model.Probabilities;

            int T = observations.Length;
            var fwd = new double[T,states];
            scaling = new double[T];


            // 1. Initialization
            for (int i = 0; i < states; i++)
                scaling[0] += fwd[0, i] = pi[i]*B[i].ProbabilityFunction(observations[0]);

            if (scaling[0] != 0) // Scaling
            {
                for (int i = 0; i < states; i++)
                    fwd[0, i] /= scaling[0];
            }


            // 2. Induction
            for (int t = 1; t < T; t++)
            {
                double[] obs = observations[t];

                for (int i = 0; i < states; i++)
                {
                    double sum = 0.0;
                    for (int j = 0; j < states; j++)
                        sum += fwd[t - 1, j]*A[j, i];
                    fwd[t, i] = sum*B[i].ProbabilityFunction(obs);

                    scaling[t] += fwd[t, i]; // scaling coefficient
                }

                if (scaling[t] != 0) // Scaling
                {
                    for (int i = 0; i < states; i++)
                        fwd[t, i] /= scaling[t];
                }
            }

            return fwd;
        }

Same methods

ForwardBackwardAlgorithm::Forward ( HiddenMarkovModel model, int observations, double &scaling ) : ].double[

Usage Example

        /// <summary>
        ///   Computes Forward probabilities for a given hidden Markov model and a set of observations.
        /// </summary>
        public static double[,] Forward <TDistribution>(HiddenMarkovModel <TDistribution> model, double[][] observations, out double logLikelihood)
        where TDistribution : IDistribution
        {
            int T = observations.Length;

            double[] coefficients = new double[T];
            double[,] fwd = new double[T, model.States];

            ForwardBackwardAlgorithm.Forward <TDistribution>(model, observations, coefficients, fwd);

            logLikelihood = 0;
            for (int i = 0; i < coefficients.Length; i++)
            {
                logLikelihood += Math.Log(coefficients[i]);
            }

            return(fwd);
        }
All Usage Examples Of Accord.Statistics.Models.Markov.ForwardBackwardAlgorithm::Forward
ForwardBackwardAlgorithm