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

Create() public method

Creates the state transitions matrix and the initial state probabilities for this topology.
public Create ( bool logarithm, double &transitionMatrix, double &initialState ) : int
logarithm bool
transitionMatrix double
initialState double
return int
        public int Create(bool logarithm, out double[,] transitionMatrix, out double[] initialState)
        {
            int m = System.Math.Min(States, Deepness);
            double[,] A = new double[States, States];

            if (random)
            {
                // Create pi
                double sum = 0;
                for (int i = 0; i < states; i++)
                    sum += pi[i] = Accord.Math.Random.Generator.Random.NextDouble();

                for (int i = 0; i < states; i++)
                    pi[i] /= sum;

                // Create A using random uniform distribution,
                //  without allowing backward transitions
                for (int i = 0; i < states; i++)
                {
                    sum = 0.0;
                    for (int j = i; j < m; j++)
                        sum += A[i, j] = Accord.Math.Random.Generator.Random.NextDouble();

                    for (int j = i; j < m; j++)
                        A[i, j] /= sum;
                }
            }
            else
            {
                // Create A using equal uniform probabilities,
                //   without allowing backward transitions.

                for (int i = 0; i < states; i++)
                {
                    double d = 1.0 / Math.Min(m, states - i);
                    for (int j = i; j < states && (j - i) < m; j++)
                        A[i, j] = d;
                }
            }

            if (logarithm)
            {
                transitionMatrix = Elementwise.Log(A);
                initialState = Elementwise.Log(pi);
            }
            else
            {
                transitionMatrix = A;
                initialState = (double[])pi.Clone();
            }

            return States;
        }

Usage Example

Example #1
0
        public void ForwardTest3()
        {
            var topology = new Forward(states: 3, deepness: 2);

            double[,] actualA;
            double[] actualPi;

            double[,] expectedA;
            double[] expectedPi;

            int actualStates = topology.Create(true, out actualA, out actualPi);
            int expectedStates = topology.Create(false, out expectedA, out expectedPi);

            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                    Assert.AreEqual(actualA[i, j], System.Math.Log(expectedA[i, j]));

            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                    Assert.AreEqual(actualPi[i], System.Math.Log(expectedPi[i]));

            Assert.AreEqual(actualStates, expectedStates);
            Assert.AreEqual(actualStates, 3);
        }
All Usage Examples Of Accord.Statistics.Models.Markov.Topology.Forward::Create